MessageBox会导致异步网络接收函数不被触发吗?

parterner 2016-09-28 04:46:03
近期在用MFC做一个软件,软件与服务器通讯,服务器与客户端均在本机,客户端下发指令给服务器,服务器上发相应内容给客户端。发送由用户点击按钮,调用send函数发送;接收则采用异步接收,重写了CAsyncSocket类的Onreceive函数。希望的效果是下发之后500ms内收到相应回复数据。
目前遇到一个问题,想做一个用户确认的功能,目前做法是用MessageBox弹框,确认之后再进行下发,下发在另外开启的线程中进行。
但是发现加入了这个MessageBox之后,经常会出现点击确认之后Onreceive函数不被调用,但是在下发超时之后(也就是发送失败之后)才会收到数据。从服务器端日志来看,服务器端确实在合适的时间将数据上发了,但是就是无法触发,最后一次发送失败之后收到正确数据。因为是本机网络,不考虑网络延时。
刚开始以为网络有问题,一直找不到原因。直到偶然把提示的确认框相关代码注释掉之后发现这个Onreceive函数可以被正常触发。所以感觉是MessageBox这边出了问题。


t = MessageBox(this->GetSafeHwnd(),"确认下发参数?","下发参数",MB_YESNO | MB_ICONWARNING);
if(t == IDNO) return;

所以不知道这种情况由何引起,又该如何解决?请大家帮忙看看
...全文
1451 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
kakabulusi 2017-02-24
  • 打赏
  • 举报
回复
MessageBox函数可以阻塞程序的正常执行的,
horris 2017-02-22
  • 打赏
  • 举报
回复
另外,觉得楼主异步发送后,等待发送线程结束那段代码太复杂,还用消息泵(我楼上称为消息循环,不严谨)。不如修改下,异步发送线程在结束前,清除另一个标志位,这个标志位表明是否在发送等待500ms中。这样,主线程就可以在用户重复发送前,判断此标志,如果标志置位,则提示用户“上一次发送正等回复中”之类的。主线程完全不必使用消息泵。 个人认为,越复杂就越容易出错,也不易后续维护和扩展,象MsgWaitForMultipleObjects 这种API坑很多的。
horris 2017-02-22
  • 打赏
  • 举报
回复
我认为你的异步设计有问题,导致了复杂的解决方案。 CAsycSocket实际上不是在工作者线程中等待接收数据的,它是运行在主线程环境中的,也就是和你的MessageBox所在的线程在一起的。之所以接收是异步的,应该是底层用了Overlapped IO之类的技术,而Overlapped IO的读写完成的通知是基于消息的,MessageBox阻塞了消息循环,使得CAsyncSocket不能及时触发OnReceived。你的解决方案是修改消息循环。 我个人不喜欢自定义消息循环这种高度依赖OS平台、造成程序不易读的技术。我倒以为,你应该将接收过程和发送过程一样,彻底放到另一个工作者线程中。这样一,不用自定义消息循环,有利于以后程序维护,也有利于程序移值到其它平台;不用CAsyncSocket,代码逻辑清晰。
parterner 2017-02-22
  • 打赏
  • 举报
回复
总结一下,是因为没有做好消息泵,没有把所有的信息都传入到消息循环,有一段代码如下: while (TRUE) { //wait for m_hThread to be over,and wait for //QS_ALLINPUT(Any message is in the queue) dwRet = MsgWaitForMultipleObjects (1, &cThread->m_hThread, FALSE, INFINITE, QS_ALLINPUT); switch(dwRet) { case WAIT_OBJECT_0: break; //break the loop case WAIT_OBJECT_0 + 1: //get the message from Queue //and dispatch it to specific window while(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } continue; default: break; // unexpected failure } break; } cThread = NULL; } 红色部分就是问题的关键,因为之前没有加那个循环,导致的后果就是一旦出现对话框,将msg循环占用,就会导致异步网络接收函数的阻塞,最终导致问题的产生,加入循环之后问题解决,对话框的弹出与否不再影响网络的异步接收。 到这里看起来似乎问题已经结束,但是经过这个问题,我发现自己对于一些技术的理解还是太肤浅了,找到解决方案之后没办法去弄明白其中的具体道理,比如为什么加入了while循环之后消息循环就可以正常运行了,之前对话框的出现是为什么会导致这些问题的产生也都只是个人感觉问题所在,并没有参考书籍文献材料,以前看侯俊杰前辈的《深入浅出MFC》也只是略过一眼,没有去仔细专研其中细节深奥的部分。。 这里希望有相关经验或者对这个问题感兴趣的朋友们能够不吝赐教,讲解一下关于MFC消息循环的原理以及什么可能会影响消息循环。
赵4老师 2016-10-08
  • 打赏
  • 举报
回复
换TRACE
schlafenhamster 2016-10-06
  • 打赏
  • 举报
回复
“将前面MessageBox代码段” 改为 afxDump (不柱塞)看看
蒋晟 2016-10-04
  • 打赏
  • 举报
回复
CAsyncSocket有做防无限重入,避免你这样MessageBox阻塞之后又接受到新消息导致无数个MessageBox被弹出来。 你应该重新考虑下界面设计,比如用状态栏或者列表视图来显示信息。
schlafenhamster 2016-10-01
  • 打赏
  • 举报
回复
SUMMARY In the Microsoft Windows graphical environment, the WM_CANCELMODE message informs a window that it should cancel any internal state. This message is sent to the window with the focus when a dialog box or a message box is displayed, giving the window the opportunity to cancel states such as mouse capture. When a control has the focus, it receives a WM_CANCELMODE message when the EnableWindow function disables the control or when a dialog box or a message box is displayed. When a control receives this message, it should cancel modes, such as mouse capture, and delete any timers it has created. A control must cancel these modes because an application may use a notification from the control to display a dialog box or a message box. The DefWindowProc function processes WM_CANCELMODE by calling the ReleaseCapture function, which cancels the mouse capture for whatever window has the capture. The DefWindowProc function does not cancel any other modes.
parterner 2016-10-01
  • 打赏
  • 举报
回复
自己做了一个对话框,用DoModal()启动,发现Onreceive函数还是会被推迟触发的情况。不知道WM_CANCELMODE 是什么意思呢??
schlafenhamster 2016-09-30
  • 打赏
  • 举报
回复
是不是要 调用 WM_CANCELMODE ?? void CCancelModeDlg::OnSetfocusEdit2() { if(!FindWindow(0,"yyy"))// change : AFX_IDS_APP_TITLE="yyy" { AfxMessageBox("SetfocusEdit2"); // w.o this, the cursor is 'I' anywhere ,means focus in edit2 !!! // mouse has captured by edit2 m_Edit2.PostMessage(WM_CANCELMODE,0,0); } }
parterner 2016-09-30
  • 打赏
  • 举报
回复
我正准备自己画一个对话框,然后DoModal调用,看看是否存在问题。
parterner 2016-09-30
  • 打赏
  • 举报
回复
MessageBox处理结束之后才会调用函数启动线程,就是感觉是不是MessageBox虽然通过点击OK或者cancek结束了但是它还是会影响到后面线程的启动。
parterner 2016-09-29
  • 打赏
  • 举报
回复
而且我不仅仅是在MessageBox存在的时候不能触发,关掉MessageBox之后也不能触发。
parterner 2016-09-29
  • 打赏
  • 举报
回复
就是在用户确认过messageBox之后,调用发送函数,函数中启动线程下发参数,用send。 线程会等待一段时间(这里设计的是500ms),这段时间内如果收到数据,标志位置位,退出线程。 在发送函数中等待线程结束,使用的是waitforMultipleobjects,同时也建立有消息循环保证消息不被阻塞。 等待线程结束部分是这么写的:

        RefreshResult=AfxBeginThread(DownloadParaThread,(LPVOID)&index); 
	if (RefreshResult != NULL) 
	{ 
		DWORD dwRet=0;
		MSG msg;  
		while (TRUE)  
		{  
			dwRet = MsgWaitForMultipleObjects (1, &RefreshResult->m_hThread,   FALSE, INFINITE, QS_ALLINPUT);  
			if(dwRet==WAIT_OBJECT_0)
				break;
			else if(dwRet==WAIT_OBJECT_0 + 1)
			{
				PeekMessage(&msg, NULL, 0, 0, PM_REMOVE);  
				DispatchMessage(&msg); 
			}
			else
				break;
		}
		RefreshResult = NULL;
	} 
直观上感觉是在下发send函数调用之后,Onreceive函数就无法被触发,但是偶尔又会有被触发的情况,也不是每次都失败,只是失败的概率比较大。但是如果将前面MessageBox代码段删掉之后,OnReceive函数就可以正常触发。所以才定位到MessageBox的影响。你们感觉如何呢?
schlafenhamster 2016-09-29
  • 打赏
  • 举报
回复
自己做个 Modeless 对话框 (create), 不行吗 ?
oyljerry 2016-09-29
  • 打赏
  • 举报
回复
把messageBox提前放到其他地方,或者在界面UI线程中处理
encoderlee 2016-09-28
  • 打赏
  • 举报
回复
下发在另外开启的线程中进行 是什么意思? 要注意在默认情况下,CAsyncSocket和CSocket对象不能跨线程使用。
parterner 2016-09-28
  • 打赏
  • 举报
回复
我又确实需要根据用户的选择来决定是否下发,所以此处必须得有阻塞。请问大家有没有其他的控件可以解决这个问题呢?
oyljerry 2016-09-28
  • 打赏
  • 举报
回复
messafebox会可能影响消息循环。导致aocket色消息也被影响
三岁、就很帅 2016-09-28
  • 打赏
  • 举报
回复
你试下用afxmessagebox看看
加载更多回复(1)
相关网站 7 设置窗口最大最小 7 设置窗口标题 7 去掉主菜单 7 修改应用程序图标 7 系统只能允许一个程序运行 7 在状态栏中添加时间 8 研究调用存储过程 8 得到本机的IP地址 9 vc调用chm文件 10 最高窗口的实现 10 防止Edit框中的Password不保密 11 在同一系统中显示GB字符和BIG5字符 12 改变颜色(整个窗体的控件) 13 改变工程表头栏 13 ◆如何找开一个DiaLog的窗口◆ 13 ◆得到系统中设置的窗口颜色◆ 14 ◆如何让点下去的菜单成为V状态◆ 14 ◆如何调用WINDOWS的颜色板◆ 14 ◆如何产生一个MDI的主窗口◆ 15 ◆如何让一个文本控件显示出值◆ 15 ◆如何让一个控件显示出相应的值◆ 16 ◆在调试中怎么样MESSAGEBOX一个数字◆ 16 ◆如何控制控件的焦点◆ 16 ◆如何对析构函数中对象进行释放◆ 16 ◆如何关闭一个模态窗口◆ 17 ◆如何将一个提示的声音发到声卡上◆ 17 ◆如何得到打开exe的带的参数◆ 17 ◆如何在框架上建立一个工具条◆ 17 ◆如何生成一个主窗口下方的状态条◆ 18 ◆如何让Cscrollview类中控制其可以流动区域大小◆ 19 ◆MFC中控件的一些基本控制方法◆ 19 ◆如何让一个数字型变量化为字符型变量◆ 19 ◆如何使用“拉动条”,“上下选择”◆ 19 ◆如何使用postmessage来异步触发某事件◆ 21 ◆如何使用Sendmessage来异步触发某事件◆ 22 ◆如何修改父类的相关控件属性◆ 22 ◆如何在程序中得到控件的名◆ 22 ◆如何控制菜单的事件程序◆ 22 ◆如何使用控件中的数据录入的控制属性◆ 23 ◆哪些函数是文档、视图相互处理用的◆ 23 ◆如何建立一个基于对话框一程序◆ 23 ◆如何建立一个线程◆ 24 ◆如何让窗口产生一个图标(从应用程序资源中取出)◆ 24 ◆如何得到一个edit的录入的值◆ 24 ◆如何启动TIMER事件◆ 25 ◆如何使用ctrllist控件实现表格◆ 25 ◆如何从INI文件中得到值◆ 25 ◆如何将图标文件写到窗口中◆ 26 ◆如何得到本机的IP地址◆ 26 ◆如何使用全局变量◆ 26 ◆如何让一个字符加上回车、换行◆ 26 ◆如何定义、使用结构◆ 26 ◆如何在任意程序中显示MessageBox◆ 27 ◆如何在程序判断出debug状态◆ 27 ◆当对话框中有一个滚动条是,当滚动滚动条时的消息控制函数◆ 27 ◆将一个CWnd指针转换成一个控件ID(整数)注意用GetDlgItem()函数是从一个控件ID转换成一个CWnd的指针◆ 28 ◆如果在对话框中自定义一个消息的方法,假设对话框名为CXX◆ 28 ◆消息传递◆ 29 ◆在一个函数引用另外的一个对话框◆ 29 ◆全局函数的申明问题◆ 29 ◆在应用程序中*APP.CPP中的InitInstance()的事件◆ 29 ◆给执行文件加一个图标◆ 30 ◆如何在全局函数中通过传入的窗口句柄操作窗口◆ 30 ◆如何使桌面文字背景透明?◆ 30 ◆怎样才能在VC里产生一个唯一的字符串◆ 31 ◆如何隐藏进程(在系统状态栏和进程列表里不可见)◆ 31 ◆如何得到一个确定大小的视?◆ 31 ◆如何实现点击窗口任意地方拖动窗口?◆ 32 ◆如何在启动时阻止MDI应用程序创建一个新文档?◆ 33 ◆如何在多文档MFC程序中制作独立的File|New菜单?◆ 33 ◆如何检测视是否处于分割状态?◆ 34 ◆如何使程序保持极小状态?◆ 34 ◆如何确定当前进程实例是否为唯一实例?◆ 35 ◆如何向一个文档附加多个视?◆ 35 ◆如何获得文件的图标、属性、大小、类型等参数?◆ 36 ◆如何得到鼠标下面的窗口?◆ 37 ◆设置鼠标的形状◆ 38 ◆在对话框中设置编辑EDIT的值◆ 38 1. 如何获取应用程序的实例句柄? 38 2. 如何通过代码获得应用程序主窗口的指针? 38 3. 如何在程序中获得其他程序的图标? 38 4. 如何编程结束应用程序?如何编程控制windows的重新引导? 39 5.怎样加载其他的应用程序? 39 6. 确定应用程序的路径 39 7. 获得各种目录信息 40 8. 如何自定义消息 40 9. 如何改变窗口的图标? 40 10. 如何改变窗口的 缺省风格? 40 11. 如何将窗口居中显示? 41 12. 如何让窗口和 MDI窗口一启动就最大化和最小化? 41 13. 如何使程序保持极小状态? 41 14. 如何限制窗口的 大小? 41 15. 如何使窗口不可见? 41 16. 如何使窗口始终在最前方? 41 17、如何创建一个字回绕的CEditView 42 18、通用控件的显示窗口 42 19、移动窗口 42 20、重置窗口的大小 42 21、如何单击除了窗口标题栏以外的区域使窗口移动 43 22、如何改变视窗的背景颜色 43 23、如何改变窗口标题 44 24、如何防止主框窗口在其说明中显示活动的文档名 44 25、如何获取有关窗口正在处理的当前消息的信息 45 26、如何创建一个不规则形状的窗口 45 27、如何在代码中获取工具条和状态条的指针 47 28、如何使能和禁止工具条的工具提示 47 29、如何设置工具条标题 48 30、如何创建和使用无模式对话框 48 31、如何在对话框中显示一个位图 49 32、如何改变对话或窗体视窗的背景颜色 49 33、如何获取一个对话控件的指针 50 34、如何禁止和使能控件 50 35、如何改变控件的字体 50 36、如何在OLE控件中使用OLE_COLOR数据类型 51 37、在不使用通用文件打开对话的情况下如何显示一个文件列表 51 38、为什么旋转按钮控件看起来倒转 51 39为什么旋转按钮控件不能自动地更新它下面的编辑控件 52 40、如何用位图显示下压按钮 52 41、如何一个创建三态下压按钮 52 42、如何动态创建控件 52 43、如何限制编辑框中的准许字符 53 44、如何改变控件的颜色 54 45、当向列表框中添加多个项时如何防止闪烁 55 46、如何向编辑控件中添加文本 55 47、如何访问预定义的GDI对象 55 48、如何获取GDI对象的属性信息 56 49、如何实现一个橡皮区矩形 56 50、如何更新翻转背景颜色的文本 58 51、如何创建一个具有特定点大小的字体 58 52、如何计算一个串的大小 59 53、如何显示旋转文本 59 54、如何正确显示包含标签字符的串 60 55、串太长时如何在其末尾显示一个省略号 60 56、如何快速地格式化一个CString对象 61 57、为什么即使调用EnableMenuItem菜单项后,菜单项还处于禁止状态 61 58、如何给系统菜单添加一个菜单项 61 59、如何确定顶层菜单所占据的菜单行数 62 60、在用户环境中如何确定系统显示元素的颜色 62 问:如何控制窗口框架的最大最小尺寸? 63 问:如何改变窗口框架的颜色? 63 问:如何将应用程序窗口置于屏幕正中? 64 问:VC6.0对VC5.0的兼容性? 64 问:打印和打印机的问题? 64 问:CRichEditCtrl滚动条的问题? 65 问:从数据库中读大于32k的内容? 65 问:如何获得CRichEditCtrl中字符的位置? 66 问:如何限制mdi子框架最大化时的大小? 66 问:如何切换视口而不破坏它们? 66 问:改变列表控制时发生闪烁现象? 68 问:处理列表控件可见项的问题? 68 问:产生线程的问题? 68 问:CFile使用了缓冲区吗? 69 问:DAO的密码? 69 问:如何知道CListBox什么时候滚动了? 70 问:视口的不活动性如何处理? 70 问:如何使用COleClientItem的IDispatch接口? 70 问:关于用户自定义的消息使用? 71 问:在打开一个文档时退出? 71 问:在CListCtrl控件中多选择项的删除? 71 问:工作线程的登录状态? 72 问:如何控制菜单的大小? 72 问:改变LVIS_SELECTED的状态颜色? 73 问:如何只存储文档的某一部分? 73 问:保存工具条菜单有bug吗? 73 问:Tip of the day的bug 73 问:如何让我的mfc应用程序可以在最上面? 74 问:如何增加视图中ActiveX控件的事件处理函数? 75 问:如何创建一个动态的Tree控件? 75 问:SDI程序开始时不打开文档? 75 问:List控件中整栏选择? 75 问:如何重载MRU文件? 76 问:CImageList控件中图象橙色被显示为黄色? 76 问:无法正确改变应用程序的图标? 78 问:工具条状态的问题? 78 问:在SDI应用程序中使用Active控件? 79 问:有RichEdit控件的对话框无法正常显示? 79 问:DLL中的模板成员函数? 79 问:CFormView中的上下文帮助? 80 问:CArchive类的WriteObject函数问题? 80 问:RegisterWindowMessage中的BroadcastSystemMessage如何处理? 80 问:CListCtrl中选择变化时如何获得通知? 81 问:如何向ATL-COM对象传送一个数组? 81 问:如何选择CTreeCtrl中的节点文本进行编辑? 82 问:如何改变默认的光标形状? 82 问:如何用键盘滚动分割的视口? 83 问:如何在线程中处理状态条? 83 问:如何阻止WINDOWS关闭? 83 问:如何使一个按钮Disable? 83 问:怎样从MFC扩展动态链结库(DLL)中显示一个对话框? 84 问:想隐藏用户界面怎么办? 85 问:如何实现SDI与MDI的转换? 85 问:CDC中的竖排文本? 86 问:如何激活变灰的弹出菜单? 86 问:线程消息? 87 问:TreeCtrl控制的显示速度太慢? 87 怎样使窗口总是浮现在最上面? 88 改变拖放时的光标外形? 89 如何定位到最新的记录上? 90 MVC和Doc-View? 90 被禁止(Disable)的控件如何改变其文本或背景色? 90 有ODBC的查找函数吗? 91 多个MRU菜单的问题 91 校验框类问题 93 CFormView类的Fold按钮 94 视的背景色 94 隐藏控件台程序 94 修改SDI窗口标题 95 焦点问题 95 从一个OCX调用另一个OCX的方法。 95 得到视 96 字符转化时间 96 二进制还是文本方式? 99 发送消息 99 怎样知道菜单运行时的状态 99 DLL编译出错 100 通用控件的显示窗口 100 如何禁止和使能控件 100 如何在OLE控件中使用OLE_COLOR数据类型 100 在不使用通用文件打开对话的情况下如何显示一个文件列表 100 为什么旋转按钮控件看起来倒转 101 为什么旋转按钮控件不能自动地更新它下面的编辑控件 101 如何动态创建控件 101 如何显示旋转文本 101 在TreeList中使用Edit功能 102 TreeList control中使用check box 103 有关属性对话框(property sheet )的几个提示 108 在MFC加入"这是什么?"的帮助提示 111 精通工具条 112 如何改变视窗的背景颜色 112 为MFC应用程序添加全屏幕显示功能 112 VC常用数据类型使用转换详解 114 用Visual C++操作INI文件 117 单文档加入背景图 119 更新窗体方法 120 更改窗口控件的能动和不能动(以按钮控件为例) 120 窗口响应键盘事件 120 密码框输入受保护 121 最高窗口的实现 122 实现窗口动态写入汉字和改变汉字颜色形状 123
相关网站 7 设置窗口最大最小 7 设置窗口标题 7 去掉主菜单 7 修改应用程序图标 7 系统只能允许一个程序运行 7 在状态栏中添加时间 8 研究调用存储过程 8 得到本机的IP地址 9 vc调用chm文件 10 最高窗口的实现 10 防止Edit框中的Password不保密 11 在同一系统中显示GB字符和BIG5字符 12 改变颜色(整个窗体的控件) 13 改变工程表头栏 13 ◆如何找开一个DiaLog的窗口◆ 13 ◆得到系统中设置的窗口颜色◆ 14 ◆如何让点下去的菜单成为V状态◆ 14 ◆如何调用WINDOWS的颜色板◆ 14 ◆如何产生一个MDI的主窗口◆ 15 ◆如何让一个文本控件显示出值◆ 15 ◆如何让一个控件显示出相应的值◆ 16 ◆在调试中怎么样MESSAGEBOX一个数字◆ 16 ◆如何控制控件的焦点◆ 16 ◆如何对析构函数中对象进行释放◆ 16 ◆如何关闭一个模态窗口◆ 17 ◆如何将一个提示的声音发到声卡上◆ 17 ◆如何得到打开exe的带的参数◆ 17 ◆如何在框架上建立一个工具条◆ 17 ◆如何生成一个主窗口下方的状态条◆ 18 ◆如何让Cscrollview类中控制其可以流动区域大小◆ 19 ◆MFC中控件的一些基本控制方法◆ 19 ◆如何让一个数字型变量化为字符型变量◆ 19 ◆如何使用“拉动条”,“上下选择”◆ 19 ◆如何使用postmessage来异步触发某事件◆ 21 ◆如何使用Sendmessage来异步触发某事件◆ 22 ◆如何修改父类的相关控件属性◆ 22 ◆如何在程序中得到控件的名◆ 22 ◆如何控制菜单的事件程序◆ 22 ◆如何使用控件中的数据录入的控制属性◆ 23 ◆哪些函数是文档、视图相互处理用的◆ 23 ◆如何建立一个基于对话框一程序◆ 23 ◆如何建立一个线程◆ 24 ◆如何让窗口产生一个图标(从应用程序资源中取出)◆ 24 ◆如何得到一个edit的录入的值◆ 24 ◆如何启动TIMER事件◆ 25 ◆如何使用ctrllist控件实现表格◆ 25 ◆如何从INI文件中得到值◆ 25 ◆如何将图标文件写到窗口中◆ 26 ◆如何得到本机的IP地址◆ 26 ◆如何使用全局变量◆ 26 ◆如何让一个字符加上回车、换行◆ 26 ◆如何定义、使用结构◆ 26 ◆如何在任意程序中显示MessageBox◆ 27 ◆如何在程序判断出debug状态◆ 27 ◆当对话框中有一个滚动条是,当滚动滚动条时的消息控制函数◆ 27 ◆将一个CWnd指针转换成一个控件ID(整数)注意用GetDlgItem()函数是从一个控件ID转换成一个CWnd的指针◆ 28 ◆如果在对话框中自定义一个消息的方法,假设对话框名为CXX◆ 28 ◆消息传递◆ 29 ◆在一个函数引用另外的一个对话框◆ 29 ◆全局函数的申明问题◆ 29 ◆在应用程序中*APP.CPP中的InitInstance()的事件◆ 29 ◆给执行文件加一个图标◆ 30 ◆如何在全局函数中通过传入的窗口句柄操作窗口◆ 30 ◆如何使桌面文字背景透明?◆ 30 ◆怎样才能在VC里产生一个唯一的字符串◆ 31 ◆如何隐藏进程(在系统状态栏和进程列表里不可见)◆ 31 ◆如何得到一个确定大小的视?◆ 31 ◆如何实现点击窗口任意地方拖动窗口?◆ 32 ◆如何在启动时阻止MDI应用程序创建一个新文档?◆ 33 ◆如何在多文档MFC程序中制作独立的File|New菜单?◆ 33 ◆如何检测视是否处于分割状态?◆ 34 ◆如何使程序保持极小状态?◆ 34 ◆如何确定当前进程实例是否为唯一实例?◆ 35 ◆如何向一个文档附加多个视?◆ 35 ◆如何获得文件的图标、属性、大小、类型等参数?◆ 36 ◆如何得到鼠标下面的窗口?◆ 37 ◆设置鼠标的形状◆ 38 ◆在对话框中设置编辑EDIT的值◆ 38 1. 如何获取应用程序的实例句柄? 38 2. 如何通过代码获得应用程序主窗口的指针? 38 3. 如何在程序中获得其他程序的图标? 38 4. 如何编程结束应用程序?如何编程控制windows的重新引导? 39 5.怎样加载其他的应用程序? 39 6. 确定应用程序的路径 39 7. 获得各种目录信息 40 8. 如何自定义消息 40 9. 如何改变窗口的图标? 40 10. 如何改变窗口的 缺省风格? 40 11. 如何将窗口居中显示? 41 12. 如何让窗口和 MDI窗口一启动就最大化和最小化? 41 13. 如何使程序保持极小状态? 41 14. 如何限制窗口的 大小? 41 15. 如何使窗口不可见? 41 16. 如何使窗口始终在最前方? 41 17、如何创建一个字回绕的CEditView 42 18、通用控件的显示窗口 42 19、移动

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧