
MFC
milanleon
这个作者很懒,什么都没留下…
展开
-
MFC对话框程序启动后在后台运行
在对话框初始化函数OnInitDialog中添加如下代码://启动隐藏主窗口和任务栏ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW); //隐藏任务栏WINDOWPLACEMENT wp;wp.length=sizeof(WINDOWPLACEMENT);//GetWindowPlacement(&wp);wp.flags=WPF_RE转载 2014-01-14 14:00:42 · 1776 阅读 · 0 评论 -
MFC消息反射
什么是消息反射?在windows里面,子控件经常向父控件发送消息,例如很多子控件要绘制自己的背景,就可能向父窗口发送消息WM_CTLCOLOR。对于从子控件发来的消息,父控件有可能在处理之前,把消息返还给子控件处理,这样消息看起来就像是从父窗口反射回来一样,故此得名:消息反射。转载 2014-05-07 17:27:40 · 957 阅读 · 0 评论 -
全面解读通知消息WM_NOTIFY
消息的分类有3种:窗口消息、命令消息和控件通知消息,我们这里要谈的是最后一种:控件通知消息。转载 2014-05-23 13:18:23 · 2669 阅读 · 0 评论 -
CEdit编辑控件
CEdit从CWnd继承了重要的功能,要在CEdit对象中设置或获取文本,使用CWnd成员函数SetWindowText和GetWindowText,可以设置和得到编辑控件的全部内容,即使它是一个多行控件。如果编辑控件是多行的,使用CEdit成员函数GetLine,SetSel,GetSel和ReplaceSel来获取和写入控件的部分文本。在OnInitDialog()中设置焦点到CEdit控转载 2014-02-19 17:23:56 · 2198 阅读 · 0 评论 -
SetWindowPos的作用
SetWindowPos()用来设置窗口的尺寸、位置和Z序。函数原型:BOOL SetWindowPos( const CWnd* pWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags );pWndInsertAfter 指向以Z次序排序的窗口中位于当前窗口前面的那个窗口,也可为NULL或转载 2014-04-02 15:02:56 · 3328 阅读 · 0 评论 -
CListCtrl控件详解
Create创建列表控件并将其附加给CListCtrl对象。转载 2014-06-07 15:21:34 · 24929 阅读 · 1 评论 -
窗口显示时闪烁的原因
1、GetSystemMetrics()可以获得指定系统信息或系统配置信息,如获得系统分辨率、标准光标的宽度和高度、图标宽度和高度、系统如何安排最小化窗口、以像素为单位计算的菜单选中标记位图的尺寸等。eg://获得屏幕分辨率宽和高g_uiScreenWidth = GetSystemMetrics(SM_CXSCREEN);g_uiScreenHeight = GetSystemM转载 2014-06-18 16:29:37 · 1298 阅读 · 0 评论 -
PreSubclassWindow的作用
要了解PreSubclassWindow的作用,首先应了解什么是“子类化控件”。“子类化控件”或称“接管控件”,它是将对话框上子窗口(控件)的消息处理函数(窗口过程函数)替换成对应的C++对象的消息处理函数的动作。 举个例子了来阐明一下:例如你需要一个只接受数字输入的文本编辑框,如果使用对话框资源工具箱上的Edit控件,当用户输入数字以外的字符时,你既不知道也无计可施。也就是说,当用户在编辑转载 2014-06-18 16:17:10 · 1995 阅读 · 0 评论 -
TextOut 与DrawText
1、CDC::TextOut()在指定位置输出指定字符串。函数原型:virtual BOOL TextOut( int x, int y, LPCTSTR lpszString, int nCount );BOOL TextOut( int x, int y, const CString& str );eg:CPaintDC dc原创 2014-02-19 15:54:53 · 8921 阅读 · 0 评论 -
调用SetCapture()捕获其它线程的鼠标输入
SetCapture()函数在属于当前线程的指定窗口里捕获鼠标输入。一般,只有鼠标在CWnd的客户区内,你才能接受到鼠标消息,调用SetCapture()后,即使鼠标移动出客户区,你也可以接受到鼠标消息。同一时刻只能有一个窗口捕获鼠标。如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定的窗口。GetCapture()可以知道当前哪个窗口调用了SetCa转载 2014-02-18 17:10:50 · 1418 阅读 · 0 评论 -
GetWindowRect与GetClientRect 的区别
GetWindowRect() 得到的是在屏幕坐标系下的RECT。(即以屏幕左上角为原点)GetClientRect() 得到的是在客户区坐标系下的RECT; (即以所在窗口左上角为原点)GetWindowRect()取的是整个窗口的矩形; GetClientRect()取的仅是客户区的矩形,也就是说不包括标题栏,外框等;第一个函数获得的是窗口在屏幕上的位置,得到的结果可能是这转载 2014-03-26 13:57:38 · 1300 阅读 · 0 评论 -
SendMessage、PostMessage、PostThreadMessage
SendMessage函数将指定的消息发送到一个或多个窗口,消息会直接发送到窗口过程而不经过消息队列,且直到消息处理完成后,SendMessage才返回。函数返回值指定消息处理的结果,依赖于所发送的消息。函数原型: LRESULT WINAPI SendMessage( HWND hWnd, UINT Msg, WPARAM wPara...原创 2014-01-29 10:36:13 · 2016 阅读 · 0 评论 -
CString成员函数总结
保存中文的话最好不要使用std::string,不然查找中文的话可能会出现问题,而且需要注意的是string的find返回的字符位置以ascii字符为单位,找不到的话返回的是string::npos,而非-1,比如下面的示例: std::string str("a人类"); //"人类"的GBK编码为C8CBC0E0 size_t n = str.find("死"); //"死"...转载 2013-12-31 17:16:53 · 1815 阅读 · 0 评论 -
根据指定条件获得窗口的函数
以下三个函数根据指定条件获得窗口的句柄:1、FindWindow返回指定顶层窗口的句柄,该窗口的类名和窗口名与参数中指定的字符串相匹配,在查找时不区分大小写。这个函数不查找子窗口,如果要查找子窗口使用FindWindowEx()。函数原型:HWND WINAPI FindWindow( LPCTSTR lpClassName, //窗口类名 LPCTSTR lp原创 2014-04-03 11:09:04 · 1174 阅读 · 0 评论 -
MFC进度条控件CProgressCtrl实现进度滚动效果
关于CProgressCtrl 控件的基本操作网上有很多资料,可我想实现进度条中进度滚动效果,即很多时候程序出现的等待或启动画面,如下图:在网上搜索半天发现了了这个方法:CProgressCtrl::SetMarquee(_In_ BOOL fMarqueeMode, _In_ int nInterval),第一个参数为开关,第二个参数指定滚动时间。可实际运行时发现不管作用,后来才发现原创 2015-11-07 22:11:23 · 13483 阅读 · 0 评论 -
BitBlt类函数
BitBlt()函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境。在复制时按1:1的比例进行,无法实现拉伸和压缩。函数原型:BOOL BitBlt( int xDest, //目标矩形区域左上角x坐标 int yDest, //目标矩形区域左上角y坐标 int nWidth, //目标(源)矩形区域逻辑宽度原创 2014-02-18 16:55:46 · 854 阅读 · 0 评论 -
控件的自绘
MFC自绘控件有很多函数,常见的有WM_DRAWITEM消息,DrawItem虚函数,还有一个NM_CUSTOMDRAW反射消息,NM_CUSTOMDRAW是通过WM_NOTIFY发送给父窗口的。我们可以在控件类里面反射调用次消息。转载 2014-05-07 15:24:56 · 1255 阅读 · 0 评论 -
调用EnableWindow禁止窗口接收输入
CWnd::EnableWindow()允许或禁止指定的窗口或控件接受鼠标和键盘的输入。函数原型:BOOL EnableWindow(BOOL bEnable = TRUE);若参数bEnable为TRUE,则窗口被允许,为FALSE则窗口被禁止。返回值为窗口调用EnableWindow之前的状态:若窗口之前为禁用状态则返回非0,若窗口之前为允许或发生错误则返回0。若窗口的转载 2014-03-20 18:13:28 · 2947 阅读 · 0 评论 -
PreTranslateMessage函数
PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数本窗口的消息都要通过这里,比较常用,当你需要在MFC之前处理某些消息时,常常要在这里添加代码。MFC消息控制流最具特色的地方是CWnd类的虚拟函数PreTranslateMessage(),通过重载这个函数,我们可以改变MFC的消息控制流程,甚至可以作一个全新的控制流出来。 只有穿过消转载 2014-01-29 09:21:47 · 1063 阅读 · 0 评论 -
对话框的按键处理 PreTranslateMessage、OnKeyDown和OnChar
1、MFC对话框不能响应OnKeyDown和OnChar函数(1)现象 在MFC的对话框中,映射了WM_CHAR 和WM_KEYDOWN 消息后,但是对话框不能响应OnKeyDown和OnChar函数(2)原因 因为MFC在进行设计的时候,这两个消息被对话框上的控件截获了,不能到达这两个消息响应函数,对于OnKeyDown来说,只要把对话框上的控件都删除了,就可以接收到转载 2014-01-28 17:08:13 · 1032 阅读 · 0 评论 -
GetMessage与PeekMessage
的转载 2014-01-29 10:55:53 · 713 阅读 · 0 评论 -
libcmt.lib和msvcrt.lib冲突
今天自己在编辑一个wxWidgets的项目时,进行编译后,提示链接错误,错误的大致信息时说libcmt.lib里的一些符号重复定义,google搜索一下,说是由于没有启用多线程支持,于是在项目属性-->C/C++-->代码生成-->运行时库,设置值为“多线程(/MT)”,然后再编译,真的通过了。看了分析,是由于单线程时,libcmt.lib和msvcrt.lib都会被链接,但这两者中有很多符号名称转载 2014-02-07 15:24:50 · 992 阅读 · 0 评论 -
调用EnumChildWindows来枚举子窗口
EnumChildWindows()函数的作用是向父窗口的所有子窗口按顺序的(枚举)调用回调函数。函数原型BOOL WINAPI EnumChildWindows( HWND hWndParent, //父窗口句柄 WNDENUMPROC lpEnumFunc, //回调函数 LPARAM lParam转载 2014-02-18 11:31:31 · 14850 阅读 · 0 评论 -
在WM_SETCURSOR消息处理函数中设置鼠标的光标
如果鼠标光标在一个窗口内移动且鼠标输入没有被捕获则窗口会接收到WM_SETCURSOR消息,只要鼠标移动OnMouseMove就会自动发送 WM_SETCURSOR从而触发OnSetCursor,因此在设计改变鼠标光标的程序时,一般不要在OnMouseMOve事件中调用SetCursor,容易引起指针闪烁,应该在在WM_SETCURSOR消息处理函数OnSetCursor中设置鼠标的光标。eg:原创 2014-02-19 10:07:49 · 7126 阅读 · 0 评论 -
CStatic控件的基本使用
CStatic类提供了一个Windows静态控件的功能。一个静态控件可以用来显示一个文本字符串、方框、矩形、图标、光标、位图或增强的图元文件。它可以被用来作为标签、方框或用来分隔其它的控件。静态控件通常不接收输入,也不提供输出;但是,如果它具有SS_NOTIFY风格,则它可以通知其父有关设备点击的消息。 创建一个静态控件分两步。首先,调用构造函数来构造一个CStatic类的对象,然后调用成转载 2014-02-20 13:37:07 · 2048 阅读 · 0 评论 -
鼠标滚轮消息WM_MOUSEWHEEL
使用WM_MOUSEWHEEL,需要把CWnd设定为Focus。afx_msg BOOL OnMouseWheel( UINT nFlags, short zDelta, CPoint pt ); 返回值:如果允许鼠标轮滚动,则返回非零值;否则返回0。 参数: nFlags 指明是否按下了虚拟键。这个参数可以是下转载 2014-03-05 15:50:44 · 5129 阅读 · 0 评论 -
CBitmap位图类
类CBitmap封装了Windows图形设备接口(GDI)中的位图,并且提供了操纵位图的成员函数。使用CBitmap对象之前要先初始化CBitmap对象。构造函数 CBitmap构造一个CBitmap对象初始化函数LoadBitmap从应用的可执行文件中加载一个命名的位图资源来初始化位图对象LoadOEMBitmap加转载 2014-03-17 09:37:25 · 2083 阅读 · 0 评论 -
对话框关闭时的消息处理
默认情况下Enter键消息会响应OnOK函数,Esc键消息会响应OnCancel函数,故需要对这两个按键处理的时候可以重写这两个函数。 单击对话框上默认的关闭按钮时会先后产生WM_CLOSE消息和WM_DESTROY消息,故需要对关闭按钮按下做处理的时候可以在这两个消息的消息响应函数中进行。 参考:http://www.cnblogs.com/Hisin/archive/2012/03转载 2014-02-07 13:52:10 · 1250 阅读 · 0 评论 -
MFC类CRect、CPoint、CSize
1、CRect矩形类CRect类与Windows RECT结构相似,在传递LPRECT或RECT结构作为参数的任何地方,都可以传递CRect对象来代替。构造函数: CRect() throw(); // from left, top, right, and bottom CRect(int l, int t, int r, int b) throw(); // from two po转载 2014-03-07 17:21:33 · 9745 阅读 · 0 评论 -
获得对象句柄、对象指针的函数
1、CWnd::GetSafeHwnd()返回窗口的句柄。函数原型:HWND GetSafeHwnd( ) const; CDC::GetSafeHdc()返回DC的句柄。函数原型:HDC GetSafeHdc( ) const; CGdiObject::GetSafeHandle()返回GDI对象(位图、画刷、画笔、字体、调色板等)的句柄。函数原型:原创 2014-02-18 09:10:56 · 2130 阅读 · 0 评论 -
CFont字体类
字体由CFont类进行管理,创建CFont类必须使用CFont类的成员函数,这点与CPen和CBrush有所不同。为了使用CFont对象,首先构造一个CFont对象,再通过调用CreateFont、CreateFontIndirect、CreatePointFont、CreatePointFontIndirect使一个Windows字体与此CFont对象关联,然后使用此CFont对象的成员函数转载 2014-02-19 14:08:54 · 5497 阅读 · 0 评论 -
VC中播放mp3文件的方法
http://blog.csdn.net/skilledprogrammer/article/details/5876602转载 2014-02-26 15:56:59 · 2425 阅读 · 0 评论 -
Invalidate()、InvalidateRect()、InvalidateRgn、UpdateWindow()
1、Invalidate()使整个客户区无效。客户区无效则会发送WM_PAINT消息对整个客户区进行重绘。如果消息队列非空则Invalidate()不会立即发送WM_PAINT消息重绘窗口,直到消息队列为空才向消息队列发送WM_PAINT消息重绘窗口。 InvalidateRect()使客户区的指定区域无效。指定区域无效则会发送WM_PAINT消息对指定的区域进行重绘。原创 2014-02-15 14:55:13 · 3388 阅读 · 1 评论