117.info
人生若只如初见

使用CreateWindowEx创建窗体时如何使用lParam参数

在使用CreateWindowEx函数创建窗体时,可以使用lParam参数来传递一个指针或一个数值给窗口过程函数。lParam参数在窗口过程函数中可以用来存储和访问与窗口相关的额外数据。

下面是一个示例代码,演示了如何使用lParam参数:

#include 
// 窗口过程函数
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_CREATE:
{
// 从lParam参数中获取传递的指针
LPCREATESTRUCT lpCreateStruct = (LPCREATESTRUCT)lParam;
// 从指针中获取传递的数据
int data = https://www.yisu.com/ask/*(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 = https://www.yisu.com/ask/123; // 传递的数据"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参数来传递和访问其他类型的数据。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fe85cAzsLCQdeAFc.html

推荐文章

  • ScriptManager.RegisterClientScriptBlock问题

    ScriptManager.RegisterClientScriptBlock是ASP.NET中的一个方法,用于在服务器端将客户端脚本块注册到页面上。它有以下几个参数: Page对象:需要注册脚本的页面...

  • js获取当前应用根路径contextPath完美方案

    在JavaScript中获取当前应用的根路径contextPath有多种方案,下面是一个完美方案:
    function getContextPath() {
    var contextPath = "";
    var scr...

  • IMPLEMENT_DYNAMIC的问题

    IMPLEMENT_DYNAMIC是一个宏,用于在MFC中实现动态创建和运行时类型信息(RTTI)的类。该宏应用在类声明的开始处,并使用DECLARE_DYNAMIC宏一起使用。
    例子:<...

  • response.addheader的用法和作用

    response.addheader是用来向HTTP响应报文中添加一个新的头部信息。它的用法如下:
    response.addheader(header, value)
    其中,header是字符串类型的参数...