求助:C语言编程,WIN32API,创建的子窗体无法显示,编译环境:VC6.0

问题描述

//问题详细描述://我想在父窗体上单击鼠标左键后,弹出一个子窗体,遇到的问题是:现在的代码运行的结果是子窗体无法显示,但如果将父窗//体WndProc函数里WM_PAINT处理中的break去掉(或者直接删去此消息),窗体就能正常显示,这是什么原因?//编译环境:VC6.0#include<windows.h>#include<tchar.h>#defineID_CHILD11constcharg_szClassName[]="PARENT";constcharchldClassName[]="CHILD";LRESULTCALLBACKWndProc(HWNDhwnd,UINTmsg,WPARAMwParam,LPARAMlParam);LRESULTCALLBACKChld1Proc(HWNDhwnd,UINTmsg,WPARAMwParam,LPARAMlParam);intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow){WNDCLASSwc;HWNDhwnd;MSGMsg;//父窗口类wc.style=CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;wc.lpfnWndProc=WndProc;wc.cbClsExtra=0;wc.cbWndExtra=0;wc.hInstance=hInstance;wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);wc.hCursor=LoadCursor(NULL,IDC_ARROW);wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wc.lpszMenuName=NULL;wc.lpszClassName=g_szClassName;//注册父窗口类if(!RegisterClass(&wc)){MessageBox(NULL,"ParentRegisterfailed!","Error!",MB_ICONEXCLAMATION|MB_OK);return0;}//子窗口类wc.style=CS_HREDRAW|CS_VREDRAW;wc.lpfnWndProc=Chld1Proc;wc.cbClsExtra=0;wc.cbWndExtra=0;wc.hInstance=hInstance;wc.hIcon=NULL;wc.hCursor=LoadCursor(NULL,IDC_CROSS);wc.lpszClassName=chldClassName;//注册子窗口类if(!RegisterClass(&wc)){MessageBox(NULL,"chldRegisterfailed!","Error!",MB_ICONEXCLAMATION|MB_OK);return0;}//创建父窗口hwnd=CreateWindow(g_szClassName,"Parentwindow",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);if(hwnd==NULL){MessageBox(NULL,"ParentWindowCreationFailed!","Error!",MB_ICONEXCLAMATION|MB_OK);return0;}//显示父窗口ShowWindow(hwnd,nCmdShow);UpdateWindow(hwnd);//消息循环while(GetMessage(&Msg,NULL,0,0)>0){TranslateMessage(&Msg);DispatchMessage(&Msg);}returnMsg.wParam;}LRESULTCALLBACKWndProc(HWNDhwnd,UINTmsg,WPARAMwParam,LPARAMlParam){staticintcxClient,cyClient;staticHDChdc;PAINTSTRUCTps;staticHWNDhwnd_chld1;switch(msg){caseWM_CREATE:break;caseWM_LBUTTONDOWN:hwnd_chld1=CreateWindow(chldClassName,"Childwindow1",WS_CHILD|WS_CAPTION|WS_VISIBLE,0,0,0,0,hwnd,(HMENU)ID_CHILD1,(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL);if(hwnd_chld1==NULL){MessageBox(NULL,"ChildWindowCreationFailed!","Error!",MB_ICONEXCLAMATION|MB_OK);return0;}MoveWindow(hwnd_chld1,cxClient/8,cyClient/8,cxClient/2,cyClient/4,TRUE);break;caseWM_CLOSE:DestroyWindow(hwnd);break;caseWM_SIZE:cxClient=LOWORD(lParam);cyClient=HIWORD(lParam);break;caseWM_DESTROY:PostQuitMessage(0);break;caseWM_PAINT:break;default:returnDefWindowProc(hwnd,msg,wParam,lParam);}return0;}LRESULTCALLBACKChld1Proc(HWNDhwnd,UINTmsg,WPARAMwParam,LPARAMlParam){switch(msg){caseWM_CREATE:break;caseWM_PAINT:break;caseWM_CLOSE:DestroyWindow(hwnd);break;caseWM_DESTROY:PostQuitMessage(0);break;default:returnDefWindowProc(hwnd,msg,wParam,lParam);}return0;}

解决方案

时间: 2024-09-14 03:44:40

求助:C语言编程,WIN32API,创建的子窗体无法显示,编译环境:VC6.0的相关文章

编程c语言 c语言-求助C语言编程............

问题描述 求助C语言编程............ 编写程序,实现从键盘输入一行字符串,将该字符串中所有的apple换成orange.如:I have an apple.Do you like apple? 变为I have an orange.Do you like orange? 解决方案 给我时间写,我想一想,写好了再上传给你看 解决方案二: 百度上,Google上,字符串替换的源码很多.. 解决方案三: 自己写一个字符串处理函数呗 很简单的 遍历这个字符串 和要替换的单词比对 如果一样 就

窗体显示问题-MDI子窗体最大化显示问题

问题描述 MDI子窗体最大化显示问题 在MDI子窗体 1.放了一个菜单 Me.MenuStrip1 .Dock =DockStyle.Top: 设置"窗口"菜单存放子窗体标题 Me.MenuStrip1.MdiWindowListItem = 窗口ToolStripMenuItem: 2.放了一个Panel1控件 Me.Panel1 .Dock =DockStyle.Fill: 3.在Panel控件上放了一个按钮,用于打开一个子窗体,click事件代码为: Dim frm As For

winform点击某个按钮,主窗体和子窗体都显示,子窗体显示在最上面

问题描述 winform点击某个按钮,主窗体和子窗体都显示,子窗体显示在最上面 winform点击某个按钮,主窗体和子窗体都显示,子窗体显示在最上面 解决方案 showdialog()showdialog()showdialog()showdialog() 解决方案二: 子窗体.BringToFront()

C#如何多线程创建MDI子窗体

问题描述 我做的东西其实就是类似多标签浏览器那样,每个子窗体都有个axWebbrowser控件,子窗体打开后就自动填表提交,如果不用多线程打开窗体,当同时打开多个子窗体的时候,主窗体的操作就会卡住.我现在用下面的代码可以用多线程打开个子窗体,但是这个子窗体不是主窗体的MDI子窗体,这不是我想要的.我就是在新线程的委托里写frmMdiChild.MdiParent=this;报错,说"线程间操作无效:从不是创建控件""的线程访问它.".麻烦各位大侠帮忙看看,如果分不够

c语言 发彩信 模块-PC直接控制GPRS模块,用VC6.0编写程序发送彩信,简单就行,有的大侠拜托了

问题描述 PC直接控制GPRS模块,用VC6.0编写程序发送彩信,简单就行,有的大侠拜托了 电脑连接一个 GPRS模块,要求用C语言编程控制GPRS模块发送彩信,应该包含彩信封装等内容,希望能有人帮帮忙,可以的话程序发我邮箱:Lzm11211109@163.com.并告知使用的硬件是什么, 谢谢各位大侠了. 解决方案 http://download.csdn.net/download/qianshuyuankk/4800261 解决方案二: 短信猫如何发彩信? 短信猫可以发彩信吗? 这个,得看短

C#如何用子窗体实时显示主窗体中的一个参数?

问题描述 主窗体中有一个参数a,子窗体中有一个text,如何实现主窗体参数a的变化实时传递到子窗体中,并显示出来?我试过很多方法都只有在重新关闭并打开子窗体后,显示才会发生变化,既使用From2.Show(),后子窗体中的text才会更新显示.请大神们,提供一些代码,本人是新手. 解决方案 解决方案二:bind绑定技术解决方案三:http://bbs.csdn.net/topics/360140208解决方案四:引用2楼caozhy的回复: http://bbs.csdn.net/topics/

求助C语言编程问题

问题描述 明天要考试啊.同学都不会,求助大虾,给下本题的代码,无限感激求1!+2!+...+n!.要求从主函数输入n的值,用函数实现阶乘的计算 解决方案 解决方案二: 解决方案三:#include<stdio.h>#include<stdlib.h>unsignedlonggetres(intn){if(n==1||n<=0)return1;return(unsignedlong)n*getres(n-1);}intmain(void){unsignedlongres=0;f

语言二维数组-C语言编程中二维数组以及递归函数问题

问题描述 C语言编程中二维数组以及递归函数问题 有编号分别为0,1,2,3,4的5本书,准备分给5个人A,B,C,D,E,每个人阅读兴趣用一个二维数组加以描述,公式如下: 1 i喜欢j书 Like[i][j] = 0 i不喜欢j书 写一个程序,输出所有分书方案,让人人皆大欢喜.假定5个人对5本书的阅读兴趣如下图所示. 解决方案 答案 a 2 b 0 c 1 d 3 e 4 要程序先采纳 解决方案二: 大半夜的,干嘛递归呢 5个for循环妥妥的 int num=0; struct answer {

C语言项目中头文件/代码文件的组织问题(使用VC6.0)

  个人备忘:   1.新建一个文本文件命名为main.c,使用VC6.0打开并编译,VC6.0会在当前文件夹下自动创建"工作区间"和"工程"文件,如:main.dsw,main.dsp等:然后就可以在"工程"下新建或添加你的.c和.h文件.   2.消灭头文件被多次include导致的错误.在每个头文件中加上如下的定义:(假设头文件的名字为MyDemo.h) #ifndef MY_DEMO_H #define MY_DEMO_H   //...