如何单独处理子ListBox WndProc
How to handle child ListBox WndProc separately?
我想在它自己的wndproc中为自己的透明项目处理所有ListBox消息,这些项目与MainWindow中显示的图像混合绘制。不幸的是,现在只有WM_PAINT、WM_ERASEBKGND和一些LB_*消息,而没有WM_DRAWTITEM进入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;
}
来自文档:
WM_DRAWTITEM消息
当所有者绘制的按钮、组合框、列表框或菜单的视觉外观发生更改时,发送到该按钮、组合盒、列表框的父窗口。
列表框不应该得到该消息,即使所有者已绘制。它的父窗口,您的主窗口,可以获取它们,这样您就不必对列表框进行子类化。
相关文章:
- 是为ListBox(WC_ListView)自动绘制的焦点矩形
- WM_DESTROY没有在包裹的WndProc内部调用
- QT:无法在ListBoxWidget中的ListBox项目中添加选择和取消选择功能
- C Winapi ListBox使用lb_getsel/lb_getCursel获取所选项目
- 如何在控制台应用中注册WNDProc
- 在API中控制WNDProc功能的问题
- WNDPROC处理事件更少的代码
- 异步 Winsock Server 的 WndProc 未被调用
- 如何让 wndproc 处理发送到多个窗口的消息
- WndProc的类方法
- C++:如何为控制台应用程序设置新的 wndProc
- Win32 ListBox WNDProc从未打电话
- Win32获取从窗口WNDProc发送事件的对象的HWND
- 从ListBox行获得标签的更好方法
- 如何将WndProc用作类函数
- Winapi中使用ListBox的非常简单的示例
- 在WNDClasSex中断代码中将代码添加到WNDPROC回调中
- 将 WndProc 替换为另一个函数来处理消息
- 使用类成员作为带有或不带有全局的WNDPROC/DLPROC
- 如何单独处理子ListBox WndProc