用C+SDK编程,窗口可否在CreateWindow前就定义一个ID,然后一直带着走
用C+SDK编程,窗口能否在CreateWindow前就定义一个ID,然后一直带着走?
我希望多个窗口公用一个WndProc,再根据hWnd和message查表,获得对应的处理函数。
表的字段包括:窗口句柄,消息代号,处理函数指针
但是窗口句柄要在CreateWindow之后才能得到,错过了对WM_CREATE消息的处理,能在窗口创建前就分配一个ID,让它一直带着走吗?
------解决方案--------------------
是可以的 CreateWindow 的原型
HWND WINAPI CreateWindow(
_In_opt_ LPCTSTR lpClassName,
_In_opt_ LPCTSTR lpWindowName,
_In_ DWORD dwStyle,
_In_ int x,
_In_ int y,
_In_ int nWidth,
_In_ int nHeight,
_In_opt_ HWND hWndParent,
_In_opt_ HMENU hMenu,
_In_opt_ HINSTANCE hInstance,
_In_opt_ LPVOID lpParam
);
其中 lpParam 就是 WM_CREATE 時的 LPARAM 轉成 CREATESTRUCT 下的 lpCreateParams
你可以先建一個全域 TABLE 每次要 CreateWindow 前先去 TABLE 找一個空項當CreateWindow 的 lpParam 自然就連上去了 ,MFC FiveWin 都是這樣去管理 ,才能用 HWND 找的到對映的 Object
我希望多个窗口公用一个WndProc,再根据hWnd和message查表,获得对应的处理函数。
表的字段包括:窗口句柄,消息代号,处理函数指针
但是窗口句柄要在CreateWindow之后才能得到,错过了对WM_CREATE消息的处理,能在窗口创建前就分配一个ID,让它一直带着走吗?
------解决方案--------------------
是可以的 CreateWindow 的原型
HWND WINAPI CreateWindow(
_In_opt_ LPCTSTR lpClassName,
_In_opt_ LPCTSTR lpWindowName,
_In_ DWORD dwStyle,
_In_ int x,
_In_ int y,
_In_ int nWidth,
_In_ int nHeight,
_In_opt_ HWND hWndParent,
_In_opt_ HMENU hMenu,
_In_opt_ HINSTANCE hInstance,
_In_opt_ LPVOID lpParam
);
其中 lpParam 就是 WM_CREATE 時的 LPARAM 轉成 CREATESTRUCT 下的 lpCreateParams
你可以先建一個全域 TABLE 每次要 CreateWindow 前先去 TABLE 找一個空項當CreateWindow 的 lpParam 自然就連上去了 ,MFC FiveWin 都是這樣去管理 ,才能用 HWND 找的到對映的 Object