当我调整窗口大小时,我正在尝试创建一个用其父窗口缩放窗口控件的函数,为了实现这一点,我将CreateWindowEx()
嵌入到我自己的函数中createscalingwindow
< / p>
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;
}
在winmain中更改此代码后
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);
主窗口根本不再显示。嵌入式GetLastError()
后调用CreateWindowEx()
会返回error_success。
在ollydbg中检查了程序的两个变体之后,我注意到一些奇怪的事情,使用原型执行程序并不像我期望的那样工作。程序调用{{1}},然后从调用返回到完全不同的目的地。
以下是我期望程序执行的方式(这是不使用CreateWindowEx
的程序):
(我不允许以新用户的身份发布图片,所以如果一个mod或某人可以为我修复这些内容会很好。)
http://s8.postimage.org/qo8tqt5h1/mainnormal.png
以下是它的执行方式: http://s8.postimage.org/fa8ytr7qt/mainweird.png
您提出的任何帮助我的努力都表示赞赏,所以提前感谢。
答案 0 :(得分:1)
默认情况下,函数参数按值传递,这意味着函数获取自己的变量副本,而不是对调用者变量的引用。对本地副本所做的任何修改都不会影响传递给函数的任何内容。
如果您想要参考,请按参考传递:
int createscalingwindow (HWND & cswpara0 /* etc. */)
^
现在,您对函数参数所做的任何修改也将修改调用者的变量。