随笔分类 -  MFC

1 2 3 下一页
MFC操纵时间的常用方法
摘要:1定义一个CTime类对象 CTime time;2得到当前时间 time = CTime::GetCurrentTime();3 GetYear(),GetMonth(), GetDay(), GetHour(), GetMinute(), GetSecond(), GetDayOfWeek() 返回整型(int)对应项目4 将当前时间格式化 CString date = time.Format("%Y-%m-%d %H:%M:%S %W-%A");说明:1) 结果为:2006-10-13 17:23:47 41-Friday2) 格式符号说明%a—— 星期(缩写英文), 阅读全文
posted @ 2011-08-23 18:05 maxweii 阅读(6867) 评论(1) 推荐(0)
屏蔽CHtmlView\WebBrower控件右键菜单技巧合集
摘要:1.常被人鄙视的方法(PreTranslateMessage)经常见到有人问怎么屏蔽html的右键菜单,有人答用PreTranslateMessage函数拦截wm_rbuttondown消息,于是总会有人说这种方法怎么烂,@_@,我真不知道为什么,不过我想这也是一种方法呀,而且非常简单,所以还是列出来吧:)BOOL CPreTranslateMsgView::PreTranslateMessage(MSG* pMsg){ // TODO: 在此添加专用代码和/或调用基类 if ((pMsg->message == WM_RBUTTONDOWN)||(pMsg->message == 阅读全文
posted @ 2011-08-02 18:40 maxweii 阅读(891) 评论(0) 推荐(1)
DDX和DDV
摘要:DoDataExchange由框架调用,作用是交互并且验证对话框数据,主要由(DDX) 和 (DDV)宏实现。永远不要直接调用这个函数,而是通过UpdateData(TRUE/FALSE)实现控件与变量之间值的传递。 当然你也可以不使用DoDataExchange而完成控件与变量之间值的传递,如: 通过GetWindowText和SetWindowText等等函数完成String变量与Edit控件之间的数据交互, DDX/DDV 通过使用ClassWizard向对话类添加成员变量,你可以利用ClassWizard所提供的高效特征,为对话数据交换和对话数据验证自动生成源代码,也就是人们所熟知的D 阅读全文
posted @ 2011-07-21 18:09 maxweii 阅读(6135) 评论(2) 推荐(3)
使用 CHeaderCtrl
摘要:使用由 CHeaderCtrl 类表示的标头控件显示纵栏式列表的列标头。例如,标头控件对于实现电子表格中的列控件应该很有用。 标头控件通常分为叫做“标头项”的各个部分,每个部分有一个关联文本或数字列的标题。根据设置的样式,可以为用户提供若干操作标头项的直接方式。 注意CListCtrl 提供嵌入标头控件,而 CListView 在 MFC 类中封装 CListCtrl。通常,可考虑使用 CHeaderCtrl 为想要自己绘制的列表加标签。 标头控件和列表控件 (List Control) 大多数情况下,使用嵌入 CListCtrl 或 CListView 对象中的标头控件。但在某些情况中,最好 阅读全文
posted @ 2011-07-14 10:01 maxweii 阅读(4046) 评论(0) 推荐(0)
非模态对话框 以及与模态对话框的转换
摘要:1、非模态对话框的模板必须具有Visible风格,否则对话框将不可见,而模态对话框则无需设置该项风格。更保险的办法是调用CWnd::ShowWindow(SW_SHOW)来显示对话框,而不管对话框是否具有Visible风格。2、非模态对话框对象是用new操作符在堆中动态创建的,而不是以成员变量的形式嵌入到别的对象中或以局部变量的形式构建在堆栈上。通常应在对话框的拥有者窗口类内声明一个指向对话框类的指针成员变量,通过该指针可访问对话框对象。3、*通过调用CDialog::Create函数来启动对话框,而不是CDialog::DoModal,这是模态对话框的关键所在。由于Create函数不会启动新 阅读全文
posted @ 2011-06-13 15:56 maxweii 阅读(3573) 评论(0) 推荐(0)
子类化
摘要:子类化 如果你曾经在 Windows 环境下编过程序,有时候就会发现:有一个现成的窗口,几乎有你所需要的全部功能,但还不完全一样。如果你需要一个具有过滤特殊字符功能的 Edit 控件。当然最直接的方法就是自己用代码来实现,但这的确是一个费时又很困难的任务,而子类化就可以用来做这种事情。 子类化允许你接管被子类化的窗口,使你对它有绝对的控制权。举个例子了来阐明一下:例如你需要一个只接受十六进制数字输入的文本编辑框,如果使用一个简单的 Edit控件,当用户输入十六进制以外的字符时,你既不知道也无计可施。也就是说,当用户进文本框中输入字符串 "zb+q*" 时,如果除了拒绝接受整 阅读全文
posted @ 2011-06-09 15:52 maxweii 阅读(777) 评论(0) 推荐(1)
对话框中滚动条
摘要:前一段时间编了一个小程序,因要在对话框上设置滚动条,现就对话框上应用滚动条的一点经验给大家作个参考,如有不对之处望各位高手给予指证。在对话框上要应用滚动条,首先当然是要将对话框的属性vertical scroll选中(在这里只介绍纵向滚动条,横向滚动条与之原理相同)。然后是按Ctlr+w进入classwizard选中对话消息WM_OnVScroll,并添加它的响应函数,接着进入代码编辑区,写入代码:void CRq::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: Add your message ha 阅读全文
posted @ 2011-06-03 19:41 maxweii 阅读(717) 评论(0) 推荐(0)
win7生成生成Detours.lib以及简单使用实例
摘要:Detours是微软开发的一个函数库,可用于捕获系统API。在用其进行程序开发之前,得做一些准备工作:一.下载Detours 在http://research.microsoft.com/sn/detours 可免费下载Detours二.安装Detours 一路NEXT三.生成Detours库 在安装后的文件夹下找不到直接可以拿来用的LIB文件,但是却有SRC文件(在**\Microsoft Research\Detours Express 2.1\src下)。该文件夹下还有Makefile,可以直接用来生成库。 将Detours路径下的SCR文件夹拷贝到**\Microsoft Visual 阅读全文
posted @ 2011-06-01 10:42 maxweii 阅读(3985) 评论(0) 推荐(0)
如何防止GDI资源泄露
摘要:在windows系列上做编程,gdi是一个很重要的技术点,有很多程序在运行多次后出现异常,除了众所周知的内存泄露以外,gdi资源泄露也是一个很直接的原因.今天就把我自己在编程中总结的一些经验给大家分享,欢迎高手补充.1.Create出来的gdi对象,一定要用DeleteObject来释放,释放顺序是先Create的后释放,后Create的先释放.这里的Create指的是以它为开头的gdi函数,比如,CreateDIBitmap,CreateFont等等,最后都要调用DeleteObject来释放.2.Create出来的dc要用DeleteDC来释放,Get到的要用ReleaseDC释放.3.确 阅读全文
posted @ 2011-05-27 16:51 maxweii 阅读(882) 评论(4) 推荐(1)
OnPaint 和OnEraseBkGnd区别
摘要:问题是这样产生的.在OnEraseBkGnd中,如果你不调用原来缺省 的OnEraseBkGnd只是重画背景则不会有闪烁.而在OnPaint里面, 由于它隐含的调用了OnEraseBkGnd,而你又没有处理OnEraseBkGnd 函数,这时就和窗口缺省的背景刷相关了.缺省的 OnEraseBkGnd操作使用窗口的缺省背景刷刷新背景(一般情况 下是白刷),而随后你又自己重画背景造成屏幕闪动. 另外一个问题是OnEraseBkGnd不是每次都会被调用的.如果你 调用Invalidate的时候参数为TRUE,那么在OnPaint里面隐含 调用BeginPaint的时候就产生WM_ERASEBKGN 阅读全文
posted @ 2011-05-20 15:10 maxweii 阅读(684) 评论(0) 推荐(1)
透过宏定义了解MFC的消息响应机制
摘要:消息系统是MFC的重要组成部分。MFC的消息响应机制并不复杂,而且MFC的开发环境 Visual Studio来供了非常好的自动化工具,自动生成代码。MFC也定义了丰富的宏来简化消息响应的代码。这使得很多初学者都能快速开发出基于消息响应机制的应用程序。然后也正是这些带来方便的宏,使很多人摸不着头脑。当不小心的代码操作使自动化工具不好用的时候,看着那一组更像是一堆的宏,很多人只好一头雾水。要想真正了解MFC的消息机制,必需弄清楚这些宏。好在源码面前无秘密,我们将从这些宏的源码着手,逐步分析、了解、并学习MFC的消息响应及映射机制。第一个宏:DECLARE_MESSAGE_MAP()作用:为一个消 阅读全文
posted @ 2011-05-06 09:37 maxweii 阅读(756) 评论(0) 推荐(0)
MFC控件的SubclassDlgItem
摘要:要在程序中创建新设计的控件,显然不能用自动创建的办法,因为对话框模板对新控件的特性一无所知.程序可以用手工方法创建控件,在调用派生类的Create函数时,派生类会调用基类的Create函数创建控件.用Create函数创建控件是一件比较麻烦的工作,程序需要为函数指定一大堆的控件风格以及控件的坐标和ID.特别是控件的坐标,没有经验的程序员很难确切地安排控件的位置和大小,往往需要反复调整.利用MFC的CWnd::SubclassDlgItem提供的动态连接功能,可以避免Create函数的许多麻烦,该函数大大简化了在对话框中创建派生控件的过程. 大家知道,在用手工方法创建控件时,先要构建一个控件对象. 阅读全文
posted @ 2011-05-01 22:42 maxweii 阅读(466) 评论(0) 推荐(0)
WaitForSingleObject WaitForMultipleObjects
摘要:DWORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds );参数: hHandle是一个事件的句柄,第二个参数dwMilliseconds是时间间隔。如果事件是有信号状态返回WAIT_OBJECT_0,如果时间超过dwMilliseconds值但时间事件还是无信号状态则返回WAIT_TIMEOUT。 hHandle可以是下列对象的句柄: Change notification Console input Event Job Memory resource notification Mutex Process Semapho 阅读全文
posted @ 2011-04-17 18:05 maxweii 阅读(1117) 评论(0) 推荐(0)
WM_MOUSELEAVE和WM_MOUSEHOVER使用
摘要:默认情况下,窗口是不响应 WM_MOUSELEAVE 和 WM_MOUSEHOVER 消息的,所以要使用 _TrackMouseEvent 函数来激活这两个消息。调用这个函数后,当鼠标在指定窗口上停留超过一定时间或离开窗口后,该函数会 Post 这两个消息到指定窗口。使用方法:1. 在对话框类中定义一个变量来标识是否追踪当前鼠标状态,之所以要这样定义是要避免鼠标已经在窗体之上时,一移动鼠标就不断重复产生 WM_MOUSEHOVER 。 BOOL _bMouseTrack=TRUE ;2. 在 OnMouseMove 中调用 _TrackMouseEvent 函数 if (_bMouseTrac 阅读全文
posted @ 2011-04-14 17:56 maxweii 阅读(13539) 评论(0) 推荐(0)
设备相关位图DDB与设备无关位图DIB
摘要:设备相关位图 在Windows中有两种类型的位图:DDB位图(与设备相关位图)及DIB位图(与设备无关位图).与设备相关位图(DDB)是一种内部位图格式,它由MFC库6.0版本CBitmap类定义,有一个与之关联的Windows数据结构. DDB中不包括颜色信息,显示时是以系统的调色板为基础进行各位的颜色映射.例如,如果当前的显示设备是256色模式,那么DDB必然也是256色的。在256色以下的位图中存储的像素值是系统调色板的索引,其颜色依赖于系统调色板。由于DDB高度依赖输出设备,所以DDB只能存在于内存中,它要么在视频内存中,要么在系统内存中。它显示的图像依计算机显示系统的设置不同而不同, 阅读全文
posted @ 2011-04-09 11:42 maxweii 阅读(1702) 评论(0) 推荐(0)
CTabCtrl用法
摘要:一、在对话框视图中加入CTabCtrl控件,资源ID:IDC_TAB,变量名:m_Tab 二、在OnInitDialog()中加入以下代码: m_Tab.InsertItem(0,"窗口1"); m_Tab.InsertItem(1,"窗口2"); // 创建子窗口实例(事先创建好),将父窗口设为m_Tab // CChileDlg1 m_dlgChile1; // CChileDlg2 m_dlgChile2; m_dlgChile1.Create(IDD_DIALOG_CHILD1,GetDlgItem(IDC_TAB)); m_dlgChile2. 阅读全文
posted @ 2011-04-06 16:04 maxweii 阅读(633) 评论(0) 推荐(0)
_declspec(dllexport)与_declspec(dllimport)
摘要:__declspec(dllexport)我相信写WIN32程序的人,做过DLL,都会很清楚__declspec(dllexport)的作用,它就是为了省掉在DEF文件中手工定义导出哪些函数的一个方法。当然,如果你的DLL里全是C++的类的话,你无法在DEF里指定导出的函数,只能用__declspec(dllexport)导出类。但是,MSDN文档里面,对于__declspec(dllimport)的说明让人感觉有点奇怪,先来看看MSDN里面是怎么说的:不使用 __declspec(dllimport) 也能正确编译代码,但使用 __declspec(dllimport) 使编译器可以生成更好 阅读全文
posted @ 2011-04-06 14:36 maxweii 阅读(739) 评论(0) 推荐(0)
BCG界面库使用指南
摘要:本文以MDI应用程序为例说明如何在已有的VC++工程中使用BCG界面库,我的开发环境为VS2003。 1,将BCG/BCGCBPro目录路径添加到“项目属性->C/C++ ->常规 ->附加包含目录”中,同时将BCG/Bin目录路径添加到“项目属性->链接器 ->常规 ->附加库目录”中。2,确保在CWinApp派生类(设为CMyApp)的InitInstance()成员函数中调用AfxOleInit();3,在ExitInstance()函数中添加: CleanState(); BCGCBProCleanUp();4,在stdafx.h中添加 #inclu 阅读全文
posted @ 2011-04-06 10:05 maxweii 阅读(1390) 评论(1) 推荐(0)
CListCtrl使用详解
摘要:1。先来介绍REPORT类型的CListCtrl: 首先使用下面的语句设置CListCtrl的style: DWORD SetExtendedStyle( DWORD dwNewStyle ); 其中 LVS_EX_CHECKBOXES 表示添加CheckBox LVS_EX_FULLROWSELECT 表示选择整行 LVS_EX_GRIDLINES 表示添加表格线 如果设置了LVS_EX_CHECKBOXES属性,则可以用 BOOL GetCheck( int nItem ) const; 来得到某一行是否Checked。 可以先用下面的语句来删除以前的东西: for(int k=2;k&g 阅读全文
posted @ 2011-04-03 00:44 maxweii 阅读(357) 评论(0) 推荐(0)
MFC 消息宏
摘要:MFC 消息类型:三种 1、命令消息(WM_COMMAND) 所有派生自 CCmdTarget 的类都有资格接受WM_COMMAND。 2、Window消息(WM_xxx) 所有派生自 CWnd 的类都有资格接受 WM_xxx。 3、控件消息(WM_NOTIFY) 控件向其父窗口通知消息。 消息处理:1、WM_xxx 消息处理 窗口类(自身)处理→基类处理→CWnd∷DefWindowProc()处理; 其所对应的宏一般为在消息 WM_ 前面加上 ON_。 2、命令消息处理 命令消息来自命令用户界面对象(菜单、加速键或工具栏按钮)发出的WM_COMMAND消息; ㈠、WM_COMMAND消息 阅读全文
posted @ 2011-04-01 15:54 maxweii 阅读(716) 评论(0) 推荐(0)

1 2 3 下一页