随笔分类 -  Windows

摘要:如何让对话框右上角那个关闭按钮(X)变灰,也就是把它Disable再OnInitDialog()中添加:GetSystemMenu(FALSE)-> EnableMenuItem(SC_CLOSE,MF_BYCOMMAND|MF_GRAYED); 阅读全文
posted @ 2011-10-26 15:54 likebeta 阅读(774) 评论(0) 推荐(0)
摘要:#if !defined(AFX_SEARCHBOX_H__4AAEB096_F117_4139_8F63_94C9E64041E5__INCLUDED_)#define AFX_SEARCHBOX_H__4AAEB096_F117_4139_8F63_94C9E64041E5__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000// MySearchBox.h : header file////////////////////////////////////////////////////////// 阅读全文
posted @ 2011-10-20 22:17 likebeta 阅读(854) 评论(0) 推荐(0)
摘要:void ReStart(BOOL bNormal){ PROCESS_INFORMATION info; STARTUPINFO startup; char szPath[128]; char*szCmdLine; GetModuleFileName(AfxGetApp()->m_hInstance,szPath,sizeof(szPath)); szCmdLine=GetCommandLine(); GetStartupInfo(&startup); BOOL bSucc=CreateProc... 阅读全文
posted @ 2011-09-06 19:06 likebeta 阅读(1123) 评论(0) 推荐(0)
摘要:前几日碰到一问题,当CSocket的Receive阻塞时,如何进行超时处理。由于程序是在多线程中使用Socket通信,开始时是在主线程中用定时监测Receive函数,当超时后,结束通信。但问题是CSocket对象无法释放。因此从网上搜索解决办法,直接在线程中对Receive进行超时处理。不错,搜到以下内容,很多网站转载。 为CSocket配置Time-Out功能 CSocket操作,如Send(),Receive(),Connect()都属阻塞操作,即它们在成功完成或错误发生之前是不会返回的。 在某些情况下,某项操作可能永远不能成功完成,程序为了等待其完成就得永远循环下去。在程序中为... 阅读全文
posted @ 2011-08-27 16:51 likebeta 阅读(4379) 评论(1) 推荐(2)
摘要:MFC对SOCKET编程的支持其实是很充分的,然而其文档是语焉不详的。以至于大多数用VC编写的功能稍复杂的网络程序,还是使用API的。故CAsyncSocket及CSocket事实上成为疑难,群众多敬而远之。余好事者也,不忍资源浪费,特为之注解。一、CAsyncSocket与CSocket的区别前者是异步通信,后者是同步通信;前者是非阻塞模式,后者是阻塞模式。另外,异步非阻塞模式有时也被称为长连接,同步阻塞模式则被称为短连接。为了更明白地讲清楚两者的区别,举个例子:设想你是一位体育老师,需要测验100位同学的400米成绩。你当然不会让100位同学一起起跑,因为当同学们返回终点时,你根本来不及掐 阅读全文
posted @ 2011-08-18 20:49 likebeta 阅读(868) 评论(0) 推荐(0)
摘要:AfxExtractSubString函数的用法在我做加密软件时,需要给加密后的文件加个后缀(比如.zq),然后解密时又需要去掉后缀,还原本来的后缀,并在文件名后加“解密”二字,我采取的就是这个比较不常用的MFC分割字符串的函数AfxExtractSubString(CString& rString, LPCTSTR lpszFullString,int iSubString, TCHAR chSep = '\n'),下面大概说一下它的用法:注:本文系rainy8758原创,转载请注明出处:http://blog.hjenglish.com/rainy8758/arti 阅读全文
posted @ 2011-08-15 10:13 likebeta 阅读(4228) 评论(0) 推荐(0)
摘要:1.MFC窗口的句柄和指针的转换(1) 一般窗口对象都会有一个其对应的句柄变量,所以我们可以取此对象的m_hWnd属性来得到句柄。(2)使用GetSafeHwnd函数取得程序所在窗口类的句柄(3)使用FromHandle函数来通过句柄得到其想要的指针 其他的一些方法: GetActiveWindow 取当前活动窗口句柄 AfxGetMainWnd 取主窗口句柄 GetForegroundWindow 取前台窗口句柄 FindWindow寻找参数指定的窗口 EnumWindow枚举窗口2. 上下文无关设备的句柄和指针的转换 (1)this->m_hDC (2)CDC::GetSafeHdc 阅读全文
posted @ 2011-08-04 12:43 likebeta 阅读(488) 评论(0) 推荐(1)
摘要:模态和非模态两者的区别: 一. 非模态对话框的模板必须具有Visible风格(Visible=True),否则对话框将不可见,而模态对话框则无需设置该项风格。在实际编程中更加保险的办法是调用CWnd::ShowWindow(SW_SHOW)来显示对话框,而不管对话框是否具有Visible风格。 二. 非模态对话框对象是用new操作符来动态创建的,而不是以成员变量的形式嵌入到别的对象中或以局部变量的形式构建的。通常应在对话框的拥有者窗口类内声明一个指向对话框类的指针成员变量,通过该指针可访问对话框对象。 三. 通过调用CDialog::Create函数来启动对话框,而不是CDialog::DoM 阅读全文
posted @ 2011-08-01 15:03 likebeta 阅读(975) 评论(0) 推荐(0)
摘要:遍历窗体所有控件代码如下:CWnd* pwndChild = GetWindow(GW_CHILD); while (pwndChild){ //....to do something pwndChild = pwndChild->GetNextWindow();}如果只想得到某一类 ,比如button的。代码如下:// 遍历得到页面中的所有Button控件,依次设定其样式和颜色 CWnd* pWnd = GetWindow(GW_CHILD); char cClassName[255]={0}; while(pWnd) { //得到控件的... 阅读全文
posted @ 2011-07-25 18:55 likebeta 阅读(969) 评论(0) 推荐(0)
摘要:用鼠标单击窗口标题条以外区域移动窗口移动标准窗口是通过用鼠标单击窗口标题条来实现的,但对于没有标题条的窗口, 就需要用鼠标单击窗口标题条以外区域来移动窗口。有两种方法可以达到这一目标。 方法一:当窗口确定鼠标位置时,Windows向窗口发送WM_NCHITTEST消息,可以处 理该消息,使得只要鼠标在窗口内,Windows便认为鼠标在标题条上。这需要重载 CWnd类处理WM_NCHITTEST消息的OnNcHitTest函数,在函数中调用父类的该函数, 如果返回HTCLIENT,说明鼠标在窗口客户区内,使重载函数返回HTCAPTION, 使Windows误认为鼠标处于标题条上。 下例是使用.. 阅读全文
posted @ 2011-07-25 15:37 likebeta 阅读(892) 评论(0) 推荐(0)
摘要:有没有想过在Windows环境下实现苹果电脑窗口界面的风格?下面就以实现苹果电脑窗口风格为例,进行一次奇妙的旅行。原 理仔细观察苹果窗口,发现和Windows窗口的区别主要体现在标题栏和控制按钮(即最小化、恢复、关闭按钮)。所以我们应该把主要精力集中在这两点上,直接对Windows窗口已有的标题栏和控制按钮进行修改。由于标题栏和控制按钮都属于非客户区,所以关键是获得非客户区的CDC,可以通过GetWindowDC()来获得。GetWindowDC()可以获得整个窗口的CDC,当然也包括非客户区的CDC,得到此CDC后,确定标题条的确切位置,就可以在标题栏上为所欲为了。如图1所示,在标题栏的位置 阅读全文
posted @ 2011-07-23 22:18 likebeta 阅读(439) 评论(0) 推荐(0)
摘要:很多同学在绘制UI时喜欢将窗口或者对话框设置成无边框无标题栏样式,然后在客户区里就可以”胡作非为“了,想干什么都行然而新手们包括笔者以前都遇到的一个问题是:对于对话框来说直接这样设置:ModifyStyle(WS_CAPTION | WS_THICKFRAME, 0, SWP_FRAMECHANGED); 是不完美的,他们会发现在对话框的情况下,那个border还是存在,最后怎么设置都不可行DWORD dwStyle = GetStyle();//获取旧样式 DWORD dwNewStyle = WS_OVERLAPPED | WS_VISIBLE| WS_SYSMENU |WS_MINI.. 阅读全文
posted @ 2011-07-23 22:15 likebeta 阅读(737) 评论(0) 推荐(0)
摘要:1. CListCtrl 样式及设置2. 扩展样式设置3. 数据插入4. 一直选中Item5. 选中和取消选中Item6. 得到CListCtrl中所有行的checkbox的状态7. 得到CListCtrl中所有选中行的序号8. 得到item的信息9. 得到CListCtrl的所有列的header字符串内容10. 使CListCtrl中一项可见,即滚动滚动条11. 得到CListCtrl列数12. 删除所有列13. 得到单击的CListCtrl的行列号14. 判断是否点击在CListCtrl的checkbox上15. 右键点击CListCtrl的item弹出菜单16. CListCtrl进行大 阅读全文
posted @ 2011-07-15 10:59 likebeta 阅读(599) 评论(0) 推荐(0)
摘要:一、观察模仿前最重要的一步就是观察,经过半天对QQ的摆弄和摸索,总结出了以下一些特点:1、窗口开始粘附时,检测的是鼠标坐标与桌面边界的距离,特别地,粘附在下面的时候,检测的是与任务栏的距离;2、在向上移动窗口时,窗口边界永远不会超出桌面上面边界;3、窗口是个 TopMost 风格;4、当窗口粘附在上面、左边或右边并显示时,你把鼠标移动到最顶端,光标变成改变窗口大小的图标,而单单是把窗口的top坐标设置为0是不行的;5、粘附在下面的时候,当处于移动状态,那么窗口的底边是与任务栏顶边对齐的,但从隐藏到显示的时候,窗口的底端是与屏幕底边对齐的;6、隐藏后显露出来的那条线可能是一个Border,但肯定 阅读全文
posted @ 2011-07-03 17:43 likebeta 阅读(3121) 评论(0) 推荐(0)
摘要:有三个API函数可以运行可执行文件WinExec、ShellExecute和CreateProcess。CreateProcess因为使用复杂,比较少用。 WinExec主要运行EXE文件。如:WinExec(’Notepad.exe Readme.txt’, SW_SHOW); ShellExecute不仅可以运行EXE文件,也可以运行已经关联的文件。 首先必须引用shellapi.pas单元:uses ShellAPI; 1.标准用法 ShellExecute函数原型及参数含义如下: function ShellExecute(hWnd: HWND; Operation, File... 阅读全文
posted @ 2011-07-01 16:18 likebeta 阅读(3846) 评论(0) 推荐(1)