3
在某些時候,我有這個如何讓WinProc有權訪問由它創建的對象?
LRESULT CALLBACK WinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
if(msg==WM_CREATE)
{
LPCREATESTRUCT pcs = (LPCREATESTRUCT)lParam;
D2DResources* pD2DResources = (D2DResources*)pcs->lpCreateParams;
::SetWindowLongPtrW(
hWnd,
GWLP_USERDATA,
PtrToUlong(pD2DResources)
);
}
else
{
D2DResources* pD2DResources = reinterpret_cast<D2DResources*>(static_cast<LONG_PTR>(
::GetWindowLongPtrW(
hWnd,
GWLP_USERDATA
)));
switch(msg)
{
case WM_PAINT:
{
pD2DResources->OnRender();
ValidateRect(hWnd, NULL);
}
break;
case WM_SIZE:
{
UINT width = LOWORD(lParam);
UINT height = HIWORD(lParam);
pD2DResources->OnResize(width, height);
}
break;
所以我Winproc傳訪問先前創建的D2DResources。現在我希望它可以訪問另一個以前創建的對象。我怎麼做?我的意思是,它可以訪問多個以前創建的對象嗎?如果是這樣,怎麼樣?
編輯:雷蒙德陳說:「傳遞一個指向結構的指針作爲lpCreateParams,你可以在結構中放入任何你想要的東西。」 我該怎麼做?任何人都可以給我一個例子嗎?
將指針傳遞給一個結構體作爲lpCreateParams。你可以把任何你想要的結構。 – 2013-03-15 01:38:17
我不明白。我怎麼做? – 2013-03-15 01:39:23
@MickaelBergeronNéron:你已經這樣做了,將一個指針傳遞給一個'D2DResources'結構。相反,請構建一個包含「D2DResources」和任何其他您需要的數據的結構,並傳遞其地址。 – 2013-03-15 01:58:10