gpt4 book ai didi

c++ - 为什么下面的代码不起作用?

转载 作者:行者123 更新时间:2023-11-30 02:09:02 25 4
gpt4 key购买 nike

我已经使用以下样式创建了一个静态控件...

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。计算调用 SendMessage(STM_SETIMAGE) 的次数以及到达 case STM_SETIMAGE 的次数。


此外,HDC imgDC = GetDC((HWND)img); 永远不会起作用。 HBITMAP 不是 HWND

关于c++ - 为什么下面的代码不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5818751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com