MFC
文章平均质量分 78
Charle-Chen
这个作者很懒,什么都没留下…
展开
-
MFC 消息机制
过程:Run == CWinApp-> Run == CWinThread (空闲 OR 有消息到达)-> PeekMessage == CwinThread::Run-> PumpMessage == CWinThread::Run(核心)-> GetMessage == CWinThread::PumpMessage(阻塞等待消息)-> PreTrans转载 2012-10-07 22:27:09 · 1274 阅读 · 0 评论 -
VC中使用ListCtrl经验总结(1)
ListCtrl在工作中,常常用到,也常常看到大家发帖问怎么用这个控件,故总结了一下自己的使用经验,以供参考使用。 先注明一下,这里,我们用m_listctrl来表示一个CListCtrl的类对象,然后这里我们的ListCtrl都是report形式,至于其他的如什么大图标,小图标的暂时不讲,毕竟report是大众话的使用。其次,我们这里用条款一,条款二来描述第一点,第二点,这转载 2012-07-17 16:40:16 · 713 阅读 · 0 评论 -
MFC界面 坐标获取/转换 及 区域获取
MFC界面相关常用方法整理: 坐标点----CPoint:CPoint 构造方法:CPoint();CPoint( intinitX, int initY );CPoint(POINT initPt );CPoint( SIZEinitSize );CPoint(DWORD dwPoint );参数:initX Specifies the v转载 2012-07-17 11:11:58 · 7367 阅读 · 0 评论 -
MFC学习--对话框及窗口背景色
设置对话框背景颜色及背景图片可在OnCtlColor(),OnEraseBkgnd(),OnPaint()里设置,对话框初始化完毕,显示窗口时按顺序调用OnSize()>OnEraseBkgnd()>OnPaint()>OnCtlColor()。OnEraseBkgnd()中默认调用基类(CFrameWnd)的OnEraseBkgnd(), 用窗口类中注册的Brush绘制背景。因此,绘制窗口背转载 2012-07-16 21:41:55 · 2691 阅读 · 0 评论 -
没有找到MFC80UD.DLL,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。
想试下庞大的VS2005的功能,利用向导建立了个对话框程序,开始能编译的,后来加了几句代码,就出现了这个错误“没有找到MFC80UD.DLL,,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。”,我把加上的代码删了,还是不行。网上找到的解决方法:“Visual Studio 2005用向导生成的项目,在运行时可能会遇到找不到MFC80UD.dll的问题。这个问题可能是Manifes转载 2012-07-16 20:37:52 · 1121 阅读 · 0 评论 -
MFC树形控件(CTreeCtrl)用法
树形控件可以用于树形的结构,其中有一个根接点(Root)然后下面有许多子结点,而每个子结点上有允许有一个或多个或没有子结点。MFC中使用CTreeCtrl类来封装树形控件的各种操作。通过调用BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );创建一个窗口,dwStyle中可以使用以下一些树形控件的转载 2012-07-15 20:20:48 · 1422 阅读 · 0 评论 -
Vs2010旗舰版卡死问题。。。
我用的是vs2010旗舰版打开后,设个短点都要响应半天。后来发现可能和显卡有关。。。 打开vs2010菜单工具 -选项-常规-视觉体验,这里的3项都不要勾选。OK,问题解决。转载 2012-07-15 16:42:14 · 2264 阅读 · 0 评论 -
如何实现三态选择树
示例代码运行效果图如下:有时候我们经常需要实现树的多态选择,本文就介绍一种三态选择树的具体实现。步骤一:生成一个对话框工程。步骤二:添加树控件,设置所需的属性。步骤三:做三态选择框图标,且在OnInitDialog()中初始化树,使树控件与选择框图标所构成的图像列表控件联系,具体实现看源代码。步骤四:实现树的左击消息,实现三态选择。01.voidCMutiT转载 2012-07-14 20:23:36 · 939 阅读 · 0 评论 -
禁止对话框的拖动
原理: 在WM_HITTEST对应的消息处理函数OnNcHitTest中直接返回TRUE, 或者返回客户区的值HTCLIENT,欺骗系统我点的位置是客户区,客户区默认是不能拖动动话框的例子:UINT CMyDlg::OnNcHitTest(CPoint point) { // TODO: Add your message handler code here and/or原创 2012-07-14 19:51:14 · 766 阅读 · 0 评论 -
【VS2010】CString类型转换
一、CString 转换为const char *转自:http://hi.baidu.com/lowen_pig/blog/item/8227b632cf441488a9018ef0.html由于是2010,所以2005 08版本的方法貌似不能用了,贴一个最新的方法,经测试可以使用。若你工程默认是使用多字节字符集,无需转换。否则,涉及UniCode和ANSI转换。CStrin转载 2012-07-15 12:10:13 · 11341 阅读 · 1 评论 -
MFC中对窗口贴图
一、要修改窗口的背景,步骤如下: 1、导入一个位图文件。 2、创建一个View窗体的删除背景时的相应函数 BOOL CWndMapView::OnEraseBkgnd(CDC* pDC) 或者在view类的OnDraw响应函数 void CWndMapView::OnDraw(CDC* pDC) 这两个函数的区别是,一个在擦除时直接将图片贴上;一个是先转载 2012-07-19 16:32:32 · 746 阅读 · 0 评论 -
局部刷新闪烁的问题
this->InvalidateRect(&rect,false);原创 2012-08-09 19:03:05 · 531 阅读 · 0 评论 -
常见编译/链接错误及其解决办法
1. 解决error LNK2005: ___crtExitProcess 已经在 LIBCMTD.lib(crt0dat.obj) 中定义有的時候, 在 Debug 模式下編譯沒問題, 換到 Release 模式就發生一堆問題.典型的例子, 就是因為 c++ runtime library 設定不同, 所造成的重複定義連結錯誤.而另一個常見的例子是 專案與 library 使用不同的转载 2012-08-10 22:31:27 · 1149 阅读 · 0 评论 -
PeekMessage&GetMessage
PeekMessage与GetMessage的对比相同点:PeekMessage函数与GetMessage函数都用于查看应用程序消息队列,有消息时将队列中的消息派发出去。不同点:无论应用程序消息队列是否有消息,PeekMessage函数都立即返回,程序得以继续执行后面的语句(无消息则执行其它指令,有消息时一般要将消息派发出去,再执行其它指令)。GetMessage函转载 2012-09-08 16:57:06 · 750 阅读 · 0 评论 -
深入GetMessage和PeekMessage
这篇文章解释了GetMessage和PeekMessage的内部运作方式,同时也是一类与“消息及消息在16位 MS-DOS?/Microsoft? Windows?环境之下的影响”相关文章的基础。我们将讨论下面这些主题:·系统和应用程序队列(译者注:以下简称为“程序队列”)·GetMessage和PeekMessage函数·消息过滤·WM_QUIT消息·让步和休眠·让步的问转载 2012-09-08 17:00:12 · 697 阅读 · 0 评论 -
剖析Windows消息处理机制
前一段,帮人写了个小控件,又温习了一遍Windows消息处理机制,现在把一些知识点总结出来,供大家参考.1.窗口 Windows程序是由一系列的窗口构成的,每个窗口都有自己的窗口过程,窗口过程就是一个拥有有固定 Signature 的 C函数,具体格式如下: LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg转载 2012-08-17 19:42:21 · 895 阅读 · 0 评论 -
全面解读WM_NOTIFY
摘要:控件通知消息有很多种,但是有一种是很常用,但是又不是很容易掌握的,那就是WM_NOTIFY,我试着对此做一下比较全面的论述,有不对的地方,还希望各路大虾批评指正。 控件通知消息 在《深度解析VC中的消息(上)》中,我们提到了消息的分类有3种:窗口消息、命令消息和控件通知消息,我们这里要谈的是最后一种:控件通知消息。 控件通知消息,是指这样一种消息,一个窗口内的子转载 2012-08-17 19:29:43 · 675 阅读 · 0 评论 -
MFC 如何添加自定义消息
MFC如何添加自定义消息MFC自定义消息图解VC添加自定义消息MFC激活自定义消息如果用户自定义的类要求响应普通的Windows消息(也就是以WM_开头,除了WM_COMMAND以外的消息,这类消息在WM_USER以下的是系统消息,WM_USER以上的可以由用户自己定义),那就要求自定义的类必须从CWnd中派生。这是由于此类消息的转载 2012-08-17 18:21:43 · 2402 阅读 · 0 评论 -
MFC 自定义消息的一般过程
1).在相关类的头文件顶部添加如下所示的字串(以CMyDlg类为例):在CMyDlg.h中添加#define WM_MY_MESSAGE (WM_USER+100) 注意:在源文件(。cpp)也可以的。 1 2其中1位置处的转载 2012-08-17 18:50:36 · 1011 阅读 · 0 评论 -
MFC:DrawText打印长文本溢出自动显示省略号
在网页设计中,文字格式溢出是很讨厌的,这样会使上下文文字重叠,或者撑破设计好的版块,造成页面混乱,直接影响网站的美观和实用,而在MFC设计中,也有相同的问题,本篇文章,就分享一下如何处理长文本文字溢出问题。这个问题,很容易便可以解决,那就是在DrawText中使用DT_LEFT | DT_END_ELLIPSIS格式:pDC->DrawText(strText, rect, DT_LEFT转载 2012-08-13 15:15:38 · 4174 阅读 · 0 评论 -
VC 6 MFC 美化界面方法和技巧
前段时间一直在想怎么样能让窗口变得更漂亮一点,更加吸引人呢?在网上也看到了不少高手们的做法,但对于我这种不喜欢太复杂的人来说,我不是很喜欢那样写代码,GetSystemMetrics函数来得到各个边框的长度或宽度。。。。没几下,我的头就晕了,在查了许多资料以及实验后,我终于找到了一种比较简单的美化窗口的方法,现在就拿出来献丑一下,觉得不好的就请跳过去吧~~大家请看这张图:其实这张图已经很转载 2012-08-13 15:23:59 · 2463 阅读 · 0 评论 -
VC最简版图片打印程序
自认为注释已经很详细了,没有什么可说的,以后再用的时候如果还有哪不明白的就当长教训了BOOL CMYDlg::PrintPic(CString strFileName/*打印的图片文件名,带路径*/,int iCopies/*打印次数*/,CString strPrintName/*指定打印机名,如果只有一台打印机可忽略,相应的注释下面的一些代码*/){ CDC dc; CP转载 2012-08-11 11:34:46 · 6667 阅读 · 0 评论 -
WCHAR与CHAR的转换
Windows API中很多参数是LPTSTR类型的,关于这个LPTSTR很多人都解释过了,没什么好说的#ifdef UNICODE typedef LPWSTR LPTSTR#elsetypedef LPSTR LPTSTR#endif说白了,就是一个自适应的字符指针,在2005环境下当你调用某个包含 LPTSTR 参数的函数的时候,如果你试图用一个 ch转载 2012-07-15 11:16:57 · 816 阅读 · 0 评论 -
终结mfc标题栏重绘
1.mfc对话框1.1 保留原标题栏1.如果需要加高标题栏(用于贴图等),就要调用OnNcCalcSize追加部分空间(非客户区间):[cpp] view plaincopyvoid CMy2011082302Dlg::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp) {转载 2012-07-14 14:54:49 · 4223 阅读 · 1 评论 -
使用MFC 发送消息模拟按钮按下事件
有时我们需要这么做, 手动模拟按钮按下的事件, 让程序做出与按钮真的按下时一样的响应. 设按钮ID为ID_BTN_OK, 当前Dialog窗口. 实际上系统并不能区分按钮是真的按下了(如用鼠标点击), 还是一个我们自己用代码模拟出的一种"假象".它所需要知道的只是哪个窗口(按钮也是一种窗口)发生了哪一种事件, 然后在消息循环中处理它. 系统怎么才能知道这些呢? 当然靠的是消转载 2012-06-11 15:50:23 · 1493 阅读 · 0 评论 -
SetCapture
作用及参数 函数功能:该函数在属于当前线程的指定窗口里设置鼠标捕获。一旦窗口捕获了鼠标,所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内。同一时刻只能有一个窗口捕获鼠标。如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定的窗口。 函数原型:HWND SetCapture(HWND hwnd); 参数: hWnd:当前线程里要捕获鼠标的窗口句柄。 返回转载 2012-06-11 11:10:23 · 563 阅读 · 0 评论 -
SetCapture
一般,只有鼠标在CWnd的客户区内,你才能接受到鼠标消息。调用SetCapture后,即使鼠标移动出客户区,你也可以接受到鼠标消息。不过系统中只能有一个程序调用SetCapture,所以你需要在不使用时调用ReleaseCapture释放。而GetCapture可以知道当前哪个窗口调用了SetCapture。BLOKOUT2.C /*----------------------转载 2012-06-11 11:08:26 · 636 阅读 · 0 评论 -
MFC中添加ToolTip没有响应
如果把控件放在Group里面,有时发现ToolTip没有显示,此时可能的原因是Tab排序问题,即Group的Tab排在Group里面的控件的前面;所以,只要Ctrl+D,点击各个控件,进行重新排序即可;这个是我在一篇文章上看到的,不记得出处;添加ToolTip方法如下,来自百度文库:ToolTip在VC中的使用 按照下面的步骤去做:1、先为static设置一个ID,如ID_TI转载 2012-06-10 19:44:57 · 979 阅读 · 1 评论 -
MFC中设置静态文本的字体颜色、背景透明以及解决字体重叠
改变static的颜色和设为背景透明可以在父窗口的WM_CTLCOLOR中实现(即HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor))将static设为背景透明时,改变该控件的文本将会出现文字重叠的现象。 其实设置为透明背景也就是在static重画背景时返回一个空的刷子而已,所以你改变文本并没有改变上次残留的背景,从而导致重叠转载 2012-06-10 19:17:15 · 1543 阅读 · 0 评论 -
VC 按钮添加图标,位图
【按钮添加图标】方法一:1.添加图标资源IDI_ICON1;2 使用函数 LoadIcon() 载入图标。因为LoadIcon() 是类 CWinApp 的成员函数,同时函数 LoadIcon() 返回所载入图标的句柄。所以我们采用以下方法来调用函数 LoadIcon():HICON m_hicn1=AfxGetApp()->LoadIcon(IDI_ICON1);3 为按钮设转载 2012-06-10 11:25:15 · 8365 阅读 · 0 评论 -
点击鼠标两点画线
void CPlaneDiag_Demo_MFCDlg::OnLButtonDown(UINT nFlags, CPoint point){ // TODO: 在此添加消息处理程序代码和/或调用默认值 if(isclicked) { CClientDC dc(this); CPen newPen;原创 2012-06-11 14:40:44 · 889 阅读 · 0 评论 -
PreTranslateMessage
PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数本窗口的消息都要通过这里,比较常用,当你需要在MFC之前处理某些消息时,常常要在这里添加代码. MFC消息控制流最具特色的地方是CWnd类的虚拟函数PreTranslateMessage(),通过重载这个函数,我们可以改变MFC的消息控制流程,甚至可以作一个全新的控制流出来。只有穿过消息队列原创 2012-06-10 20:14:00 · 499 阅读 · 0 评论 -
自绘对话框标题栏
本例中将涉及到对话框标题栏的自绘,双缓冲位图的显示以及位图按钮类的使用。 1. 标题栏自绘 在网上搜索了很多关于标题栏自绘的例子,但是大都存在很多的问题,多是没有自绘彻底,比如出现闪烁,会出现默认风格最大化等按钮的显示,不过其中有份代码处理的比较好,至于出于什么地方想不起来了,下面会一并给出源代码(源代码的下载地址在评论部分给出),本例是在这份源代码的基础上作的改进,主转载 2012-06-09 20:45:38 · 2028 阅读 · 5 评论 -
MFC之MessageBox用法
一 函数原型及参数 function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word): Integer; hWnd:对话框父窗口句柄,对话框显示在Delphi窗体内,可使用窗体的Handle属性,否则可用0,使其直接作为桌面窗口的子窗口。 Text:欲显示的信息字符串。 Caption:对话框标题字符串。转载 2012-06-11 17:53:32 · 597 阅读 · 0 评论 -
MFC得到屏幕大小
//===========================================//描述:得到屏幕大小////作者:kunsa//返回:ScreenSize//创建时间:2010.4.10//状态:已完成//修改://===========================================struct ScreenSize{int转载 2012-07-12 19:48:11 · 2280 阅读 · 0 评论 -
MFC之取得屏幕大小,设置对话框大小
要取得屏幕大小,可以用下面几个函数: int cx = GetSystemMetrics(SM_CXFULLSCREEN); int cy = GetSystemMetrics(SM_CYFULLSCREEN);通过上边两个函数获取的是显示屏幕的大小,但不包括任务栏等区域。 int cx = GetSystemMetrics( SM_CXSCREEN转载 2012-07-12 21:44:39 · 2260 阅读 · 2 评论 -
VS2010/MFC编程入门之三十一(常用控件:树形控件Tree Control 下)
前面一节讲了树形控件Tree Control的简介、通知消息以及相关数据结构,本节继续讲下半部分,包括树形控件的创建、CTreeCtrl类的主要成员函数和应用实例。 树形控件的创建 MFC为树形控件提供了CTreeCtrl类,它封装了树形控件的所有操作。 树形控件的创建也是有两种方式,一种是在对话框模板中直接拖入Tree Control控件创建,转载 2012-07-15 15:15:19 · 8551 阅读 · 0 评论 -
关于 visual studio(vs2005/vs2008/vs2010)中的Character Set
vs2005后的版本为什么会加这一项呢,原因是(http://msdn.microsoft.com/en-us/library/ey142t48(v=vs.80).aspx):翻译过来就是为了兼容各个国家的文字.比如日文,中文.mfc采用了unicode,与Multibyte Character Sets (MBCS)两种文字编码方式.现在xp后版本全是采用的unicode编码 .也是因为转载 2012-07-15 11:05:12 · 4217 阅读 · 0 评论 -
如何使用spy ++
转自 边城浪子:http://www.cnblogs.com/index/archive/2005/03/29/127619.html如果你装了vs.net,在vs.net的工具里面就可以看到spy ++打开spy ++,会以树状图显示当前系统所有的窗体信息,如下所示然后找到你需要用到的窗体,比如说下面这样当然,这里的窗口并不一定都是窗口,子窗体的一般都转载 2012-07-14 20:06:01 · 736 阅读 · 0 评论 -
MFC常用方法
1. 在任务栏隐藏对话框 ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW);2. 使对话框为顶层窗口 SetWindowPos(&this->wndTopMost, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);3. 在运行时添加最大化,最小化按钮 SetWin转载 2012-07-14 18:57:28 · 928 阅读 · 0 评论