[英]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
。
此代碼存在多個問題。
WM_PAINT
之外,您不能在任何地方使用BeginPaint
/ EndPaint
。 在考慮其他問題之前解決這個問題。CallWindowProc
。NULL
開始。從這些事情開始,你會更接近正軌。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.