3

大家好,我想知道VC++中是否有像VB中那样的图像控件。实际上,使用图片框时,我遇到了无法在设计时为我的对话框调整图像大小的问题。但在图像控制中这是可能的。我没有图像控件有没有办法在设计时从对话框编辑器检查对话框的高度和宽度???

4

1 回答 1

0

如果您正在编写一个非托管的 C 或 C++ 项目,这比使用在设计托管 Windows 窗体应用程序时可用但仍然可行的 PictureBox 控件要困难一些。

如果你使用的是 DialogBox 资源的窗口(注意:我写这部分是使用 Visual Studio 2015 作为参考,而不是 2008,但大体过程应该是一样的):

  1. 将图像作为资源插入项目中。假设IDB_BITMAP1为简单起见,我们为位图命名了资源。
  2. Static在对话框中创建一个新的子窗口。
  3. 右键单击新Static窗口并选择Properties
  4. 在 中的Misc副标题下Properties,更改TypeBitmap
  5. 在 中的Misc副标题下Properties,更改ImageIDB_BITMAP1

如果您正在手动编码窗口(即手动编写调用CreateWindowCreateWindowEx创建窗口):

  1. 将图像作为资源插入项目中。确保将该行添加#include "resource.h"到您的代码中。
  2. LoadBitmap使用该函数获取位图的句柄。
  3. 创建静态窗口作为主窗口的子窗口,并指定SS_BITMAP窗口样式。
  4. 使用先前标识的位图资源句柄将消息发送STM_SETIMAGE到窗口。

示例代码,假设您的图像是IDB_BITMAP1

#include <Windows.h>
#include <tchar.h>
#include "resource.h"

int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd)
{
    HWND hWnd, hStcImage;
    MSG Msg;
    HBITMAP hBitmap = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1));

    // ... register the window class etc

    hWnd = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, _T("ExampleClassName"), _T("Simple Window"), WS_VISIBLE | WS_SYSMENU, 100, 100, 350, 370, NULL, NULL, hInstance, NULL);
    hStcImage = CreateWindow(_T("Static"), NULL, WS_VISIBLE | WS_CHILD | SS_BITMAP, 10, 10, 0, 0, hWnd, NULL, hInstance, NULL);
    SendMessage(hStcImage, STM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hBitmap);

    ShowWindow(hWnd, SW_SHOW);
    UpdateWindow(hWnd);

    while (GetMessage(&Msg, NULL, 0, 0) > 0)
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }
    return Msg.wParam;
}
于 2017-01-14T23:18:30.480 回答