【发布时间】:2013-01-01 17:24:45
【问题描述】:
我正在尝试将 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;
}
以下代码是一个原型,目前仅在消息框中显示值,但我稍后计划让它调整子窗口的大小以与父窗口一起缩放
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;
}
问题是createscalingwindow 中的第一个Messagebox 产生的值是 4235304,而第二个产生的数字完全不同(数字不同)。这是为什么呢?
更新:找到了部分原因,为了重现这一点,作为scalewindowsize 的参数的 HWND 必须在窗口过程中使用,并且在该窗口过程中具有相同的参数 HWND。
【问题讨论】:
标签: c++ winapi pointers vector casting