在使用CreateWindowEx函數(shù)創(chuàng)建窗體時,可以使用lParam參數(shù)來傳遞一個指針或一個數(shù)值給窗口過程函數(shù)。lParam參數(shù)在窗口過程函數(shù)中可以用來存儲和訪問與窗口相關(guān)的額外數(shù)據(jù)。
下面是一個示例代碼,演示了如何使用lParam參數(shù):
#include <windows.h>
// 窗口過程函數(shù)
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_CREATE:
{
// 從lParam參數(shù)中獲取傳遞的指針
LPCREATESTRUCT lpCreateStruct = (LPCREATESTRUCT)lParam;
// 從指針中獲取傳遞的數(shù)據(jù)
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);
}
// 主函數(shù)
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);
// 創(chuàng)建窗口
int data = 123; // 傳遞的數(shù)據(jù)
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);
// 消息循環(huán)
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
在上面的示例代碼中,我們在CreateWindowEx函數(shù)的最后一個參數(shù)中傳遞了一個指向整數(shù)的指針(&data)。然后在窗口過程函數(shù)的WM_CREATE消息處理中,使用強制類型轉(zhuǎn)換將lParam參數(shù)轉(zhuǎn)換為指向CREATESTRUCT結(jié)構(gòu)體的指針,然后再從該結(jié)構(gòu)體的lpCreateParams字段中獲取到傳遞的整數(shù)值。
在這個示例中,我們只是簡單地將整數(shù)值顯示到一個消息框中。實際的應(yīng)用中,你可以根據(jù)需要使用lParam參數(shù)來傳遞和訪問其他類型的數(shù)據(jù)。