MFC
文章平均质量分 75
Linux菜_鸟
努力学习Linux中
展开
-
MSVC编译MFC常见错误
在最开始的编程过程中,最常出现的错误就是LNK2001这个错误,究其原因,其实一句话可以解释:当程序调用函数(function1)时,没有找到function1具体的实现部分。最常见的例子和解释:main or winmain函数:应该是选择工程类型的时候有错误,因为系统会根据subsystem的选项来决定调用main或winmain作为程序的入口函数,如果是console,会转载 2013-08-29 23:18:32 · 1460 阅读 · 0 评论 -
MFC不能多线程操作控件的原因
对于大多数mfc对象,请不要在线程间传递它们,不管是栈上的还是堆上的!原因如下: 1、 mfc的大多数类不是线程安全的,调用传入对象的成员函数可能不会报错,但是未必能达到程序预定的功能! 2、 mfc与界面有关的类,其大多数成员方法都是通过sendmessage实现的,如果消息处理函数本身不是线程安全的,你从工作线程中调用这些方法迟早会同你界面线程的用户消息响应转载 2013-12-27 14:52:17 · 3253 阅读 · 0 评论 -
MFC开发中的多线程封装
MFC开发中的多线程封装目录一、 基本知识:... 11. 线程的启动与结束... 11) 线程的启动... 12) 线程的结束... 23) 深入剖析线程的创建与结束函数... 24) 启动与结束的封装:... 22. 线程的执行过程... 41) 线程对象的原创 2013-12-27 19:45:26 · 1889 阅读 · 0 评论 -
MFC控件积累——CDialog
1.对于OnInitDialog是对WM_INITDIALOG消息的自动响应进行调用的,重载时在其中应该如下写:声明:virtual BOOL OnInitDialog();//This method is called in response to the WM_INITDIALOG message. 定义:BOOL ConnectConfigServerTab::OnI原创 2013-12-14 18:41:31 · 1994 阅读 · 0 评论 -
MFC控件积累——CTreeCtrl控件
1.树控件插入节点:(1)HTREEITEM InsertItem( LPTVINSERTSTRUCT lpInsertStruct );(2)HTREEITEM InsertItem( UINT nMask,LPCTSTR lpszItem,int nImage,int nSelectedImage,UINT nState,UINT nStateMask,LPAR原创 2014-01-07 15:52:15 · 874 阅读 · 0 评论 -
MFC控件积累——CDockablePane控件
1.控制多个CDockablePane停靠在一起时,先停靠一个窗口:DockPane(&m_dockPane1);//使用CFrameWndEx::DockPane() void DockPane( CBasePane* pBar, //A pointer to the control bar to be docked. UINT nDockBarID=0原创 2014-01-02 20:30:34 · 4968 阅读 · 0 评论 -
MFC控件积累——CFormView控件
CFormView是CView类的派生类,在CFormView类里可以放很多控件,可以看做是在CView中放置了一个对话框的集合体,这样可以直观地用资源创建View(并且必须用一个对话框资源去创建)。转载 2014-01-16 20:02:43 · 1916 阅读 · 0 评论 -
MFC控件积累——CContextMenuManager控件
1.使用VS2010或VS2008SP1提供的CMFCxxxx框架时,弹出菜单的调用发生了变化,但与之前使用CMenu产生弹出菜单相同的是都是响应窗口的WM_CONTEXTMENU消息中进行。2.使用CContextMenuManager产生的弹出菜单比CMenu产生的弹出菜单漂亮。3.不要继承或者手动实例化CContexMenuManager类,通过CWinAppEx::GetConte原创 2014-01-23 13:38:02 · 2812 阅读 · 1 评论 -
关于CDialog类的OnOK、OnCancel、OnClose和OnDestroy
首先,OnOK()和OnCancel()是CDialog基类的成员函数,而OnClose()和OnDestroy()是CWnd基类的成员函数,即WM消息响应函数。从应用程序结构的角度,拿对话框来说,红色的X对应的是CWnd,而处于对话框中的“确定”、“取消”按钮则对应了CDialog。其次,OnClose():消息响应函数,响应WM_CLOSE消息,当"关闭"按钮被单击的时候(而不是我们眼转载 2013-12-24 14:04:11 · 2192 阅读 · 0 评论 -
继续总结CWinThread实现多线程的问题
1.CWinThread的继承类实现的多线程或者AfxBeginThread()创建的用户界面线程,在结束的时候通过WM_QUIT消息退出消息循环,这样就要求在线程退出时消息循环仍然不能出错,而对于没有显式设定主窗口的子线程默认会将主线程的主窗口(CMainFrame)设定为自己的主窗口,因此要求子线程在退出时主窗口仍然有效(因为在消息循环中有断言ASSERT(::IsWindow(m_pMain原创 2013-12-31 11:30:20 · 4128 阅读 · 2 评论 -
MFC中的线程同步
在程序中使用多线程时,一般很少有多个线程能在其生命期内进行完全独立的操作。更多的情况是一些线程进行某些处理操作,而其他的线程必须对其处理结果进行了解。正常情况下对这种处理结果的了解应当在其处理任务完成后进行。 如果不采取适当的措施,其他线程往往会在线程处理任务结束前就去访问处理结果,这就很有可能得到有关处理结果的错误了解。例如,多个线程同时访问同一个全局变量,如果都是读取操作,则不会出现问题转载 2014-02-18 13:53:57 · 856 阅读 · 0 评论 -
MFC线程同步——CEvent的使用
WaitForSingleObject函数用来检测hHandle事件的信号状态,当函数的执行时间超过dwMilliseconds就返回,但如果参数dwMilliseconds为INFINITE时函数将直到相应时间事件变成有信号状态才返回,否则就一直等待下去,直到WaitForSingleObject有返回直才执行后面的代码。CEvent 类提供了对事件的支持。事件是一个允许一个线程在某种情转载 2014-02-18 14:14:45 · 10670 阅读 · 0 评论 -
通过继承CWinThread实现MFC多线程
1.CWinApp是CWinThread的一个继承实例,我们继承CWinThread时可以参考CWinApp的工作方法;2.CWinThread继承类对象在调用AfxBeginThread或CWinThread::CreateThread()后线程立即启动,这两种方法都可以创建界面UI线程或工作者线程。3.WM_QUIT消息可以被任何线程处理。或使用PostQuitMessage发送WM_原创 2013-12-20 21:00:32 · 2899 阅读 · 0 评论 -
关于#define new DEBUG_NEW
意思是你在debug的模式下所有的new都会被替换成DEBUG_NEW 以下是MSDN中的内容 在 MFC 中,可以使用 DEBUG_NEW 宏代替 new 运算符来帮助定位内存泄漏。在程序的“Debug”版本中,DEBUG_NEW 将为所分配的每个对象跟踪文件名和行号。当编译程序的“Release”版本时,DEBUG_NEW 将解析为不包含文件名和行号信息的简单 new 操作。因此,在程转载 2013-12-24 13:58:57 · 2882 阅读 · 0 评论 -
CRuntimeClass的结构与功能,DEClARE_DYNCREATE/IMPLEMENT_DYNCREATE
CRuntimeClass在MFC中是至关重要的一个结构。CRuntimeClass没有基类。 每个由CObject派生的类都与一个CRuntimeClass结构相联系,用户可以使用该结构获取一个对象及其基类的运行时信息。当需要额外的函数参数检查时,或当用户必须根据一个对象的类编写特殊目的代码时,在运行时确定该对象的类就非常有用。C++并不直接支持运行时类的信息。CRun转载 2013-12-23 18:59:40 · 1058 阅读 · 0 评论 -
CMFC**系列类使用
1.如果你使用了CFrameWndEx类,但是App类并未继承自CWinAppEx,会报告如下的内存泄露:Detected memory leaks!Dumping objects ->{914} client block at 0x01481660, subtype c0, 200 bytes long.a CMFCVisualManager object at $0148166转载 2013-12-10 16:03:53 · 2659 阅读 · 0 评论 -
CStirng、CStringA、CStringW的使用
1.CString在多字节环境下(未定义UNICODE)为CStringA,在Unicode环境下(定义有UNICODE)为CStringW。2.对于涉及到char*与CStringA或CString转换时最好使用CStringA而不要使用内部存储结构不一定的CString,对wchar_t*与CStringW或CString同理。3.CStringA在UNICODE环境下可以正确转换为C原创 2013-12-12 19:11:04 · 17585 阅读 · 2 评论 -
MFC控件积累——CIPAddressCtrl
1.CIPAddressCtrl控件的DDX函数:(1)2.IP地址与CString的互相转化//将CString 型IP地址在IPAddressCtrl中显示 CString strIP="192.168.0.10"; DWORD dwIP; dwIP = inet_addr(strIP); unsigned char原创 2013-12-13 20:25:36 · 2216 阅读 · 6 评论 -
MFC程序双语言实现
1.对于“对话框”、“菜单”、“工具栏”三种的双语言实现采用MFC资源控制方式实现,例如:1. 新建工程新建了一个对话框工程,工程名称为MultiLanguages,默认语言选择是“中文”。2. 添加多国语言的资源在创建工程后,工程会添加默认的资源,如主对话框,都是“中文”资源。现在我们需要添加相应的英文的资源文件。为主窗口IDD_MULTILANG原创 2013-12-18 12:15:29 · 1250 阅读 · 0 评论 -
LPTSTR、LPCSTR、LPCTSTR、LPSTR的来源及意义
UNICODE:它是用两个字节表示一个字符的方法。比如字符'A'在ASCII下面是一个字符,可'A'在UNICODE下面是两个字符,高字符用0填充,而且汉字'程'在ASCII下面是两个字节,而在UNICODE下仍旧是两个字节。UNICODE的用处就是定长表示世界文字,据统计,用两个字节可以编码现存的所有文字而没有二义。 MBCS,它是多字节字符集,它是不定长表示世界文字的编码。转载 2013-12-18 16:11:33 · 757 阅读 · 0 评论 -
BSTR字符串类型(跨编程语言的字符串)
计算机 C++ 字符串概述它被描述成一个与自动化相兼容的类型,由于操作系统提供相应的API函数(如SysAllocString)来管理它以及一些默认的调度代码。因此BSTR实际上就是一个COM字符串,但它却在自动化技术以外的多种场合下得到广泛使用。为什么需要BSTRCOM是一种跨编程语言的平台,需要提供语言无关的数据类型。多数编程语言有自己的字符串表示。●C转载 2013-12-19 11:14:09 · 1347 阅读 · 0 评论 -
MFC控件积累——CMFCTabCtrl
CMFCTabCtrl类主要用于分页显示,与CTabCtrl类似,自我认为功能比TabCtrl强大,但中间却存在一些bug.一、一般使用方法(vc2010同vs2008用法) 1.对话框放置PictureCtrl,设Type=Rectangle,Visible=False,Color=Gray,ID=IDC_STATIC_TAB(实践证明使用Tab Control资源创建不转载 2013-12-18 16:09:48 · 7468 阅读 · 0 评论 -
用xsl格式化MSXML2操作的XML文件
MSXML2::IXMLDOMDocument2Ptr CXMLDOMFile::XMLNormalize( MSXML2::IXMLDOMDocument2Ptr pXMLDocOld){// Style for normalizationchar pszStyle[]="\\\\\\\";// Create a style dom doc原创 2013-12-19 16:01:30 · 1434 阅读 · 0 评论 -
MFC控件积累——CMFCButton控件
1.对于按钮控件,要响应按钮被click的消息并不需要为对话框添加CButton或CMFCButton类数据成员并动态创建或者DDX_Control创建,可以直接对按钮ID进行消息映射并响应。2.如果选择使用DDX_Control()创建CMFCButton类成员变量,会造成严重的内存泄露,虽然在之后的MFC版本中被修复,但使用VS2010SP1时应该还没有修复,原因与解释如下:首原创 2013-12-20 14:35:46 · 2195 阅读 · 0 评论 -
MFC控件积累——CComboBoxEx控件
创建扩展组合框 (Extended Combo Box) 控件的方式取决于是在对话框中使用该控件还是在非对话框窗口中创建此控件。直接在对话框中使用 CComboBoxEx在对话框编辑器中,将“Extended Combo Box”控件添加到对话框模板资源。指定其控件 ID。(实践证明不可以使用Combo Box控件资源)使用扩展组合框 (Extended Combo Box)转载 2013-12-18 17:45:14 · 2435 阅读 · 0 评论 -
MFC消息响应知识积累
1.关于消息响应函数中的WPARAM和LPARAM:在VC的函数参数中常出现WPARAM和LPARAM,这两个有什么特殊意义么?它们的含义是不是要事先定义? WPARAM和LPARAM一般在消息里面用的很多,其实没有特殊的含义的。 是两普通的变量 。 是怎样通过wParam,lParam传参数的呢?有时候表示点的坐标,有时转载 2014-01-06 10:26:29 · 674 阅读 · 0 评论 -
CContextMenuManager上下文菜单管理器以及为菜单添加图标
在Visual Studio 2008SP1中,要弹出上下文关联菜单的话,只需要在应用程序初始化的时候调用CWinAppEx::InitContextMenuManager,然后使用CWinAppEx::GetContextMenuManager获得一个指向应用程序的上下文管理器。如果工程是单文档/多文档的话,可能会自动关联一个右键菜单,可以在应用程序的实现文件看到类似如下代码://转载 2013-12-09 19:46:23 · 2891 阅读 · 0 评论