我一直在阅读有关子类化的MSDN文档,我已成功处理子类中的事件
我的问题是将消息传递回原始的WndProc.
例如,如果我有一个窗口,具有子类别组框控件和一个按钮作为该组框的子项,我想处理原始窗口过程中的按钮事件,而不是子类化的组框过程.
基本上,我想要一个空的子类过程:
LRESULT FAR PASCAL SubClassFunc(HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
return CallWindowProc(oldProc, hwnd, uMsg, wParam, lParam);
}
Run Code Online (Sandbox Code Playgroud)
oldProc的位置是:
FARPROC oldProc = (FARPROC)SetClassLong(group_box, GCL_WDPROC, (DWORD)SubCLassFunc);
Run Code Online (Sandbox Code Playgroud)
窗口和组框和按钮的位置是:
HWND window = CreateWindowEx(
WS_EX_WINDOWEDGE,
appname,
TEXT("Subclass Test"),
WS_VISIBLE |WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
300,
400,
NULL,
NULL,
hInstance,
0);
HWND group_box = CreateWindowEx(
0,
TEXT("BUTTON"),
TEXT("Group Box"),
WS_CHILD | WS_VISIBLE | BS_GROUPBOX,
8,
8,
275,
350,
window,
NULL,
hInstance,
0);
HWND push_button = CreateWindowEx(
0,
TEXT("BUTTON"),
TEXT("Push Button"), …
Run Code Online (Sandbox Code Playgroud) 当我启用通用控件视觉样式支持 (InitCommonControls()) 并且使用除 Windows 经典主题之外的任何主题时,组框中的按钮会显示带有方角的黑色边框。
Windows 经典主题显示正常,当我关闭视觉样式时也是如此。
我正在使用以下代码:
group_box = CreateWindow(TEXT("BUTTON"), TEXT("BS_GROUPBOX"),
WS_CHILD | WS_VISIBLE | BS_GROUPBOX | WS_GROUP,
10, 10, 200, 300,
hwnd, NULL, hInstance, 0);
push_button = CreateWindow(TEXT("BUTTON"), TEXT("BS_PUSHBUTTON"),
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
40, 40, 100, 22,
group_box, NULL, hInstance, 0);
Run Code Online (Sandbox Code Playgroud)
编辑:单选按钮也会出现此问题
编辑:我没有使用任何对话框/资源,仅使用 CreateWindow/Ex。
我正在 Visual C++ 2008 Express SP1 下使用通用清单文件进行编译