MFC
ADHERENTS
学渣一枚
展开
-
MFC自定义消息
消息声明MFC要求,WM_USER以下的是系统消息,WM_USER以上为自己定义消息消息映射消息映射将消息与其对应的响应函数相互关联,消息映射的声明通常在窗口类中完成:BEGIN_MESSAGE_MAP(CDMTEXEDlg, CDialogEx) // 窗口类的名称 ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_CANCEL, &CDMTEXEDlg::OnBnClicke原创 2020-12-30 10:47:09 · 899 阅读 · 0 评论 -
Windows程序内部运行机制:窗口、句柄和上下文的理解
句柄:从广义上,能够从一个数值拎起一大堆数据的东西都可以叫做句柄。Windows系统中定义了许多内核对象(这里的对象不完全等价于"面向对象程序设计"一词中的"对象",虽然实质上差不多),比如打开的文件,创建的线程,程序的窗口等等。这些重要的对象肯定不是4个字节或者8个字节足以完全描述的,他们拥有大量的属性。为了保存这样一个"对象"的状态,往往需要上百甚至上千字节的内存空间,那么怎么在程序间或程序内部的子过程(函数)之间传递这些数据呢?拖着这成百上千的字节拷贝来拷贝去吗?显然会浪费效率。那么怎么办?当原创 2020-09-22 12:05:15 · 1103 阅读 · 0 评论 -
MFC Combo Box
void OnBnClickedCombo(){ int timeout; switch (m_Combo_Timeout.GetCurSel()) { case 0: timeout = 0; break; case 1: timeout = 5; break; default: break; }未完待续...原创 2020-09-17 12:17:00 · 69 阅读 · 0 评论 -
选择文件功能模块
void ChooseFile(){ // 设置过滤器 TCHAR szFilter[] = _T("文本文件(*.ini)|*.ini|所有文件(*.*)|*.*||"); // 构造打开文件对话框 CFileDialog fileDlg(TRUE, _T("txt"), NULL, 0, szFilter, this); // 显示打开文件对话框 if (fileDlg.DoModal() == IDOK) { // 如果点击了文件对话框上的“打开”按钮,则将选.原创 2020-09-17 11:03:12 · 128 阅读 · 0 评论 -
MFC 线程同步
使用WaitForSingleObject函数来等待一个内核对象变为已通知状态:DWORD WaitForSingleObject(HANDLE hObject, //指明一个内核对象的句柄DWORD dwMilliseconds //等待时间); 该函数需要传递一个内核对象句柄,该句柄标识一个内核对象,如果该内核对象处于未通知状态,则该函数导致线程进入阻塞状态;如果该内核对象处于已通知状态,则该函数立即返回WAIT_OBJECT_0。第二个参数指明了需要等待的时间(毫秒),可以传递IN转载 2020-09-07 12:37:22 · 202 阅读 · 0 评论 -
C++ 乱码
BYTE var[4] = {'a','b','c'};//TRACE("var= %s",var);m_OutputValue = (CString)var;MessageBox(m_OutputValue);var[4]可以正常显示,var[3]出现乱码原创 2020-08-19 08:43:21 · 564 阅读 · 0 评论 -
加载静态链接库lib
需要引入两个文件,如下所示#include "FRI_Reader.h" #pragma comment(lib,"FRI_Reader.lib")原创 2020-08-17 08:58:47 · 91 阅读 · 0 评论 -
自动获取组合框中的内容
pReader = (LPTSTR)mszReaders;while (*pReader != '\0'){ if (nReaders < 2) //使用系统中前2个读卡器 pReaderName[nReaders++] = pReader; m_ComboDevice.AddString(*pReaderName); TRACE("Reader:%s\n", pReader); pReader = pReader + strlen(pReader) + 1; //下一个.原创 2020-08-12 20:04:02 · 326 阅读 · 0 评论 -
SetTimer函数的用法
SetTimer函数的用法 ,用WM_TIMER来设置定时器SetTimer这个API函数的原型UINT_PTR SetTimer( HWND hWnd, // 窗口句柄 UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器 UINT uElapse, // 时间间隔,单位为毫秒 TIMERPROC lpTimerFunc // 回调函数 ); SetTimer(m_hWnd,1,1000,NULL); //一个1秒触发一次的...原创 2020-08-12 19:50:56 · 7505 阅读 · 0 评论 -
MFC文本控件内容自动滚动和清除的效果
UpdateData(FALSE);m_RecInfo.LineScroll(m_RecInfo.GetLineCount());// 数据行达到20后,自动清空// 数据过多,影响接收速度,显示是最费CPU时间的操作if (m_RecInfo.GetLineCount() > 300){ m_Result.Empty(); UpdateData(FALSE);}注意:UpdateData()函数的位置,如果该函数放到最后的话,是达不到滚动到底部的效果的...原创 2020-08-12 19:51:53 · 391 阅读 · 0 评论 -
触发父对话框的事件
// 触发父对话框的事件CDMTDlg *pDlg = (CDMTDlg*)AfxGetMainWnd();pDlg->OnBnClickedSendData();原创 2020-07-21 20:03:40 · 83 阅读 · 0 评论 -
MFC 读取ini文件中的数据,并将之显示
GetPrivateProfileString(LPCTSTR lpAppName, //配置文件的section名LPCTSTR lpKeyName, //配置文件的key名LPCTSTR lpDefault,LPTSTR lpReturnedString,DWORD nSize,LPCTSTR lpFileName);其中各参数的意义:lpAppName: 是INI文件中的一个字段名 lpKeyName: lpAppName下的一个键名,也就是里面具体的变量名 lpDef.原创 2020-07-21 20:04:41 · 479 阅读 · 0 评论 -
定时器处理函数,定时关闭弹出的对话框
cpp文件中// 定时器处理函数,定时关闭弹出的对话框void CDMTDlg::OnTimer(UINT_PTR nIDEvent){ // TODO: 在此添加消息处理程序代码和/或调用默认值 CDialogEx::OnTimer(nIDEvent); //撤销标记 HWND hWnd = ::FindWindow(NULL, "TEST"); //根据标题,查找消息框句柄 if (hWnd) {.原创 2020-07-17 13:31:09 · 239 阅读 · 0 评论 -
设置MFC Tab控件位置
设置IDREG对话框位置CRect rect;m_Tab.GetClientRect(&rect);随着窗口的变化将视图调整到中间位置rect.top += 40;rect.bottom -= 10;rect.left += 10;rect.right -= 10;m_DmtIDDlg->MoveWindow(&rect);m_DmtIDDlg->ShowWindow(SW_SHOW);...原创 2020-07-15 08:26:48 · 415 阅读 · 0 评论 -
MFC自定义消息:实现MFC子窗口向父窗口发送消息的功能
在MFC中,使用用户自定义消息,子窗口向父窗口发送消息过程、代码:在需要接收消息的父窗口头文件(xxx.h)中增加定义,也可以在其他头文件中定义,但是要记得引入//自定义DMTIDRegDlg到主窗口的消息#define WM_MYMSG WM_USER+2 在父窗口的头文件(xxx.h)文件中,声明消息的处理函数://自定义消息的处理函数声明protected: afx_msg LRESULT InsPackMessage(WPARAM wParam, LPARAM lParam原创 2020-07-13 22:21:13 · 1569 阅读 · 1 评论 -
“const wchar_t *“ 类型的实参与 “LPCSTR“ 类型的形参不兼容
LPCSTR代表了const char *类型,它是一个指向以'\0'结尾的8位(单字节)ANSI字符数组的常量指针,而const wchar_t *类型是一个指向'\0'结尾的16位(双字节)Unicode字符数组的常量指针,因此会导致类型不匹配的编译错误。解决的办法有两个:右击“解决方案资源管理器”中的项目,“属性→配置属性→常规→项目默认值→字符集”,默认的选项是“使用多字节字符集”,将它改为使用Unicode字符集即可。这样,输入的字符串会默认以const wchar_t *格式储存。 第转载 2020-07-13 22:07:38 · 2941 阅读 · 0 评论 -
MFC LPCTSTR
转载于:SomebodyLuo的LPCTSTR和CString的关系LPCTSTR类型类型理解: L——表示long指针,这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32位操作系统中, long指针和near指针及far修饰符都是为了兼容的作用,没有实际意义。 P——表示这是一个指针 C——表示是一个常量 T——表示在Win32环境中, 有一个_T宏 STR——表示这个变量是一个字符串_T这个宏用来表示字符是否使用UNICODE,如果..转载 2020-07-13 22:02:31 · 861 阅读 · 0 评论 -
vc中m_开头的意义
一种变量命名方法-匈牙利命名法,m即member,即定义的变量为成员变量。这是一种命名规范。原创 2020-06-25 20:43:45 · 664 阅读 · 0 评论 -
VC中_T
_T("")是一个宏,作用是让你的程序支持Unicode编码 _T和_L的区别在于,_L不管你是以什么方式编译,一律以UNICODE方式保 _T是一个适配的宏,当#ifdef _UNICODE的时候_T就是L;没有#ifdef _UNICODE的时候_T就是ANSI的。...原创 2020-06-25 17:00:40 · 297 阅读 · 0 评论 -
文件对话框的分类
文件对话框的分类文件对话框分为打开文件对话框和保存文件对话框,相信大家在Windows系统中经常见到这两种文件对话框。例如,很多编辑软件像记事本等都有“打开”选项,选择“打开”后会弹出一个对话框,让我们选择要打开文件的路径,这个对话框就是打开文件对话框;除了“打开”选项一般还会有“另存为”选项,选择“另存为”后往往也会有一个对话框弹出,让我们选择保存路径,这就是保存文件对话框。 正如上面举例说明的,打开文件对话框用于选择要打开的文件的路径,保存文件对话框用来选择要保存的文件的...转载 2020-06-25 16:50:26 · 564 阅读 · 0 评论 -
MFC问题集——无法将参数 1 从“const_char ”转换为“LPCTSTR“
P178——创建关闭应用程序时使用对话框进行确认项目,出现问题:void CMFCMessageDlg::OnClose(){ // TODO: 在此添加消息处理程序代码和/或调用默认值 // 判断是否按下确定按钮 if (MessageBox("确定退出应用程序吗?", "系统提示", MB_OKCANCEL | MB_ICONQUESTION) != IDOK) return; CDialog::OnClose();}原因:软件默认的"使用 Unicode 字符集"原创 2020-06-25 14:30:43 · 1380 阅读 · 0 评论 -
Debug Assertion Failed! f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\dlgdata.cpp
按照下面操作目前不知原因为何未完待续原创 2020-07-04 16:12:54 · 629 阅读 · 1 评论 -
MFC:GetDlgItem
GetDlgItem 根据一个对话窗或一个控件的ID, 返回一个指向这个对话窗或控件的对象的指针原创 2020-07-04 15:19:02 · 2740 阅读 · 0 评论 -
变量向导添加控件变量Control类别和Value类别差别
Control类别:控件的实例 Value类别:与控件绑定的值每个控件最多只能有一个Value型和一个Control型的成员变量,前者代表着控件的值,而后者代表着控件本身如果只想设置或获取控件内部存储的值,选择添加一个Value型的变量;如果想在运行时对控件的各种属性进行控制,那么选择添加一个Control型的变量。常见的Value型变量有int、UINT、long、DWORD、float、double、BYTE、short、BOOL、CString、CTime、COleDateTime和C..转载 2020-07-04 13:45:57 · 545 阅读 · 0 评论 -
fopen_s打开文件
fopen_s函数声明errno_t fopen_s ( FILE** pFile, const char *filename, const char *mode );FILE** pFile:声明一个二级指针 fopen函数的返回值就是FILE** pFileTIP:如果p是一个指向FILE类型数据的指针,&p就是指向FILE类型数据的指针的地址,即<指向FILE类型数据的指针变量>的指针。fopen_s函数的返回值与fopen不同,.转载 2020-07-02 20:13:38 · 2049 阅读 · 0 评论 -
MFC基于VC6.0自定义消息
自定义一个消息在头文件中声明消息的处理函数为消息添加宏映射添加消息的实现部分添加消息的触发事件:通过message()发送消息原创 2020-06-30 21:27:18 · 208 阅读 · 0 评论 -
为什么要给控件关联成员变量
目的是为了方便操作,比如,给按钮控件关联成员变量m_button,如果你想改变该变量对应按钮上的文字,可以m_button.SetWindowText("新文字"); 如果不关联,需要Cbutton *p=(Cbutton*)GetDlgItem("按钮控件ID");p->SetWindowText("新文字") ...转载 2020-06-28 20:55:45 · 243 阅读 · 0 评论 -
DX_TEXT()与DDX_Control()
DX_TEXT()可以认为是把字符串变量和控件的内容关联起来; DDX_Control()可以认为是把变量和控件本身关联起来; DoDataExchange(pDX)就是处理所有变量与其关联控件交换数据的函数。DDX_TEXT()数据交换过程:UpdateData(TRUE);//将控件的内容传回 m_strName;m_strName = _T("关联变量");//修改值UpdateData(FALSE);//将m_strName的值显示到控件DDX_Control()数据交换过程:..转载 2020-06-28 20:47:23 · 194 阅读 · 0 评论 -
MFC 静态文本控件——通过函数显示文本
首先为静态文本控件关联一个CStatic类型的变量,然后通过该变量调用SetWindowText()函数CDialogEx::DoDataExchange(pDX);DDX_Control(pDX, IDC_TEXT, m_text);上面两行代码将静态文本控件与m_text进行绑定通过SetWindowText()函数设置void CMFCStaticTextDlg::DoDataExchange(CDataExchange* pDX){ CDialogEx::DoDataE..原创 2020-06-27 22:09:03 · 749 阅读 · 0 评论