![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
用户界面编程
文章平均质量分 94
海浪
生活要有目标
展开
-
继承自定义对话框
<br />1. 如果生成你自己的这个公共类? <br />在ClassWiazard中强行生成一个新类,比如CMyDlg,不指定Source ID。在新生成的头文件中,去掉enum { IDD = _UNKNOWN_RESOURCE_ID_ };这一行。 <br />把构造器说明改为如下的样子: <br />CMyDlg(UINT id = NULL,CWnd* pParent = NULL); <br />在相应的cpp文件中,把构造器的改成这个样转载 2011-02-11 11:36:00 · 881 阅读 · 0 评论 -
CListCtrl实现拖拽 效果
<br />方法1:<br />void ClistOx::OnLvnBegindrag(NMHDR *pNMHDR, LRESULT *pResult)<br />{<br />LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);<br />// TODO: 在此添加控件通知处理程序代码<br />CPoint ptItem, //<br />ptAction, //事件发生的位置 <br />ptImage;//移动位图的位置<br /原创 2011-02-11 11:52:00 · 5171 阅读 · 1 评论 -
解决使用CHtmlView后出现的COleException异常
<br />程序中在使用CHtmlView类来实现浏览器功能时,在调整窗口大小时会窗口输出异常警告,例如我的出现的警告如下:<br />Warning: constructing COleException, scode = DISP_E_MEMBERNOTFOUND ($80020003).<br />htmltest.exe 中的 0x7c80bef7 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0012de68 处的 COleException。<br />Warning: c原创 2011-02-11 11:53:00 · 3145 阅读 · 0 评论 -
无边框窗口实现拖垃效果
(1)实现效果需要处理以下这三个消息:<br /><br />WM_NCHITTEST WM_SETCURSOR WM_NCLBUTTONDOWN<br />WM_NCHITTEST参数:<br />xPos = LOWORD(lParam); // horizontal position of cursor (相对于屏幕坐标)<br />yPos = HIWORD(lParam); // vertical position of cursor (相对于屏幕坐标)<br /><br />(2)消息处理函数:转载 2011-02-11 11:54:00 · 658 阅读 · 0 评论 -
Toolbar CSubClassWnd Tip 弹出窗口
背景:我用一个CListBox派生类实现宿主(owner-draw)列表框,这个列表框的项目宽度超过了列表框本身的宽度,因此当鼠标指针指向大宽度的列表框项时,我想显示一个类似Toolbar的提示窗口,在窗口中显示完整的列表框项目文本。<br />起初我想使用CToolTipCtrl::AddTool的第三个参数lpRectTool来实现这个功能,但没有成功。后来,我采用了自立更生的解决方案,创建了一个可重用窗口类:CPopupText 类定义和实现 /////////////////////////转载 2011-02-11 11:56:00 · 1225 阅读 · 0 评论 -
ToolTip 使用
ToolTip是Win32中一个通用控件,MFC中为其生成了一个类CToolTipCtrl,总的说来其使用方法是较简单的,下面讲一下它的一般用法和高级用法。 <br /><br />一般用法步骤: <br /><br />添加CToolTipCtrl成员变量 m_tt。 <br /><br />在父窗口中调用EnableToolTips(TRUE); <br /><br />在窗口的OnCreate(或者其他适当的位置)中向ToolTip中添加需要显示Tip的子窗口,并同时指定相应的显示字串CToolTip转载 2011-02-11 11:58:00 · 769 阅读 · 0 评论 -
在2010中提示_CrtDbgReport: String too long or IO Error
<br />vs2010 中,用TRACE不要加 _T <br />不然会提示_CrtDbgReport: String too long or IO Error原创 2011-05-13 16:29:00 · 4725 阅读 · 1 评论 -
实现实时刷新的效果
<br />有时候我们想OnPaint() ;立即执行来实现实时刷新的效果:<br />方法1是:<br />SendMessage(WM_PAINT);<br />InvalidateRect(NULL,FALSE);<br />方法2是:<br />InvalidateRect(NULL,FALSE);<br />UpdateWindow();原创 2011-04-30 16:18:00 · 1294 阅读 · 0 评论 -
vs2010 下CHtmlView 页面会闪烁
<br />本文摘取网络上的文章<br /> <br />web browser控件在对话框程序中不会闪烁, 而在CWnd中, 当窗口缩放的时候就会闪.一个web browser控件由3层窗口组成: <br />Shell Embedding <br />Shell DocObject View <br />Internet Explorer_Server <br />而Internet Explorer_Server这层窗口可能只有在显示网页后才出现. 刚创建的时候并没有这层窗口. 闪烁的原因就是Inte原创 2011-04-30 16:19:00 · 2229 阅读 · 0 评论 -
对开发中常见的内存泄露,GDI泄露进行检测
对开发中常见的内存泄露,GDI泄露进行检测一、GDI泄露检测方法:在软件测试阶段,可以通过procexp.exe 工具,或是通过任务管理器中选择GDI对象来查看软件GDI的对象是使用情况。注意点:Create出来的GDI对象,都要用DeleteObject来释放;Create出来原创 2011-07-13 17:27:24 · 6775 阅读 · 0 评论 -
让窗体支持文件拖拽
<br />一、基本概念<br />拖放,是指用鼠标拖动的方法,在不同程序的窗口之间、同一个程序的不同窗口之间或同一程序同一窗口的不同控件之间,进行移动、复制和粘贴等操作的技术。拖放操作是在操作系统的帮助下完成的。被拖动的对象首先向操作系统注册它使用的数据格式,并按指定的数据格式转载 2011-02-11 12:01:00 · 1677 阅读 · 0 评论 -
CWnd中创建控件修改其TAB顺序
在CDialog中改变Tab键顺序可以使直接在向导中直接修改(静态创建),也可以在创建控件的时候指定其WS_TABSTOP属性,TAB顺序就是按照你创建的先后顺序来指定的;但是在CWnd类中通过修改其WS_TABSTOP属性就不能实现了,还需要在PreTranslateMessage(MSG* pMsg) 响应其tab键然后设置SetFocus来实现:BOOL CChildView::Pr原创 2012-01-06 11:01:02 · 1182 阅读 · 0 评论 -
WM_PAINT消息---InvalidateRect不能实时更新问题
WM_PAINT消息的触发时机: 第一次创建一个窗口时,改变窗口的大小时,把窗口从另一个窗口背后移出时,最大化或最小化窗口时,等等,这些动作都是由系统管理的,应用只是被动地接收该消息,在消息处理函数中进行绘制操作; 大多数的时候应用也需要能够主动引发窗口中的绘制操作,比如当窗口显示的数据改变的时候,这一般是通过InvalidateRect和InvalidateRgn函数来完成的转载 2012-06-07 15:54:25 · 2209 阅读 · 0 评论 -
去掉在模态对话框处理鼠标跟键盘消息时,出现系统提示声音
基于模态CDialog 窗口时,当处理键盘消息或是鼠标消息时,有时会提示“当当”的声音,这个可以通过设置系统来关掉声音;通过去掉系统的默认初始消息来屏蔽声音:BOOL CPiFuMBDlg::PreTranslateMessage(MSG* pMsg) { if(pMsg->message==WM_CHAR) { return TRUE; } return CBas原创 2012-06-30 10:38:15 · 995 阅读 · 0 评论 -
异常错误报告 -MINIDump ZIB 发送
<br /> <br /> <br />原文:http://www.codeproject.com/debug/postmortemdebug_standalone1.asp<br />例子:http://www.codeproject.com/debug/crash_report.asp原创 2011-02-11 11:51:00 · 661 阅读 · 0 评论 -
BCMenu 自绘菜单
Cool Owner Drawn Menus with Bitmaps<br />Version 3.036 June 2005<br />By Brent Corkum<br /> <br />Update Information<br /><br />Download MFC MDI Source Code+Example (97KB)<br />Download MFC Dialog Sorce Code+Example (78KB)<br /> What's new in Version 3.0<转载 2011-02-11 11:50:00 · 1705 阅读 · 0 评论 -
关于属性设置的先后
<br />在设置控件的扩展属性时,属性设置的先后顺序,有时会影响到设置的结果,正常后面设置的属性才能响应,<br />比如:<br /> DWORD dwExStyle = ListView_GetExtendedListViewStyle(m_ListCtrl); <br /> dwExStyle |= 0x00020000; <br /> ListView_SetExtendedListViewStyle(m_ListCtrl, dwExStyle); <br />m_ListCtrl.SetExt原创 2011-02-11 11:36:00 · 522 阅读 · 0 评论 -
窗口子类化-实例应用
<br />所谓窗口子类化:改变一个已经存在的窗口实例的性质:消息处理与其他实例属性。<br /> <br />通常在SDK中所谓的窗口子类化就是改变一个窗口函数(如GetWindowLong()和SetWindowLong())通过这两个函数来设置窗口的属性等;<br /> <br />而今天我们主要内容是介绍MFC中的子类化,它跟SDK中的子类化不太一样:<br />所有MFC窗口有相同的窗口函数,由该窗口函数根据窗口句柄查找窗口实例,在把消息映射到该窗口类(class)得消息处理函数上。为了利用MFC原创 2011-02-11 10:50:00 · 2309 阅读 · 0 评论 -
未处理异常的捕获发送及简单调试(上部)
<br />主要根据windows 提供的错误报告机制来捕获程序的异常。<br />基础知识:<br /> MiniDump: 微软提供了一个API函数MiniDumpWriteDump(在Dbghelp.h文件中,需导入DbgHelp.lib), 它的作用就是在程序崩溃的时候,将崩溃信息写到一个dump 的后缀名的文件里,方便查找错误原因。<br /> Windows 提供了函数 SetUnhandledExceptionFilter ,它给了我们处理异常的最后机会,否则Windo原创 2011-02-11 10:54:00 · 884 阅读 · 0 评论 -
设计之数据结构和算法的分离
<br />相信每一个在windows下编过程序的人都或多或少地用过位图,大多数人是从网上下载一些成熟完善的DIB类库来使用(例如CxImage、CDIB),少数人有一套自己封装好的DIB类库,方便以后的扩充和使用。(近几年GDI+异军突起,在某些处理方面,如:缩放、旋转、渐变填充等它提供无与伦比的速度和质量,但,如果你想做一个完善的图像处理程序,直接使用它会给架构设计带来困难,你可以用adapter模式封装它后再使用...扯远了)。<br /> 这时候,如果你需要一些图像处理操作你会怎么办呢?很多没有O转载 2011-02-11 10:58:00 · 632 阅读 · 0 评论 -
自绘按钮响应单击消息
<br />在派生类的消息映射中添加:<br />ON_CONTROL_REFLECT_EX(BN_CLICKED, OnClicked)<br />实现函数:<br />BOOL CButtonXX::OnClicked()<br />return FALSE;<br />头文件中添加声明:<br />protected:<br />afx_msg BOOL OnClicked();原创 2011-02-11 10:59:00 · 840 阅读 · 0 评论 -
关于在对话框OnInitDialog 使用MoveWindow
在对话框OnInitDialog中进行MoveWindow 中,系统会马上跳到OnSize 函数中,而MoveWindow后面的函数不会执行到,所以如果我们要在OnInitDialog 中使用MoveWindow ;那么MoveWindow 要放在创建控件的后面。原创 2011-02-11 11:00:00 · 2117 阅读 · 0 评论 -
关于CListCtrl 中只显示图标,不显示文字区域的解决方法
<br />用CListCtrl 来显示缩略图,而不显示文字时,默认会保留文字区域,从而出现一些错误,比如,点击区域不对等;<br />解决方式:<br />#define LVS_EX_HIDELABELS 0x00020000 <br />然后: <br />DWORD dwExStyle = ListView_GetExtendedListViewStyle(m_listctrl); <br />dwExStyle |= LVS_EX_HIDELABELS; <br />ListView_SetExt原创 2011-02-11 11:37:00 · 2098 阅读 · 3 评论 -
防止CListCtrl闪烁的几种方法实现
<br />网上看到了防止CLIstCtrl 闪烁的方法,挺详细的,就是第五种方法有点问题,做了下修改,就可以用了:<br />1.使用SetRedraw禁止窗口重绘,操作完成后,再恢复窗口重绘<br />m_ctlList.SetRedraw(FALSE);<br />//以下为更新数据操作<br />//……<br />//恢复窗口重绘<br />m_ctlList.SetRedraw(TRUE);<br /> <br />2.使用LockWindowUpdate禁止窗口重绘,操作完成后,用Unlock原创 2011-02-11 11:38:00 · 2778 阅读 · 0 评论 -
给框架窗口,对话框,SDK窗口加上阴影效果
<br />最近,有个需求想要给对话框加上阴影效果,在网上搜了很久,有些是用两个窗口叠加的方法,不过感觉这些方面不实用、也不方便;<br />后来找了这个实例,http://www.codeproject.com/KB/dialog/FrameShadow.aspx?display=Print 应该能原创 2011-02-11 11:39:00 · 601 阅读 · 0 评论 -
困扰了我一年多的问题,今天才发现,杯具啊
<br />重载了CListCtrl 类,,在重新载入图片列表时,总是叠在一起,一个没发现是什么问题导致的,只要我滚动条拉到起始点,加载图片列表就不会叠在一起了,,<br />今天才发现m_ListCtrl.SetIconSpacing (125,90);//设置图标间距 原来是这个函数设置的问题原创 2011-02-11 11:39:00 · 579 阅读 · 0 评论 -
系统字体设置(DPI)为120大小的时候,界面错乱问题
<br />最近发现 当系统的DPI设置为大于96的默认设置时,软件的界面很多很乱掉,发现网络上很多软件都没有考虑到这个问题, 在MSDN上找到了关于这个问题 http://msdn.microsoft.com/en-us/library/dd464660(VS.85).aspx 看了也用了,没有成功不知道为什么,如果各位朋友有弄过的可以给我留言呀,大家交流下哦,<br />既然上面的高级方法不行,那只能用土的了,发现只有用GDI 设置的字体才会改变,如果你用GDI+ 来显示字体就不会有放大的问题,,还有就原创 2011-02-11 11:41:00 · 3945 阅读 · 0 评论 -
VC++6.0中编写Unicode编码的应用程序
<br />VC++ 6.0支持Unicode编程,但默认的是ANSI,所以开发人员只需要稍微改变一下编写代码的习惯便可以轻松编写支持UNICODE的应用程序。<br /> 使用VC++ 6.0进行Unicode编程主要做以下几项工作:<br />1、为工程添加UNICODE和_UNICODE预处理选项。<br /> 具体步骤:打开[工程]->[设置…]对话框,如图1所示,在C/C++标签对话框的“预处理程序定义”中去除_MBCS,加上_UNICODE,UNICODE。(注意中间用逗号隔开)改动后如图2转载 2011-02-11 11:44:00 · 638 阅读 · 0 评论 -
Virtual List的使用方法
<br />Virtual List(虚拟列表)是LVS_OWNERDATA 样式的List Ctrl.默认的List Ctrl在插入大量的数据时会变得很慢.在我的破机器上插入不到一万行的数据要几十秒,非常令人不爽.而用Virtual List可以大大加快速度。Virtual List不拥有数据,当需要显示一行时才发消息向父窗口查询显示内容。Virtual List的使用方法与普通List Ctrl稍微有点不同。它有三个重要的消息LVN_GETDISPINFO,LVN_ODCACHEHINT和 LVN_OD转载 2011-02-11 11:45:00 · 1172 阅读 · 0 评论 -
判断多Frame网页是否真正加载完毕(CHtmlView)
1. 手工重载添加两个虚拟函数:virtualvoidDocumentComplete(LPDISPATCHpDisp,VARIANT*URL);virtualvoidNavigateComplete2(LPDISPATCHpDisp,VARIANT*URL);注意:不是以下两个函数virtualvoid OnDocumentComplete(VARIANT* URL);v转载 2012-09-03 17:09:17 · 2297 阅读 · 0 评论