MFC
MFC介绍
sunriver2000
这个作者很懒,什么都没留下…
展开
-
【MFC】应用程序获取重启管理器的支持
在Visual Studio 2010中的MFC重启管理器中包含两种层次的支持。重启支持:在应用程序升级完成或崩溃后自动重启(这个特性对所有类型的MFC应用都有效)。 应用恢复支持:重新打开之前已经打开的文档;恢复自动保存的文档(这个特性只对文档/试图类型的MFC应用有效)。对于新建的MFC应用程序和已存在的应用,获取重启管理器支持的方法是不同的。对于新的应用只需要两步: a、使用MFC应用向导创建一个新的MFC应用程序; b、在高级特性设置页(Advance fea...原创 2020-09-21 21:51:37 · 1111 阅读 · 0 评论 -
【MFC】取消菜单(Menu)自动折叠
环境VS版本:VS2010现象由VS2010构建多文档 应用程序时,勾选 个性化菜单行为,产生如下一段代码。这些代码由什么用,有与没有好像也没有分别。 // 启用菜单个性化(最近使用的命令) // TODO: 定义您自己的基本命令,确保每个下拉菜单至少有一个基本命令。 CList<UINT, UINT> lstBasicCommands; lstBasicCommands.AddTail(ID_FILE_NEW); lstBasicComman...原创 2020-09-21 21:11:54 · 506 阅读 · 0 评论 -
【MFC】ON_CONTROL_RANGE用法
问题多个编辑框的EN_KILLFOCUS响应事件的处理,需要用到ON_CONTROL_RANGE。定义ON_CONTROL_RANGE定义。#define ON_CONTROL_RANGE(wNotifyCode, id, idLast, memberFxn) \ { WM_COMMAND, (WORD)wNotifyCode, (WORD)id, (WORD)idLast, AfxSigCmd_RANGE, \ (AFX_PMSG) \ (static_cast< .原创 2020-08-17 15:50:02 · 2224 阅读 · 0 评论 -
【MFC】AfxBeginThread创建线程,如何查询退出后的状态
AfxBeginThread()函数创建线程时,会new一个CWinThread类的对象。CWinThread *m_pTaskThread;m_pTaskThread = AfxBeginThread(Task_Thread, this, THREAD_PRIORITY_NORMAL, 0, 0, 0);如果这个线程退出的话,这个CWinThread对象会被系统自动回收(...原创 2020-04-13 22:52:10 · 1485 阅读 · 0 评论 -
【MFC】 使用MsgWaitForMultipleObjects解决后台线程退出时SendMessage响应问题
问题某些MFC后台线程可能在主程序退出时仍然处于工作状态。主程序退出前,一般需要等待后台线程先退出。处理这类问题的机制通常是,主程序在OnClose()函数中通过激活事件通知后台线程退出。在这种情况下,后台线程退出时调用SendMessage()函数发送消息,主程序已不能响应。因为,此时主程序进入OnClose()函数后,消息响应机制已经关闭。使用WaitForSingleObject...原创 2020-04-11 18:12:19 · 1214 阅读 · 0 评论 -
【MFC】 Tab Control控件风格Horizon改为Vertical
动态Tab Control变换风格,仅在OnInitDialog()函数中添加m_tbMain.ModifyStyle(0, TCS_VERTICAL);调试后发现字体还是水平的。正确的步骤1、头文件中增加如下定义。CTabCtrl m_tbMain;CFont m_Font;2、OnInitDialog()函数中添加如下代码。LOGFO...原创 2020-03-16 17:23:53 · 1184 阅读 · 3 评论 -
【MFC】Warning: no document names in string for template #129
现象在VS2010中调试SDI程序出现如下告警:Warning: no document names in string for template #129.解决方法1、在 resource.h文件 中找到该ID。#define IDR_MAINFRAME1 1292、 在 资源管理器\String Table 中增加如...原创 2020-02-18 17:07:02 · 430 阅读 · 0 评论 -
【MFC】Warning: no message line prompt for ID 0x8015.
现象在VS2010中调试SDI程序出现如下告警:Warning: no message line prompt for ID 0x8015.Warning: no message line prompt for ID 0x8016.解决方法1、在 resource.h文件 中找到该ID。#define IDT_SELECT ...原创 2020-02-18 14:22:28 · 1525 阅读 · 0 评论 -
【MFC】ON_UPDATE_COMMAND_UI和ON_COMMAND消息区别
区别ON_UPDATE_COMMAND_UI和ON_COMMAND消息区别如下:消息 作用 使用场合 ON_UPDATE_COMMAND_UI 处理菜单对应的用户界面显示状态 显示菜单项是否选中、变灰 ON_COMMAND 处理该菜单对应的功能 点击菜单后响应动作 比如:WINDOWS自带的记事本程序,它的"格式"菜单下有个"自动换行"...原创 2020-02-09 18:19:43 · 1576 阅读 · 0 评论 -
【MFC国际化与多语言】03:SetThreadUILanguage函数导致程序不兼容winxp系统
开发环境系统:win10 x64VS版本:VS2010 旗舰版问题MFC程序因为使用SetThreadUILanguage函数,导致程序界面异常。解决方法1、在InitInstance()例程中添加下列代码。switch (m_nLanguageSel){case CHINESE_SIMPLIFIED: m_wLanguageId = MAKELA...原创 2020-01-16 17:02:26 · 1364 阅读 · 0 评论 -
【MFC】DestroyWindow()函数导致程序崩溃
环境VS版本:VS2010问题最近的项目碰到一个需求:需要在后台线程中销毁已经创建好的窗体。这个需求实现产生过程中产生一个莫名其妙的异常,最终导致程序崩溃(应用程序消失了,未报任何错误)。使用Debug调试程序时,中断在这里。查看程序调用堆栈,也找不到可以跟踪的代码。原因排除各种干扰因素后,在网上找到产生问题的原因:程序崩溃是由DestroyWindow...原创 2019-09-04 10:41:59 · 3104 阅读 · 1 评论 -
【MFC】CListCtrl列表控件获取当前选择行号
环境VS版本:VS2010方法一适用情况:左击鼠标,鼠标停留在列表控件选择行上。LVHITTESTINFO lvinfo; CPoint point;DWORD dwPos; //找出鼠标位置 dwPos = GetMessagePos(); point.x = LOWORD(dwPos);...原创 2019-08-29 12:03:42 · 3203 阅读 · 0 评论 -
【MFC】CListCtrl列表控件右键复制内容到粘贴板
环境VS版本:VS2010字符集:多字符集步骤1、列表框初始化。在OnInitDialog()函数中加入列表初始化代码。m_lstAisMsg.SetExtendedStyle(m_lstAisMsg.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);k = 0; m_lstAisM...原创 2019-08-29 11:37:18 · 3321 阅读 · 0 评论 -
【MFC】计算两个SYSTEMTIME的时间差
概述计算两个SYSTEMTIME格式时间的差值,返回秒(s)。声明__int64 TimeDiff(SYSTEMTIME t1, SYSTEMTIME t2);实现__int64 TimeDiff(SYSTEMTIME t1, SYSTEMTIME t2) { CTimeSpan sp; int s1, s2; CTime tm1(t1...原创 2019-05-03 10:12:44 · 5119 阅读 · 0 评论 -
【MFC国际化与多语言】02:MessageBox
你有你的路,我有我的路。至于适当的路,正确的路和唯一的路,这样的路并不存在。——尼采环境系统:win10 x64VS版本:VS2010 旗舰版MessgeBoxEx()MFC国际化与多语言(一)基于DIALOG介绍了如何对MFC程序中自定义资源进行国际化的问题。然而,如何对开发环境提供的对话框(例如MessageBox)进行国际化仍然是个问题。查看MSD...原创 2019-03-25 15:59:24 · 933 阅读 · 0 评论 -
【MFC国际化与多语言】01:基于Dialog
人生的意义不在于留下什么,只要你经历过,就是最大的美好,这不是无能,而是一种超然。——泰戈尔环境系统:win10 x64VS版本:VS2010 旗舰版步骤1、基于Dialog的MFC程序,InitInstance()例程中添加下列代码。switch (m_nLanguageSel){case CHINESE_SIMPLIFIED: m_wLanguage...原创 2019-03-25 14:19:02 · 732 阅读 · 0 评论 -
【MFC】UTF-8与Unicode编码转换
环境适用范围:MFC。字符集:多字节字符集。声明CString UTF8AndUnicode_Convert(CString &strSource, UINT nSourceCodePage, UINT nTargetCodePage);定义CString UTF8AndUnicode_Convert(CString &...原创 2018-12-01 11:55:52 · 5061 阅读 · 7 评论 -
【MFC】封装CHttpClient类实现HTTP请求
MFC封装CHttpClient类实现HTTP请求环境开发环境:Visual Studio 2010字符集:使用多字节字符集头文件HttpClient.h#pragma once#include &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;afxinet.h&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; #include &amp;amp原创 2018-12-01 09:02:13 · 6401 阅读 · 0 评论 -
【MFC】CIniRw类,用于读写后缀为ini的配置文件
.h文件#pragma once#include <iostream>#include <windows.h> #include <tchar.h>#include <stdio.h> #include <stdlib.h>#include <string>#include "atlstr.h" ...原创 2018-04-01 17:34:46 · 492 阅读 · 0 评论 -
【MFC】TabCtrl控件如何调整标签和字体的大小
1、调整标签大小,代码如下CSize size(200, 100), sizeReturn;sizeReturn = m_tbMain.SetItemSize(size);2、调整标签字体,代码如下BOOL bResult;bResult = m_Font.CreateFont(50, 20, 0, 0, 800, TRUE, 0, 0, 1, 0, 0, 0, 0, _T(...原创 2018-04-10 21:08:05 · 5618 阅读 · 0 评论 -
【MFC】CString&CStringA&CStringW之间的相互转换
在做MFC编程的时候,时常会碰到CString、CStringA、CStringW之间相互转换的问题,也即chat字符串与wchar_t字符串相互转换的问题。现本人写了一个它们之间相互转换的函数,代码如下:头文件CStringToolEx.h#ifndef _CSTRING_TOOL_EX_#define _CSTRING_TOOL_EX_#include <cstri...转载 2018-04-04 15:45:36 · 3483 阅读 · 1 评论 -
【MFC】CFile 之 CFile::modeNoTruncate参数的用法
MFC编程时,经常需要用如下方式操作文件:打开某一个文件,如果存在则追加,如果不存在则创建。查看MSDN帮助文件,CFile类中CFile::modeNoTruncate参数具备该功能,该参数一般与CFile::modeCreate参数配合使用。CFile::modeNoTruncate 该值一般modeCreate组合使用。如果创建的文件已经存在,那么它不会被清零。因而该文...原创 2018-06-05 14:57:18 · 7654 阅读 · 2 评论 -
【MFC】Visual Studio 2010中CMFCVisualManager 引起的内存泄露
1、现象。编译VS2010 MFC程序(该工程基于对话框)时出现内存泄漏,如下所示:Detected memory leaks!Dumping objects ->{847} client block at 0x0160E720, subtype c0, 212 bytes long.a CMFCVisualManager object at $0160E720, 212 b...原创 2018-07-07 20:10:07 · 1449 阅读 · 0 评论 -
【MFC】AfxGetMainWnd()函数使用心得
关于AfxGetMainWnd()函数的通常认识:1、使用AfxGetMainWnd()函数获取MFC程序中的主框架类指针是一个常用作法。2、获得应用程序主窗口的指针的方法,AfxGetMainWnd()->m_hWnd或者AfxGetMainWnd()->GetSafeHwnd()。但是,在用户线程中调用AfxGetMainWnd()函数好像就不灵了,为什么?调...原创 2018-07-26 11:57:22 · 5779 阅读 · 1 评论 -
【MFC】EDIT / RICHEDIT2 控件自动换行设置
问题RICHEDIT2控件设置自动换行。解决方法很简单,备忘。如下图。原创 2018-09-06 11:35:39 · 2902 阅读 · 0 评论 -
【MFC】程序自动检测可用串口的方法
步骤1、 头文件添加声明。protected: //实现串口热插拔 afx_msg BOOL OnDeviceChange(UINT nEventType, DWORD dwData);2、源文件添加消息映射。BEGIN_MESSAGE_MAP(CFixtureConfig, CDialog) ON_WM_DEVICECHANGE() END_MESSAGE_...原创 2018-09-15 22:31:38 · 4611 阅读 · 0 评论 -
【MFC】解决基于对话框程序误按ENTER或ESC键退出的方法
问题用户运行基于对话框的MFC程序,如果不注意按下了ENTER或者ESC键,该程序会立刻退出。原因是:默认情况下Enter键消息会响应OnOK,Esc键消息会响应OnCancel。解决方法方法一、重载CDialog的两个虚函数OnOK和OnCancel使其什么也不做。void CTestTTSDlg::OnOK(){ // TODO: 在此添加专用代码和/或调用基类...原创 2018-09-11 11:27:56 · 1907 阅读 · 1 评论 -
【MFC】CMFCStatusBar状态栏编程
1、在资源视图里面,String Table里面插入两个字符。2、状态栏指示器结构体indicators中添加声明。static UINT indicators[] ={ ID_SEPARATOR, //状态行指示器 //ID_INDICATOR_CAPS, //ID_INDICATOR_NUM, ...原创 2018-10-05 07:53:20 · 4152 阅读 · 0 评论 -
【MFC多文档】01:视图中获取文档指针
问题文档与视图绑定后,在视图中如何获取文档指针?新建MFC多文档工程(命名为Test),自动生成了一个CTestView类,其中就有包含成员函数GetDocument()。而当我们手动添加一个新的视图类,比如CNaviMarkView,在这个CNaviView类里就没有这个GetDocument(),因此我们必须手动添加。解决方法:1、NaviMarkView.h头文件...原创 2018-11-17 16:36:21 · 1064 阅读 · 0 评论 -
【MFC多文档】02:文档中获取视图指针
问题文档与视图绑定后,在文档中如何获取视图指针?解决方法1、NaviMarkDoc.h头文件class CNaviMarkDoc : public CDocument{ DECLARE_DYNCREATE(CNaviMarkDoc)public: CView* GetView(CRuntimeClass* pClass);}2、NaviMarkDoc....原创 2018-11-17 17:49:51 · 898 阅读 · 1 评论 -
【MFC多文档】03:文档与视图绑定
问题如题。解决方法:1、MFC多文档工程,手动添加CNaviMarkView与CNaviMarkDoc类。CNaviMarkView继承至CFormView,CNaviMarkDoc继承至CDocument。2、在MainFrm.h中包含上述两个头文件。3、在MainFrm.cpp的OnCreate函数中调用CreateNaviMarkDocTemp...原创 2018-11-17 18:15:36 · 634 阅读 · 0 评论 -
【MFC】CTabSheet类之再改造
CTabSheet是从CTabCtrl继承来的,用于Tab Control的控件类。对于已有的功能和特点,我这里就不加赘述,以下主要阐述新的功能。AddPage()函数增加了一个参数bEnable,用于控制页面是否显示。增加了SetPage()函数。.h文件#pragma once#define MAXPAGE 16typedef struct TAB_SHEET_PAG...原创 2018-04-01 18:19:52 · 1724 阅读 · 0 评论