0

我正在尝试制作一个函数,当我调整窗口大小时,它可以用它的父窗口缩放窗口的控件,为了实现这一点,我嵌入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;
              }

在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 中检查了程序的两个变体后,我注意到了一些奇怪的事情,使用原型执行程序并没有按照我期望的方式工作。程序调用到CreateWindowEx然后从调用返回到一个完全不同的目的地。

以下是我期望程序执行的方式(这是不使用的程序createscalingwindow):(我不允许以新用户的身份发布图像,所以如果一个模组或某人可以为我解决这些问题,那就太好了。 ) http://s8.postimage.org/qo8tqt5h1/mainnormal.png

以下是它的执行方式: http ://s8.postimage.org/fa8ytr7qt/mainweird.png

感谢您为帮助我所做的任何努力,因此在此先感谢您。

4

1 回答 1

1

默认情况下,函数参数是按值传递的,这意味着函数获取自己的变量副本,而不是对调用者变量的引用。对本地副本所做的任何修改都不会影响传递给函数的任何内容。

如果你想要一个参考,然后通过参考传递:

int createscalingwindow (HWND & cswpara0 /* etc. */)
                              ^

现在,您对函数参数所做的任何修改也将修改调用者的变量。

于 2012-12-28T14:54:27.587 回答