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);

しかし、それはうまくいきませんでした...誰かがこれを解決するのを手伝うことができます...事前にソヌに感謝します

4

3 に答える 3

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 に答える
3

WM_INITDIALOGメッセージを処理するときは、画像コントロールのハンドルを取得するために使用します(これはダイアログ自体へのハンドルであるとHWND hImageCtl = GetDlgItem(_hwnd, <image-control-resource-id>)想定しています)。_hwnd

次に、を使用してメッセージをhImageCtlに送信します。STM_SETIMAGE

于 2012-10-12T14:30:34.497 に答える
2

私にとってWindows98以来、これは何年にもわたって機能します。

//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 に答える