大侠帮下忙看看吧,我想做一个静态的子窗口来接受数据,子窗口需要创建2个子窗口,
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDB_1:
if(++iCount==1)
SetWindowText(hwndSet,TEXT("Reset Parameters"));
hwndSetBox[0]=CreateWindow(TEXT("Static"),NULL,WS_CHILD|WS_VISIBLE|SS_BLACKRECT,
cxClient/3,cyClient/3,cxClient/3,cyClient/3,hwnd,(HMENU)IDW_1,
(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL);
OldProc[1]=SetWindowLong(hwndSetBox[0],GWL_WNDPROC,SetBoxProc0);
SendMessage(hwndSetBox[0],WM_SETFOCUS,0,0);
ShowWindow(hwndSetBox[0],SW_HIDE);
DeleteObject(hwndSetBox[0]);
InvalidateRect(hwndText,NULL,TRUE);
break;
default:
break;
}这个hwndSetBox[0]的窗口过程是
LRESULT CALLBACK SetBoxProc0(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
HWND button_OK,hwndGetData[2];
HDC hdc;
int i;
PAINTSTRUCT ps;
static cxClient,cyClient;
switch(msg)
{
case WM_CREATE:
for(i=0;i<2;i++)
hwndGetData[i]=CreateWindow(TEXT("GetData"),NULL,WS_CHILD|WS_VISIBLE,
0,0,0,0,hwnd,(HMENU)(i+5),(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),
NULL);
button_OK=CreateWindow(TEXT("button"),TEXT("OK"),WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON
,0,0,0,0,hwnd,IDB_2,(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL);
return 0;
case WM_SIZE:
cxClient=LOWORD(wParam);
cyClient=HIWORD(wParam);
for(i=0;i<2;i++)
MoveWindow(hwndGetData[i],i*cxClient/2,cyClient/2-7*cyChar/8,4*cxChar,
7*cyChar/4,NULL);
MoveWindow(button_OK,cxClient/2-3*cxChar,cyClient-4*cyChar,6*cxChar,2*cyChar,NULL);
return 0;
case WM_SETFOCUS:
SendMessage(hwndGetData[0],WM_SETFOCUS,0,0);
return 0;
case WM_DESTROY:
return 0; 
}
return CallWindowProc(OldProc[1],hwnd,msg,wParam,lParam);
}但是显示不了其他2个子窗口和按钮啊,我觉得应该在主窗口中按了IDB_1的button就会产生WM_COMMAND,然后会创建一个hwndSetBox[0],然后hwndSetBox[0]会产生2个子窗口和按钮,为什么没有反应了

解决方案 »

  1.   

    但是显示不了其他2个子窗口和按钮啊,我觉得应该在主窗口中按了IDB_1的button就会产生WM_COMMAND,然后会创建一个hwndSetBox[0],然后hwndSetBox[0]会产生2个子窗口和按钮,为什么没有反应了
    ==========
    肯定显示不了啊,你显示子窗口和按钮的代码是放在SetBoxProc0的WM_CREATE中的,当你用CreateWindow创建静态子窗口时WM_CREATE就已经发送了,此时还没有用SetWindowLong将静态子窗口的处理函数替换成SetBoxProc0呢,你的SetBoxProc0中的WM_CREATE根本就没有机会执行。