在使用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參數來傳遞和訪問其他類型的數據。