在使用CreateWindowEx函数创建窗体时,可以使用lParam参数来传递一个指针或一个数值给窗口过程函数。lParam参数在窗口过程函数中可以用来存储和访问与窗口相关的额外数据。
下面是一个示例代码,演示了如何使用lParam参数:
#include <windows.h>
// 窗口过程函数
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_CREATE:
{
// 从lParam参数中获取传递的指针
LPCREATESTRUCT lpCreateStruct = (LPCREATESTRUCT)lParam;
// 从指针中获取传递的数据
int data = *(int*)lpCreateStruct->lpCreateParams;
// 使用data进行一些操作,这里只是简单地显示一个消息框
char buffer[50];
sprintf_s(buffer, "Received data: %d", data);
MessageBox(hwnd, buffer, "Message", MB_OK);
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
// 主函数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// 注册窗口类
const char* className = "MyWindowClass";
WNDCLASSEX wc = {};
wc.cbSize = sizeof(WNDCLASSEX);
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = className;
RegisterClassEx(&wc);
// 创建窗口
int data = 123; // 传递的数据
HWND hwnd = CreateWindowEx(0, className, "My Window", WS_OVERLAPPEDWINDOW, 100, 100, 400, 300, NULL, NULL, hInstance, &data);
if (hwnd == NULL)
{
MessageBox(NULL, "Failed to create window", "Error", MB_OK);
return 0;
}
// 显示窗口
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
// 消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
在上面的示例代码中,我们在CreateWindowEx函数的最后一个参数中传递了一个指向整数的指针(&data)。然后在窗口过程函数的WM_CREATE消息处理中,使用强制类型转换将lParam参数转换为指向CREATESTRUCT结构体的指针,然后再从该结构体的lpCreateParams字段中获取到传递的整数值。
在这个示例中,我们只是简单地将整数值显示到一个消息框中。实际的应用中,你可以根据需要使用lParam参数来传递和访问其他类型的数据。