大侠帮下忙看看吧,我想做一个静态的子窗口来接受数据,子窗口需要创建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个子窗口和按钮,为什么没有反应了
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个子窗口和按钮,为什么没有反应了
解决方案 »
- 很奇怪,ie缩放后mouse_event模拟鼠标点击就错了
- 做系统服务管理程序遇到问题了,QueryServiceConfig()
- 怎样调用 “正在运行程序的某个函数”?
- 注册表访问问题...急、急、急
- 如何精确判断一个文档是文件还是目录?
- [调查]在csdn女征男有成功的的吗?
- 我能当程序员吗?
- 在MFC编程中,没有实例化的类竟可以调成员函数,为什么???
- 编译出现这样的错误提示是什么原因?应该怎样修改?
- 在哪里有光标资源可以引用
- 有人试过把CSplitterWnd插进CMFCTabCtrl写成的view里面吗?如何响应鼠标消息?
- 复制一段文字在richedit控件中粘贴,会有原来的内容前面带字体名字的情况
==========
肯定显示不了啊,你显示子窗口和按钮的代码是放在SetBoxProc0的WM_CREATE中的,当你用CreateWindow创建静态子窗口时WM_CREATE就已经发送了,此时还没有用SetWindowLong将静态子窗口的处理函数替换成SetBoxProc0呢,你的SetBoxProc0中的WM_CREATE根本就没有机会执行。