gpt4 book ai didi

c++ - 如何单独处理子ListBox WndProc?

转载 作者:太空宇宙 更新时间:2023-11-04 02:06:14 25 4
gpt4 key购买 nike

我想在它自己的 wndproc 中处理所有 ListBox 消息传递,用于自己的透明项目绘画与 MainWindow 中显示的图像混合。不幸的是,现在只有 WM_PAINT、WM_ERASEBKGND 和一些 LB_* 消息,没有 WM_DRAWITEM 到达 ListWndProc

代码是:

#include <windows.h>

bool InitInstance(HINSTANCE hInstance, int nCmdShow)
{
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_UPDATER));
wc.hCursor = 0;
//wc.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH);
wc.hbrBackground = CreatePatternBrush(LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1)));
wc.lpszMenuName = 0;
wc.lpszClassName = szWindowClass;

if(!RegisterClass(&wc)) { return FALSE; }

// MainWindow
g_hWndMain = CreateWindowEx(WS_EX_NOANIMATION,
szWindowClass,
szTitle,
WS_VISIBLE,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);

_ASSERT(g_hWndMain != NULL);

if (!g_hWndMain) { return FALSE; }

ShowWindow(g_hWndMain, nCmdShow);
UpdateWindow(g_hWndMain);

主窗口过程:

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
{
g_hWndList = CreateWindowEx(0,
_T("LISTBOX"),
NULL,
WS_CHILD | WS_VISIBLE | LBS_NOSEL | LBS_HASSTRINGS,
10, // Top X coord
10, // Top Y coord
600, // Width
400, // Height
hWnd,
NULL,
g_hInst,
NULL);

_ASSERT(g_hWndList != NULL);
defProcList = (WNDPROC)SetWindowLong(g_hWndList, GWL_WNDPROC, (LPARAM)(ListWndProc));

}
}

列表框 wndproc:

LRESULT CALLBACK ListWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
case WM_ERASEBKGND:
{
return TRUE;
}

case WM_DRAWITEM:
{
}
break;
}

最佳答案

来自 the documentation :

WM_DRAWITEM message

Sent to the parent window of an owner-drawn button, combo box, list box, or menu when a visual aspect of the button, combo box, list box, or menu has changed.

列表框不应该收到该消息,即使是所有者绘制的。它的父窗口,即您的主窗口,获取它们,因此您不必子类化列表框。

关于c++ - 如何单独处理子ListBox WndProc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20301432/

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