如何在c ++ win32 API中设置对话框中的图像?

时间:2012-10-12 12:14:24

标签: c++ c windows winapi dialog

我正在开发一个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

3 个答案:

答案 0 :(得分: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-/

答案 1 :(得分:3)

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

然后使用hImageCtlSTM_SETIMAGE消息发送到。

答案 2 :(得分: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,链接在。