随笔分类 - MFC
摘要:消息分类与消息队列 Windows中,消息使用统一的结构体(MSG)来存放信息,其中message表明消息的具体的类型, 而wParam,lParam是其最灵活的两个变量,为不同的消息类型时,存放数据的含义也不一样。 time表示产生消息的时间,pt表示产生消息时鼠标的位置。 按照类型,Windows将消息分为: (0) 消息ID范围 系统定义消息ID范围:[0x0000, 0...
阅读全文
摘要:1、宏就是用宏定义指令#define定义一个标识符,用它来表示一个字符串或一段源代码。MFC宏作为MFC类库的一个组成部分在MFC应用程序中经常出现。MFC宏在路径".../Microsoft Visual Studio/VC/atlmfc/include"下的Afxwin.h、Afx.h及Afxmsg_.h等MFC头文件中分别进行了定义。(1)常用的MFC宏包括消息映射宏、运行时类型识别宏、序列化宏、调试宏和异常宏等。要想真正了解MFC的内部机制和熟练运用MFC,必须掌握MFC宏的基本原理和使用方法。(2)有关运行时类型识别的宏运行时类型识别(RTTI)是指在程序运行时能
阅读全文
摘要:转载:http://blog.csdn.net/tangaowen/article/details/6054152 最近在写一个从CWnd派生出来的自绘窗口,以前在包装自己的类的Create函数都是这么写的: BOOL CXXX::Create(DWORD dwStyle, const RECT &rect, CWnd *pParentWnd, UINT nID, CCreateCon...
阅读全文
摘要:Invalidate在消息队列中加入一条WM_PAINT消息,其无效区为整个客户区。窗口的客户区无效意味着需要重绘。例如,如果一个被其它窗口遮住的窗口变成了前台窗口,那么原来被遮住的部分就是无效的,需要重绘。理论:这时Windows会在应用程序的消息队列中放置WM_PAINT消息。MFC为窗口类提供...
阅读全文
摘要:首先明确最主要区别:CreateDIBitmap创建的是设备相关位图句柄 - HBITMAP. CreateDIBSection创建的是设备无关位图句柄 - HBITMAP.DIB和DDB之间的相互转换比较慢(关于DIB与DDB区别详见《设备相关(DDB)与设备无关(DIB)》),所以我们使用CreateDIBSection()来创建一个DIB区块。这样作图速度快。CreateDIBSection()返回的是一个HBITMAP,CreateDIBitmap()返回的也是HBIT MAP。两者的区别在于:CreateDIBSection创建的是一个DIBSECTION结...
阅读全文
摘要:BMP文件组成BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成。 如图:位图文件头BITMAPFILEHEADER位图信息头BITMAPINFOHEADER调色板Palette实际的位图数据ImageDate第一部分为位图文件头BITMAPFILEHEADER,是一个结构,其定义如下:typedef struct tagBITMAPFILEHEADER { WORD bfType; DWORD bfSize; WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; } BITMAPFIL...
阅读全文
摘要:相信在Window 下面编程的很多兄弟们都不是很清楚Window 中窗口的层次关系是怎么样的,这个东西很久已经研究过一下,后来又忘记了,今天又一次遇到了这个问题,所以便整理一下。下面就说说Window 中桌面(Deskkop)以及顶层窗口,以及子窗口之间的关系。 在Window 的图形界面下,最基本显示信息的元素就是窗口,每一个Window 窗口都管理着自己与其他窗口之间的关系和自身的一些信息,如:是否可见,窗口的所有者,窗口的父/子关系等等信息,当窗口创建、销毁、显示的时候,就会用到这些信息。 在每一个窗口实例中,有四个元素被窗口管理器用来建立窗口管理链表。Child : 指向窗口子窗口的.
阅读全文
摘要:#pragma once #include <string> #include <Windows.h> using namespace std; #define SAFE_DELETE_ARRAY(p)\ if (p != NULL)\ {\ delete [] p;\ p = NULL;\ }\namespace utility { string unicode_2_ansi(const wchar_t *p_in) { int nLen = WideCharToMultiByte(CP_OEMCP, 0, p_in, -1, NULL, 0, NULL, FA...
阅读全文
摘要:遇到这样的问题令我极为郁闷,于是查找了一下,找到了解决方案:原来是微软的 DEBUG_NEW 和 GDI+ 不匹配造成的。方法1:注释掉:#ifdef _DEBUG#define new DEBUG_NEW#endif这就好了。方法2:::new Bitmap(cx,cy,PixelFormat32bppRGB); //加上全局作用域说明符方法3:详细见:Microsoft Foundation Classes DEBUG_NEW Does Not Work with GDI+http://support.microsoft.com/kb/317799/
阅读全文
摘要:CPaintDC dc(this); //获得设备上下文 CFont m_font; dc.SetBkMode(TRANSPARENT); //设置背景透明 CRect m_rect; Get...
阅读全文
摘要:在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C ++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。 其格式一般为: #Pragma Para 其中Para 为参数,下面来看一些常用的参数。(1)message 参数 Message 参数是我最喜欢的一个参数,它能够在编译信息输出窗 口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为: #Pragma message(“
阅读全文
摘要:CImagetListWapper.h#pragma onceclass CImagetListWapper{public: CImagetListWapper(); ~CImagetListWapper(); void Initail(const char* UserHeadName);public: CImageList m_largeImageList; CImageList m_smallImageList; CString m_customfacedir; void SetCustomFaceDir(unsigned long uin)...
阅读全文
摘要:.h#pragma onceclass CFileTool{public: CFileTool(); ~CFileTool();public: static void DeleteDir(CString DirPath); //删除目录 static void DeleteDirEx(CString DirPath, CString fileType); //DirPath文件目录,删除指定目录的文件,filetype文件后缀 static void DeleteDirEx(CString DirPath,CString fileType,CString flit...
阅读全文
摘要:在一些资料上,有这么一段文字: DECLARE_MESSAGE_MAP() 说明: 用户程序中的每个CCmdTarget派生类必须提供消息映射以处理消息。在类定义的末尾使用DECLARE_MESSAGE_MAP宏。接着,在定义类成员函数的.CPP文件中,使用BEGIN_MESSAGE_MAP宏,及END_MESSAGE_MAP宏。 注释: 如果在DECLARE_MESSAGE_MAP之后定义任何一个成员,那么必须为他们指定一个新存取类型(公共的,私有的,保护的)。 我觉得他描述得欠妥,我的理解是: 只要有:只要是CCmdTarget(用于...
阅读全文
摘要:一、创建互斥体 Mutex 法: 但是单纯的使用互斥体的话不能取得已经创建的实例窗口局柄,因此无法激活已经启动的实例窗口;InitInstance里添加如下代码:(注意在domodal之前) HANDLE m_hMutex = ::CreateMutex(NULL, FALSE, _T("[G...
阅读全文
摘要:CRect rc = CRect(0,0,0,0); m_cEditPwd.GetClientRect(&rc); CDC* pDC = m_cEditPwd.GetDC(); TEXTMETRIC tm; pDC->GetTextMetrics(&tm); int nFontHeight = tm.tmHeight + tm.tmExternalLeading; int nMargin = (rc.Height() - nFontHeight) / 2; rc.DeflateRect(0,nMargin); m_cEditPwd.Set...
阅读全文
摘要:1、string转wstringwstring s2ws(const string& s){ _bstr_t t = s.c_str(); wchar_t* pwchar = (wchar_t*)t; wstring result = pwchar; return result;}2、wstring转stringstring ws2s(const wstring& ws){ _bstr_t t = ws.c_str(); char* pchar = (char*)t; string result = pchar; return result;}3、string转cstring
阅读全文
摘要:先看下面三条语句:(1)#define Conn(x,y) x##y(2)#define ToChar(x) #@x(3)#define ToString(x) #x(1)##,连接操作符x##y表示什么?表示x连接y,举例说:int n = Conn(123,456); 结果就是n=123456;char* str = Conn("asdf", "adf")结果就是 str = "asdfadf";(2)#@,字符化操作符只能用于有传入参数的宏定义中,且必须置于宏定义体中的参数名前。作用是将传的单字符参数名转换成字符,以一对单引用括
阅读全文
摘要:方法一:调用CWinApp类的成员函数SetDialogBkColor来实现。 (这个函数已经废弃)void SetDialogBkColor(COLORREF clrCtlBk = RGB(192, 192, 192), COLORREF clrCtlText = RGB(0, 0, 0));其中函数的第一个参数指定了背景颜色,第二个参数指定了文本颜色。在InitInstance()中添加如下代码:SetDialogBkColor(RGB(0,0,255),RGB(255,0,0)); 值得注意的是:在调用DoModal()之前必须先调用SetDialogBkColor。这种方法经过笔者验.
阅读全文
摘要:很多同学在绘制UI时喜欢将窗口或者对话框设置成无边框无标题栏样式,然后在客户区里就可以”胡作非为“了,想干什么都行然而新手们包括笔者以前都遇到的一个问题是:对于对话框来说直接这样设置:ModifyStyle(WS_CAPTION | WS_THICKFRAME, 0, SWP_FRAMECHANGED);是不完美的,他们会发现在对话框的情况下,那个border还是存在,最后怎么设置都不可行,对于一般从CWnd派生然后用Create方法创建的窗口却没什么问题。解决方案:这里我告诉你如何设置,以下代码适用所有窗口,设置后边框没了,标题栏也没了纯净的客户区就美丽的显示在你的面前: DWORD ...
阅读全文
浙公网安备 33010602011771号