我正在学习C++中的Windows编程.我创建了我的第一个Windows,但有一点我不太了解:WNDCLASS中的WNDPROC.结构记录如下:
typedef struct tagWNDCLASS {
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
} WNDCLASS, *PWNDCLASS;
Run Code Online (Sandbox Code Playgroud)
现在为了分配给lpfnWndProc,我必须有一个像这样的回调函数WindowProc:
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
Run Code Online (Sandbox Code Playgroud)
然后我必须像这样分配lfpnWndProc:
WNDCLASS wc = { };
wc.lpfnWndProc = WindowProc;
Run Code Online (Sandbox Code Playgroud)
据我了解,WindowProc是一个功能.如果我像这样分配,这意味着我正在分配WNDCLASS中的函数指针.但是在WNDCLASS定义中,没有任何东西表明它是一个函数指针.此外,它看起来像我的数据类型而不是函数指针.
通常我会得到这样的函数指针作为参数传入或用作变量:
#include <stdio.h>
void my_int_func(int x)
{
printf("%d\n",x);
}
int main(void)
{
void (*foo) (int);
foo = &my_int_func;
foo(2);
(*foo)(2);
}
Run Code Online (Sandbox Code Playgroud)
但我必须分配WindowProc的方式对我来说没有意义.有人能帮助我理解这个吗?
WNDPROC是一个函数指针类型.定义是:
typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
Run Code Online (Sandbox Code Playgroud)
函数,有点像数组,在某些上下文中自动衰减成指针.将&在您的示例程序是可选的.
| 归档时间: |
|
| 查看次数: |
626 次 |
| 最近记录: |