簡體   English   中英

為什么以下代碼不起作用?

[英]Why the following code is not working?

我使用以下 styles 創建了一個 static 控件...

picBoxDisp = CreateWindow("STATIC", "image box",
         WS_VISIBLE |WS_CHILD | SS_BITMAP |WS_TABSTOP | WS_BORDER,
         50, 50, 250, 300,
         hwnd , (HMENU)10000, NULL, NULL);  

SetWindowLongPtr(picBoxDisp,GWLP_WNDPROC,(LONG) dispWndProc);

從我程序中的某個地方,我有以下代碼..

SendMessage(picBoxDisp,STM_SETIMAGE, (WPARAM) IMAGE_BITMAP,(LPARAM) hBitmap);

現在在 dispWndProc 我有以下代碼..

LRESULT CALLBACK dispWndProc(HWND hwnd,UINT msg, WPARAM wParam, LPARAM lParam)
{
static HDC hdc;
static PAINTSTRUCT paintSt;
static RECT aRect;
switch(msg)
{
    case WM_PAINT:
    {
        hdc = BeginPaint(hwnd,&paintSt);
        GetClientRect(hwnd,&aRect);                     
        // the code for painting 
        EndPaint(hwnd,&paintSt);
    }
    break;
    case STM_SETIMAGE:
    {

        //painting code;
        HBITMAP img = (HBITMAP)lParam;
        BITMAP bmp;
        GetObject(img,sizeof(bmp),&bmp);
        HDC imgDC = GetDC((HWND)img);
        HDC memDC = CreateCompatibleDC(imgDC);
        SelectObject(memDC,img);
        if((img==NULL))// ||(imgDC==NULL)||(memDC==NULL))
        {

                     MessageBox(NULL,"img is NULL","Bad Programming!!! Error",MB_OK);

        }

        else

        {
        StretchBlt(hdc,0,0,aRect.right,aRect.bottom,
        memDC,0,0,bmp.bmWidth,bmp.bmHeight,
        SRCCOPY);
        }

    }
        break;  
    default:
        return DefWindowProc(hwnd,msg,wParam,lParam);

}

return 0;
}

誰能告訴為什么 lParam 沒有類型轉換回 HBITMAP.... 為什么 img 是 NULL?

提前致謝,

其他一些代碼也可能將STM_SETIMAGE發送到您的 window。 計算您調用SendMessage(STM_SETIMAGE)的次數以及到達case STM_SETIMAGE的次數。


此外, HDC imgDC = GetDC((HWND)img); 永遠不會工作。 HBITMAP不是HWND

此代碼存在多個問題。

  1. 除了處理WM_PAINT之外,您不能在任何地方使用BeginPaint / EndPaint 在考慮其他問題之前解決這個問題。
  2. 接下來,不清楚您是否正確地將 window 子類化; 確保在舊的 window proc 上調用CallWindowProc
  3. 很難保證您所看到的確實是您認為您所看到的。 例如,正如 Ben Voigt 所說,也許你不是發送它的人。 也許上面的開關盒塊掉了下來。 也許你從NULL開始。

從這些事情開始,你會更接近正軌。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM