C++ 从同一变量点引用到不同位置的参数

C++ 从同一变量点引用到不同位置的参数,c++,winapi,pointers,vector,casting,C++,Winapi,Pointers,Vector,Casting,我试图将HWND指针与其他数据一起存储在int向量中,我使用以下代码获取数据并在创建时存储: void createscalingwindow(HWND &cswpara0,DWORD cswpara1,const CHAR* cswpara2, const CHAR* cswpara3,DWORD cswpara4,int cswpara5, int cswpara6,int cswpa

我试图将HWND指针与其他数据一起存储在int向量中,我使用以下代码获取数据并在创建时存储:

void 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);                     
    sizevalues.push_back((int)&cswpara0);
    snprintf (buffer, 20,"%d", sizevalues[zero]);
    MessageBox (NULL, buffer, "pointer", NULL);
    sizevalues.push_back(cswpara5);
    sizevalues.push_back(cswpara6);
    sizevalues.push_back(cswpara7);
    sizevalues.push_back(cswpara8);
    return;
}
下面的代码是一个原型,目前只显示messagebox中的值,但我稍后计划让它调整子窗口的大小以与父窗口一起缩放

void scalewindowsize (HWND &ownerwin, HWND &childwin)
{
    /*check owner window*/
    char buffer[100];
    int checknumber = 0; 
    while (checknumber < sizevalues.size())
    {
        if (sizevalues[checknumber] == (int)&ownerwin)
        {
            snprintf (buffer, 100,"%d", sizevalues[checknumber]);
            MessageBox (NULL, buffer, "foundit", NULL);
            break;
        }
        snprintf (buffer, 20,"%d", (int)&ownerwin);
        checknumber = (checknumber + 5);
        MessageBox (NULL, buffer, "fail", NULL);
    }
    return;
}
void scalewindowsize(HWND&ownerwin、HWND&childwin)
{
/*检查所有者窗口*/
字符缓冲区[100];
int checknumber=0;
while(checknumber
问题在于
createscalingwindow
中的第一个
Messagebox
生成的值为4235304,而第二个生成的值则完全不同(数字各不相同)。为什么会这样


更新:找到部分原因,为了重现此情况,必须在窗口过程中使用作为参数的HWND来缩放窗口大小
,该窗口过程中的参数HWND与该窗口过程中的参数HWND相同。

不要将非
int
值存储在
int
向量中。那是自找麻烦

相反,创建一个包含所有值的字段(具有适当类型)的类,并创建一个包含该类对象的向量


但是,您的数字更改可能是由于您获取了局部变量的地址,并在声明该变量的函数返回后使用该地址引起的。您应该只按一下
HWND
的值,而不是它存储的地址。句柄是普通数字,因此不需要通过引用传递它们,除非您计划在函数中更改它们(我不明白为什么您需要在
createscalingwindow
中这样做-您可以直接返回值)

为什么?我想如果它们有相同的值,它们会转换成相同的int值,这不是它的工作原理吗?@user1934608:如果它们不在
int
的范围内,则不会。因此,如果我使用
intptr\t
来确保它足够大,可以容纳它,那么就应该可以了?@userrandomnumbers:如果您找到文档,保证所有这些不同类型都足够小,可以容纳
intptr\t
,那么,也许。但是为什么不创建一个类来保存您的值呢?你会得到它们的描述性名称,还有漂亮的类型检查。例如,我讨厌C++,记住,<代码> MyValue[n* 5+3 ] < /代码>是“第七个参数,<代码> CreateWindowEx < /C> >。@ UsRealOnMe:是的,学习C++的基础(如类)是一个好主意,甚至冒险使用大的外部库,例如WiAPI…(但是,嘿,你拼写正确了,这是一个开始!)