mfc

VS 2017: fatal error RC1015: cannot open include file 'winres.h'

六眼飞鱼酱① 提交于 2020-03-21 20:44:12
问题 I just downloaded Visual Studio 2017 and converted my dialog-based C++/MFC project with it (from Visual Studio 2008 SP1.) But then when I go to Resources it shows this error: fatal error RC1015: cannot open include file 'winres.h' And idea how to fix this? 回答1: I just also came across this issue. It seems my friend missed to push some VS 2017 meta file to the server. My quick solution is to change the Windows SDK version to match the Windows 10 OS version or below. You can check your OS

xml格式化工具

安稳与你 提交于 2020-03-21 11:09:53
工作中有大量的xml配置文件,经常被人改的乱七八糟,作为强迫症患者,必须要把它整理整理~ 曾经用MFC写过一个,Windows下用起来是不错,Linux下就麻烦了,于是重写了一个命令行版本的,全部代码如下: #include #include "tinyxml2.h" using namespace std; using namespace tinyxml2; int main(int argc, char *argv[]) { if (argc != 2) { cout << "error: need input file" << endl; return 0; } XMLDocument doc(true, COLLAPSE_WHITESPACE); doc.LoadFile(argv[1]); doc.SaveFile(argv[1]); cout << "beautified " << argv[1] << endl; return 0; } 其实就是用tinyxml打开一次再保存就可以啦,利用了tinyxml可以自动整理格式的特性~ by the way,写命令行程序比写MFC容易太多了,MFC需要写大量图形界面交互的代码,而核心代码其实没多少 来源: https://www.cnblogs.com/parody/p/9939559.html

MFC 编译链接错误:unresolved external symbol

半腔热情 提交于 2020-03-18 10:03:31
编译MFC程序过程出现以下错误: Error LNK2019 unresolved external symbol __imp___vsnprintf 解决方法:在Visual Studio工程选项,链接器附加依赖项里面添加legacy_stdio_definitions.lib即可. LNK2001 unresolved external symbol __imp___iob 解决方法:在程序中重新定义_iob, 加上这段代码:extern"C" { FILE _iob[] = { *stdin, *stdout, *stderr }; } 产生以上两个问题的原因是程序中引用的链接库是用旧版的stdio库编译, 与新版的标准库定义不一样。 所以只好用代码重新定义函数指向。 来源: https://www.cnblogs.com/sql4me/p/12515274.html

Is it not possible to add our own menu items on the CHtmlView context menu?

。_饼干妹妹 提交于 2020-03-18 09:00:00
问题 So I keep coming back to this article on CodeProject: https://www.codeproject.com/Articles/4758/How-to-customize-the-context-menus-of-a-WebBrowser I then realised this statement at the top of the article: The revised sample projects are using a new , much better customization approach that is going to be comprehensively discussed in the next update of this article, which will hopefully be ready in a couple of weeks. I am publishing this semi-documented and not fully-tested code, because I am

MFC:基础篇 第三章 MFC消息映射机制

落花浮王杯 提交于 2020-03-17 08:58:51
一.简介 Windows应用程序的输入由Windows系统以 消息 的形式发送给应用程序的窗口.这些窗口通过 窗口过程 来接收和处理消息,然后把控制权还给Windows 二.消息的分类 1.队列消息和非队列消息 从消息的发送途径上看,消息分两种:队列消息和非队列消息 队列消息送到系统消息队列,然后到线程消息队列,最后送给目的窗口过程 非队列消息直接送给目的窗口过程 Windows维护一个系统消息队列(System message queue),每个GUI线程有一个线程消息队列(Thread message queue) 除了键盘 鼠标消息 WM_PAINT WM_TIMER WM_QUIT消息以外,其他消息大多数都是非队列消息 2.系统消息和应用程序消息 从消息来源来看,可以分为系统定义的消息和应用程序定义的消息 三.消息结构 typedef struct tagMSG{   HWND hwnd,      // 接收消息的窗口句柄   UINT messag,      // 消息标识(ID)   WPARAM wParam,    // 第一个消息参数   LPARAM lParam,    // 第二个消息参数   DWORD time,      // 消息产生的时间   POINT pt        // 消息产生时鼠标的位置 }MSG; 四.接收消息 while

C++/MFC计算程序运行时间

放肆的年华 提交于 2020-03-17 03:37:50
在我们实际的编程工作中,经常要测量程序的运行时间,比如衡量算法的运行时间等等。在这里我收集了网上集中测量程序运行时间的方法。 通过网上查阅资料,找到以下几种VC中求取程序运行时间的方法: 方法一 利用GetTickCount函数(ms) 代码: CString str; longt1=GetTickCount();//程序段开始前取得系统运行时间(ms) 。。。。。。//to do sth longt2=GetTickCount();//程序段结束后取得系统运行时间(ms) str.Format("time:%dms",t2-t1);//前后之差即程序运行时间 AfxMessageBox(str); 方法二利用C/C++计时函数(s) 代码: #include"time.h" clock_t start, finish; start =clock(); finish = clock(); printf("%f seconds\n",(double)(finish-start)/CLOCKS_PER_SEC); 方法三 利用CTime类 获取系统时间 代码: CString str; //获取系统时间 CTime tm; tm=CTime::GetCurrentTime(); str=tm.Format("现在时间是%Y年%m月%d日 %X"); AfxMessageBox(str)

MFC实战-编辑框数据实时更新

╄→尐↘猪︶ㄣ 提交于 2020-03-17 03:16:36
在VC里,很多情况下需要更新控件,也就是调用UpdateData(FALSE); 但是如果是在循环中调用该函数,会导致没有时间来刷新界面,消息得不到相应,从外部看来,似乎整个循环只执行了一次UpdateData(FALSE);如下面的例子 for ( i = 0 ; i < m ; i ++ ) { m_yiducishu = i + 1 ; UpdateData ( FALSE ) ; } 这种写法会导致界面没有时间更新。 根据牛人的指点,在代码上添加一点东西,就可以了.如下: for ( i = 0 ; i < m ; i ++ ) { m_yiducishu = i + 1 ; UpdateData ( FALSE ) ; /////////////////////////// MSG msg ; while ( PeekMessage ( & msg , 0 , 0 , 0 , PM_REMOVE ) ) { TranslateMessage ( & msg ) ; DispatchMessage ( & msg ) ; } /////////////////////////////// } 自己推动消息循环 来源: CSDN 作者: weixin_44103969 链接: https://blog.csdn.net/weixin_44103969/article

Error C1189: #error: Please use the /MD switch for _AFXDLL builds

半城伤御伤魂 提交于 2020-03-16 08:16:32
在VS 2013中编译程序时出现错误: 错误提示1: error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d] 原因 : 常规里面是:在静态库中使用MFC,或使用标准Windows库,此时该处可能无论是什么都会报错 运行库中多线程调试是:MDd(多线程调试DLL) 解决方法 : 将MDd改成MTd,如果改正后报错误2,按下面方法更改。 错误提示2: error C1189: #error: Please use the /MD switch for _AFXDLL builds 原因 : 常规里面是:在共享DLL中使用MFC, 运行库中多线程调试是:MTd(多线程调试) 解决方法 : 将常规改成:在静态库中使用MFC,或使用标准Windows库 常规和运行库 如下图: 常规: 右击项目->属性->配置属性->常规,然后在右边的“项目默认值”中的“MFC的使用”选项中选择“在静态库中使用MFC”, 多线程调试: 右击项目-->属性->配置属性->c/c++->代码生成->运行时库->多线程调试(/MTd) 相关注释: MFC的使用

使用MFC类CDatabase、recordset实现查询数据库

久未见 提交于 2020-03-12 17:25:47
一、软件界面 二、源码 // demoDlg.cpp : 实现文件 // #include "stdafx.h" #include "demo.h" #include "demoDlg.h" #include "afxdialogex.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END

MFC的CRuntimeClass分析

帅比萌擦擦* 提交于 2020-03-12 12:42:47
一、CRuntimeClass背景介绍 MSDN:对于MFC中每个从CObject派生的类来说,都有一个相关的CRuntimeClass结构体,在程序运行时可以访问该结构体来获取对象及其基类的运行时信息。 CRuntimeClass是一个结构体,并且其本身并没有基类。在运行时确定一个对象的类型是很重要的,尤其是在做类型检查时;而C++语言本身并不支持运行时类信息。CObject和CRuntimeClass是MFC中两个非常重要的类/结构,绝大部分MFC类都是以CObject做为基类, CRuntimeClass结构同CObject密不可分,了解它们对于深入理解MFC具有重要意义。 二、CRuntimeClass 的结构 CRuntimeClass是一个结构体,它的定义如下: struct CRuntimeClass { // Attributes //类名,一般是指包含CRuntimeClass对象的类的名称 LPCSTR m_lpszClassName; //包含CRuntimeClass对象的类sizeof的大小,不包括它分配的内存 int m_nObjectSize; // schema number of the loaded class分类编号(对不可分类的类,该值为-1) UINT m_wSchema; // NULL => abstract class