
MFC
mikasoi
这个作者很懒,什么都没留下…
展开
-
GetBuffer, ReleaseBuffer, GetBufferSetLength的用法
GetBuffer和ReleaseBuffer是一套需要配合使用的函数, 与GetBufferSetLength相比, 优点是如果分配的空间大于实际保存的字符串(0结尾), ReleaseBuffer会把多余申请的空间释放, 归还给系统;但使用时需要注意以下问题:如果要保存的字符串为abc(0结尾), 则GetBuffer参数应至少为3;如果要保存的内容不是以0结尾, 比如是读取文件数...原创 2019-04-22 22:44:38 · 1642 阅读 · 0 评论 -
CDockablePane 的创建
解决方案CDockablePane的创建函数如下:virtual BOOL Create( LPCTSTR lpszCaption, CWnd* pParentWnd, const RECT& rect, BOOL bHasGripper, UINT nID, DWORD dwStyle, DWORD dwTa...原创 2019-01-19 19:46:09 · 854 阅读 · 1 评论 -
AfxGetMainWnd()在辅助线程中无法获得主窗口句柄的问题
AfxGetApp()->GetMainWnd()和AfxGetMainWnd()的区别1.AfxGetApp()->GetMainWnd() 获取的是主线程的窗口句柄。2. AfxGetMainWnd()获取的是所在线程的窗口句柄。在单线程下他们获得是同一个窗口,多线程下则不是。void /*Cthread1Dlg::*/threadFunc(){ CTi...原创 2019-01-19 19:39:05 · 765 阅读 · 0 评论 -
程序从VC6.0升级到VS2010后,出现错误无法从“void (__thiscall CVCadView::* )(int)”转换为“void (__thiscall CCmdTarget
项目从vc6.0升级到用vs2013编译,遇到了一些问题1."fabs": 对重载函数的调用不明确2.error C2593: “+=”不明确3.for循环int i的声明要放到外边4.如题要解决这个问题其实很简单,开始百度了一下,解决方案大都是:{1、VC6中,说可以把函数在头文件中定义为:afx_msg void OnProgress()这样 但是在VS2005及...转载 2019-01-19 19:31:25 · 627 阅读 · 0 评论 -
MFC程序出现错误 general error c1010070: Failed to load and parse the manifest.
在VS2010编程中,有时编译会遇到这样的错误,general error c1010070: Failed to load and parse the manifest.解决方法:在解决方案中将后缀名为manifest的文件删除,再编译即可。...原创 2019-01-19 19:27:25 · 1959 阅读 · 0 评论 -
程序由VC6.0升级至VS2010后,ON_MESSAGE 出现错误 error C2440
不能转换void (_thiscall CMainFrame::*)(void)to LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)开发平台由VC6.0升级至VS2010,需要将原有的项目迁移,可能碰到类似错误:error C2440: 'static_cast' : cannot convert from 'void (__thiscall CMain...原创 2019-01-19 19:23:33 · 2242 阅读 · 0 评论 -
ReadString在UNICODE下中文乱码的解决办法(Char型字符和Unicode字符的转换问题)
CStdioFile file; if (!file.Open(m_File_Path, CFile::modeRead)) return; CString strLine; while (file.ReadString(strLine)) { //strLine处理 }问题: CStdioFile在_MSBC环境下读取任何ANSI文本数据都没问题,在...转载 2019-01-13 21:13:07 · 1276 阅读 · 0 评论 -
MFC中怎么分别取出COLORREF变量中的R,G,B的值
如何从COLORREF中获取RGB分量值:COLORREF color =RGB(120,250,110);int r = GetRValue(color);int g = GetGValue(color);int b = GetBValue(color);原创 2019-01-23 23:31:47 · 2257 阅读 · 0 评论 -
让MFC菜单项不自动收缩的方法
注释掉 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)响应函数中的CMFCToolBar::SetBasicCommands(lstBasicCommands); 如下图所示:CList<UINT, UINT> lstBasicCommands;lstBasicCommands.AddTail(ID_FIL...原创 2019-01-23 23:23:30 · 754 阅读 · 0 评论 -
如何得到MFC多文档程序中子选项卡(Tab类型)的序号
MFC多文档程序打开多个子文档时,每个试图都是一个选项卡,当我们点击一个选项卡激活它时,如何知道我们激活的是哪一个子选项卡?方法:在主框架窗口CMainFrame类中添加消息处理AFX_WM_CHANGING_ACTIVE_TABmainfrm.h中:afx_msg LRESULT OnActivateTabChanged(WPARAM, LPARAM);mainfrm.cpp...原创 2018-11-25 14:10:02 · 1189 阅读 · 0 评论 -
去掉MFC多文档程序中打开程序就创建一个新文档的功能
当我们创建一个MFC多文档程序后,直接编译运行会发现程序会自动创建一个空白的文档,如果我们不想要这个功能的话,可以这样做:在App类的InitInstance()中加上下面的代码:cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;这其中的原因都是CommandLineInfo的构造函数造成的,其构造函数如下:CCom...原创 2018-11-25 13:53:59 · 743 阅读 · 0 评论 -
MFC自绘CListCtrl、CHeaderCtrl
以下是网上流传自绘CListCtrl控件的方法:不过有几个问题需要注意一下:以下功能在静态创建时没有问题,动态创建是会出现两个问题:一.控件的表没有自动重绘,没有实现换肤。在CListCtrlCL类中设置断点,进入不了CListCtrlCl::DrawItem(),原因是在动态创建是没有LVS_OWNERDRAWFIXED风格。 解决办法: m_list->Cre...转载 2019-01-27 18:34:03 · 3244 阅读 · 1 评论 -
Scintilla开源库使用指南
Scintilla是一个免费、跨平台、支持语法高亮的编辑控件。它完整支持源代码的编辑和调试,包括语法高亮、错误指示、代码完成(code completion)和调用提示(call tips)。能包含标记(marker)的页边(margin)可用于标记断点、折叠和高亮当前行。Scintilla是一个免费、跨平台、支持语法高亮的编辑控件。它完整支持源代码的编辑和调试,包括语法高亮、错误指示、代码完...转载 2019-02-17 17:58:11 · 6848 阅读 · 1 评论 -
MFC listctrl如何判断鼠标是否点击在的checkbox上
//添加listctrl控件的NM_CLICK消息相应函数void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult){ DWORD dwPos = GetMessagePos(); CPoint point( LOWORD(dwPos), HIWORD(dwPos) ); m_list.Scree...原创 2019-04-22 22:29:01 · 657 阅读 · 0 评论 -
mfc单文档多文档获得停靠窗口内控件指针的方法
//获得主窗口句柄CWnd *pWnd = AfxGetMainWnd();HWND hWnd = pWnd->GetSafeHwnd();//在主窗口内搜索停靠窗口的句柄CWnd *pDockWnd = CWnd::FindWindowEx(hWnd, NULL, NULL, _T("窗口名称"));HWND hDockWnd = pDockWnd->GetSafeHw...原创 2019-03-20 23:44:50 · 464 阅读 · 0 评论 -
MFC中UpdateData(true)无法触发CEdit控件EN_CHANGE消息的原因
在“UpdateData(FALSE);”处设置断点,按“F11”调试时进入此函数,您会发现“CWnd :: Update”的定义包括以下行。代码片段//阻止在UpdateData期间调度控制通知_AFX_THREAD_STATE * pThreadState = AfxGetThreadState();HWND hWndOldLockout = pThreadState-> m_h...原创 2019-03-19 22:13:54 · 1192 阅读 · 0 评论 -
CString类常用方法----Left(),Mid(),Right()
CStringLeft(intnCount)const; //从左边1开始获取前 nCount个字符CStringMid(intnFirst)const; //从左边第 nCount+1个字符开始,获取后面所有的字符CStringMid(intnFirst,intnCount)const; //从左边第 nFirst+1 个字符开始,获取后面nCount个字符CStringRight(in...转载 2019-02-27 22:44:45 · 266 阅读 · 0 评论 -
MFC中在一个对话框中改变另外一个对话框的成员变量
假设主对话框叫MainDlg,子对话框叫AccountsDlg,按下列步骤来:第一步:在主对话框程序创建子对话框函数中:CAccountsDlgdlg(this);//一定要加this,否则楼上几位说的都不可能实现你要求的,this是将MainDlg指针传递给AccountsDlg第二步:在子对话框头文件中引用主对话框头文件,并添加主对话框指针变量:#include"Ma...原创 2019-02-27 22:15:36 · 991 阅读 · 0 评论 -
MFC中光标从窗口1跳转到窗口2中的某个控件中
需求:最近在做项目时,有这么一个需求:在父窗口或窗口1中加工完成某个文件后,需要光标自动跳转到子窗口或窗口2中的某个控 件中。前提:子窗口或窗口2必须已经创建同时已经显示在桌面中。实现方法:方法一:在子窗口或窗口2类中使用SetFocus();GetDlgItem(IDC_EFILENAME)->SetFocus();方法二:在子窗口或窗口2类中使用SetW...转载 2019-02-17 18:20:58 · 278 阅读 · 0 评论 -
MFC单文档程序启用、禁用菜单选项
在头文件中添加变量:bool m_flag;添加UPDATE_COMMAND_UI消息响应:void CMainFrame::OnUpdateOptStep2(CCmdUI* pCmdUI) { pCmdUI->Enable(m_flag); // 通过变量m_flag决定菜单是否可用} ...原创 2019-02-17 18:14:50 · 929 阅读 · 1 评论 -
单文档标题的修改
一、修改标题方法1:在CMainFrame中PreCreateWindow(CREATESTRUCT& cs)进行更改,如下:BOOL CKTLXSubjectShowFrame::PreCreateWindow(CREATESTRUCT& cs){ // TODO: Add your specialized code here and/or call the b...原创 2019-02-17 18:06:54 · 360 阅读 · 0 评论 -
MFC 菜单项快捷键无效
我们在MFC中使用菜单时,都想使菜单项有快捷键,比如Ctrl+B等,在VC++2008或者VC++2010上面,我们会在子菜单项的Caption里输入菜单名以及额外输入(&I)\tCtrl+I,就能够显示如 发送(I) Ctrl+I 这样子菜单项,然后在Accelerator里面绑定一下快捷键及菜单ID就可以了。但是问题出现了,在VC++2008和VC++2010上面没有效果(VC++6...原创 2019-02-17 18:01:10 · 1221 阅读 · 1 评论 -
VC6.0怎么生成Release版本的程序
方法:工程--设置,将Setting for后面的选项改为Win32 Release,然后重新编译。上述设置完成后,可能仍然没有生成Release,而且打开设置时,仍然是Win32 Debug,这时,在VC6.0的工具栏上右击,选择Build,同时去掉Build MiniBar,这时会出现debug的快捷工具栏,在工具栏上选择Win32 Release,然后重新编译即可。...原创 2018-11-20 23:14:28 · 1868 阅读 · 0 评论 -
listctrl删除选中行的方法
CString str;int CurSel = m_list.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED);if(CurSel >= 0){ str = m_list.GetItemText(CurSel, 3); DeleteFile(str); m_list.DeleteItem(CurSel);}原创 2018-10-27 11:44:24 · 1842 阅读 · 0 评论 -
编译出现missing ‘,’ before '<classhead>'的错误
当出现这个错误时,往往所指向的语句并没有错误,而是它的上一句发生了错误。解决办法:1.上一语句末尾确实缺少分号,那么不上即可。2.如果发现发生错误的语句是cpp文件的第一行语句,在本文件中并没有检查到错误,但是本文件使用双引号包含了某个头文件,那么检查这个头文件,在这个头文件的尾部可能有错误。比如声明的struct,union等后面忘记添加 ‘;’。...原创 2018-10-27 11:24:53 · 5255 阅读 · 0 评论 -
给对话框添加菜单 工具栏 状态栏
先建立一个基于Dialog 的程序,名字叫:DlgMenuToolbar。一、如何往基于Dialog的程序添加菜单[1.1] 先添加菜单(IDR_MENU1)资源,并加上需要的菜单项。[1.2] 编辑对话框资源IDD_DLGMENUTOOLBAR_DIALOG的属性,在属性对话框中选择IDR_MENU1即可。[1.3] 假如您不希望在对话框属性中直接设置菜单,而通过代码在程序中动态生成可以采...原创 2018-08-11 23:08:32 · 802 阅读 · 0 评论 -
MFC树控件CTreeCtrl 创建与鼠标左键单击响应
1.在OnInitDialog中:CTreeCtrl *ctreectrl = (CTreeCtrl *)GetDlgItem(IDC_TREE1); //调用ModifyStyle方法修改数控件Sytle ctreectrl->ModifyStyle(0,TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS); //设置树控件字体颜色...原创 2018-08-11 22:48:55 · 6853 阅读 · 0 评论 -
MFC DLL 不能正确调用的问题 + AFX_MANAGE_STATE(AfxGetStaticModuleState());
今天下午用mfc对话框程序调用另一个mfc dll,这是问题出现了,程序正常运行,但是点击对话框上的按钮并不能调用DLL里面的资源,尝试了各种办法也无法解决,吃完晚饭后,沉下心来重头看代码,发现了这样一段MFC自动生成的注释://TODO: 如果此 DLL 相对于 MFC DLL 是动态链接的,// 则从此 DLL 导出的任何调入// MFC 的函数必须将 AFX_MANAGE_S...原创 2018-08-06 20:11:39 · 2810 阅读 · 1 评论 -
自定义消息ON_MESSAGE()
MFC的自定义消息(用户消息)的定义与使用自定义消息的响应和资源消息的响应有很多类似之处;资源消息的响应是以资源的ID号作为标识的;自定义的消息要自己声明消息ID;一. 定义:第一步要声明消息:#define WM_MYMSG WM_USER+200第二步要在类声明中声明消息映射:DECLARE_MESSAGE_MAP()第三步要在类声明中定义消息...转载 2018-08-01 21:09:17 · 8776 阅读 · 0 评论 -
#import no_namespace rename
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")#import生成文件 msado15.tlh,默认是有namespace ADODB { }所有内容都包在这个名字空间中。用了no_namespa...原创 2018-08-01 21:06:42 · 991 阅读 · 0 评论 -
Windows编程中CString 、char*或const char*与LPCWSTR类型转换方法
Windows编程中经常涉及到的一个问题是字符串之间的转换,开发过程总是遇到编译器提示无法格式转换的问题,于是自己总结了几种解决办法。一、char* 转 LPCWSTR 1、通过T2W转换宏 char* szStr = "Mikasoi"; CString str = CString(szStr); USES_CONVERSION; LPCWSTR w...原创 2018-08-01 20:56:13 · 7330 阅读 · 0 评论 -
MFC画图实现实时显示图形轨迹
(1 )在类里定义变量和消息:bool m_bClickEmpty; //判断是否点击了空白的地方,以实现拖动框选择 CPoint OldEmptyBegin;//点击空白开始的座标CPoint NowEmptyEnd;//移动时保存座标afx_msg void OnMouseMove(UINT nFlags, CPoint point);afx_msg void OnLButt...原创 2018-08-04 21:22:35 · 6583 阅读 · 0 评论 -
MFC树形控件(Tree Control)用法实例:增加节点、删除节点、改变结点名
本程序实现了通过菜单或右击节点来动态增加节点和删除节点,并可以通过双击节点来改变结点的名字。// 树形控件Dlg.cpp : 实现文件//#include "stdafx.h"#include "树形控件.h"#include "树形控件Dlg.h"#include "afxdialogex.h"#ifdef _DEBUG#define new DEBUG_NEW#end...原创 2018-07-30 20:24:02 · 15984 阅读 · 3 评论 -
VC++多线程编程
留个纪念,不错的总结。十个例子清晰列举啦多线程编程的奥妙。 VC中多线程使用比较广泛而且实用,在网上看到的教程.感觉写的挺好.一、问题的提出 编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX_SECOND,标题为“延时6秒”,添加按钮的响应函数...原创 2018-07-21 14:14:29 · 4437 阅读 · 0 评论 -
固高数控工作台的刀补插补程序开发(逐点比较法,数字积分法)
这个刀补插补程序设计是我之前自己的毕业设计,主要是基于固高数控工作台,进行四象限及跨象限的刀补插补(逐点比较法和数字积分法)的程序设计,利用MFC进行刀补插补的效果模拟。最后的效果还是非常好的,随着给定的脉冲当量越小,刀补插补的误差也越小。// 毕业设计Dlg.cpp : implementation file//#include "stdafx.h"#include "...原创 2018-06-28 11:39:24 · 5044 阅读 · 2 评论 -
MFC之IP控件(IP地址与CString的互相转化)
在VS中,新建好工程后,点击工具箱---》IP Address Control ,就可以拖出来一个IP专属的控件啦1.获得IP地址:(1)法一先获得控件的指针:CIPAddressCtrl * pIP=(CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS);BYTE nf1,nf2,nf3,nf4;pIP->GetAddress(n...转载 2018-08-11 23:42:36 · 8609 阅读 · 3 评论 -
MFC设置工具栏上的按钮为不可用
CToolBarCtrl m_ToolBar;CToolBarCtrl *pToolBar = (CToolBarCtrl*)&m_ToolBar.GetToolBarCtrl();pToolBar->EnableButton(ID_BUTTON1,false);注意:按钮的背景色必须为白色,否则设置不可用的按钮整个都显示成灰色。...原创 2018-08-13 21:38:44 · 2870 阅读 · 1 评论 -
VC6.0里面使用CArray
之前在VC6.0中用CArray,编译时可能会出现如下错误:error C2143: syntax error : missing ';' before '<'解决办法: 在stdafx.h文件中加入#include<afxtempl.h>即可。...原创 2018-10-27 11:10:28 · 976 阅读 · 0 评论 -
error BK1506: cannot open file '.\Debug\???????.sbr': No such filr or dire
解决方法: VC: 依次点击工程->设置->浏览信息,将创建浏览信息的复选框的勾去掉就可以了。 VS: 工程 -> 属性 -> C/C++ -> Browse Information -> Enable Browse Information 设置为NONE...原创 2018-10-27 10:54:01 · 1664 阅读 · 0 评论 -
MFC中为控件添加浮动提示框的方法
当我们在写MFC程序时,有时会希望当鼠标悬浮在某个控件之上时,有相关消息提示,下面总结该功能的实现方法;1.在 XXXDlg.h 中:添加虚函数:virtual BOOL PreTranslateMessage(MSG* pMsg);添加变量声明:CToolTipCtrl m_tooltip;2.在 XXXDlg.cpp 中在初始化函数BOOL XXXDlg::On...原创 2018-10-29 21:34:21 · 1914 阅读 · 1 评论