1

我正在开发一个 C++ Api 项目。

我将使用 dialogboxparam 创建一个对话框...

我完成了创建和设置文本框、标签和按钮...它工作正常...

现在我想在对话框顶部添加一个图像...

我确实在 WM_INITDIALOG 中使用了这段代码:

HBITMAP hImage= (HBITMAP)LoadImage(NULL,L"C:\\WINDOWS\\system32\\BMA-Images\\login-header",IMAGE_BITMAP,LR_DEFAULTSIZE ,LR_DEFAULTSIZE ,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
            SendMessage(_hwnd,STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)hImage);

但它没有用......任何人都可以帮助解决这个问题......提前感谢Sonu

4

3 回答 3

3

处理WM_INITDIALOG消息时使用HWND hImageCtl = GetDlgItem(_hwnd, <image-control-resource-id>)获取图像控件的句柄(这假定_hwnd是对话框本身的句柄)。

然后使用hImageCtl发送STM_SETIMAGE消息到。

于 2012-10-12T14:30:34.497 回答
3

最简单的方法是覆盖窗口的 WM_PAINT 并在该点绘制位图(在 BeginPaint 和 EndPaint 之间)调用

这里有一个基于 MFC 的示例:

http://www.programmersheaven.com/mb/mfc_coding/113034/113034/how-do-i-set-a-background-picture-in-a-dialog-box-/

于 2012-10-12T12:57:46.163 回答
2

这工作多年,因为我的 Windows 98:

//globals
HBRUSH hbr;
PAINTSTRUCT wcd;

LRESULT CALLBACK MainWndProc( HWND hWnd, UINT msg, WPARAM wParam,
   LPARAM lParam )
{

   switch( msg ) {

   case WM_PAINT:
       if (GetUpdateRect(hWnd,r,0)) {   
           BeginPaint(hWnd,&wcd);
           if (wParam == NULL) FillRect(wcd.hdc,&wcd.rcPaint,hbr);
           EndPaint(hWnd,&wcd);         
       } 
        break;

      case WM_COMMAND:
///your code
   }
}



int  WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int Show)
{  
    ghInstance = hInstance;
    //Prepare brush for background
    hbr=CreatePatternBrush(LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_BGROUND)));
///your code
    DialogBox(hInstance,"MAIN", NULL,(DLGPROC)MainWndProc);
///your code
    return(FALSE);
}

IDB_BGROUND - 链接的图像资源的 ID。

于 2013-01-26T14:00:52.173 回答