2013-06-29 76 views
2

我想製作一個Windows GUI應用程序。如何獲得CREATESTRUCT的一個窗口?

我在窗口過程函數中聲明瞭一些靜態變量,並在WM_CREATE中對其進行了初始化,其lParam是指向CREATESTRUCT的指針。但是,由於這些值是靜態的,我只能創建一個窗口實例;如果我做得更多,以前的實例的數據將被更改爲新的數據。 有沒有方法可以在WM_CREATE消息後訪問窗口的CREATESTRUCT,以便我可以解決此問題?

+0

有一篇描述這種情況的MSDN文章:[管理應用程序狀態](http://msdn.microsoft.com/en-us/library/windows/desktop/ff381400(v = vs.85).aspx) 。 –

回答

4

使用SetWindowLongPtrSetProp保存一個指向WM_CREATE中用戶定義結構的指針,並使用匹配函數檢索它。

例如

case WM_CREATE: 
    SetWindowLongPtr(hWnd, GWLP_USERDATA, ((LPCREATESTRUCT)lParam)->lpCreateParams); 
    break; 

case <other messages>: 
    MyData* pData = (MyData*)GetWindowLongPtr(hWnd, GWLP_USERDATA). 

有人會說,你不應該使用GWLP_USERDATA,而是應該在你的窗口類預留存儲空間;這取決於你。使用SetProp/GetProp也是一個有效的選擇。