我試圖做一個函數,當我調整窗口的大小時,用它的父窗口縮放窗口的控件,爲了實現這個我嵌入CreateWindowEx()
到我自己的功能createscalingwindow
通過值傳遞修改參數對調用者的變量沒有影響
int createscalingwindow (HWND cswpara0,DWORD cswpara1,const CHAR* cswpara2,
const CHAR* cswpara3,DWORD cswpara4,int cswpara5,int cswpara6,int cswpara7,
int cswpara8,HWND cswpara9,HMENU cswpara10,HINSTANCE cswpara11,LPVOID cswpara12)
{
cswpara0 = CreateWindowEx (cswpara1, cswpara2, cswpara3, cswpara4,
cswpara5,cswpara6,cswpara7,cswpara8,
cswpara9,cswpara10,cswpara11,cswpara12);
return 0;
}
中緊跟不斷變化的這段代碼
mainwin = CreateWindowEx(
0,
mainclassname,
"Mafia Online",
WS_OVERLAPPED|WS_CAPTION|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX
|WS_SYSMENU,
CW_USEDEFAULT,
CW_USEDEFAULT,
544,
375,
NULL,
playmenu,
hThisInstance,
NULL
);
下面的代碼
createscalingwindow (mainwin, 0, mainclassname, "Mafia Online",
WS_OVERLAPPED|WS_CAPTION|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_SYSMENU,
CW_USEDEFAULT, CW_USEDEFAULT, 544, 375, NULL, playmenu, hThisInstance, NULL);
ShowWindow (mainwin, nCmdShow);
01後
主窗口根本不再顯示。嵌入CreateWindowEx()
後調用GetLastError()
返回error_success。
在ollydbg中檢查了這兩種程序的變體之後,我發現了一些奇怪的東西,使用原型的程序執行並不按我期望的方式工作。該程序調用CreateWindowEx
,然後從呼叫返回到完全不同的目的地。
下面是我期望程序執行的方式(這是不使用createscalingwindow
的程序): (我不允許將圖像作爲新用戶發佈,所以如果某個mod或某人可以修復這些問題,我認爲將是很好) http://s8.postimage.org/qo8tqt5h1/mainnormal.png
下面是它的執行。 http://s8.postimage.org/fa8ytr7qt/mainweird.png
您提出到幫助我的任何的努力表示讚賞,所以先感謝。
您需要通過引用傳遞'cswpara0'。 – 2012-12-28 14:49:26
@aleguna HWND是一個開頭的指針。 – johnathon
@johnathon,'createscalingwindow'並不重要,他正在修改HWND的本地副本,這就是爲什麼它對調用者副本沒有任何影響。 – 2012-12-28 14:51:22