随笔分类 -  MFC

摘要:>忽然无聊的想给自己写的程序保存的文件使用自己的名字简写作为后缀,于是有了下文。---####IDR_MAINFRAME格式介绍IDR_MAINFRAME字符串资源中包含7个子串,分别以/n结束,即如下格式:`/n/n/n/n/n/n/n`1. CDocTemplate::windowTitle,主... 阅读全文
posted @ 2014-12-02 16:15 Sky_Watcher 阅读(880) 评论(0) 推荐(0)
摘要:方法1: 将出问题的CPP文件用系统记事本notepad打开,然后另存时选择unicode编码保存,覆盖掉原来的文件即可。一般这种方法一般会解决VS断点无法设定的80%问题。没有办法才请出第2种方法。方法2: Tools->Option->debugging->General 找到 Require ... 阅读全文
posted @ 2014-08-05 04:03 Sky_Watcher 阅读(1054) 评论(0) 推荐(0)
摘要:想要实现长按键的一些控制,查了查可以通过捕获键盘事件,然后处理按键时需要进行的操作。下面简单的实现左右按键界面更新数值加减。1. 重载PreTranslateMessage(MSG*pMsg)函数,在函数中捕获键盘事件并处理响应:BOOL CEditTestDlg::PreTranslateMess... 阅读全文
posted @ 2014-05-24 16:50 Sky_Watcher 阅读(7713) 评论(0) 推荐(0)
摘要:记得以前写对话框时,按钮直接有一个tips属性,可以添加默认值,不记得是C#还是啥了,今天忽然想给几个按钮添加提示信息,就捣鼓了一下。头文件中创建CToolTipCtrl变量,然后在初始化时激活使用:CToolTipCtrl m_iToolTips;BOOL CTestDXFDlg::OnInitD... 阅读全文
posted @ 2014-03-06 22:16 Sky_Watcher 阅读(3978) 评论(0) 推荐(0)
摘要:1.更新窗口即采用UpdateWindow()函数立即发送WM_PAINT消息更新整个窗口。void CEditTestDlg::OnBnClickedBtnSysUpdate(){ CString csTmp; int i = 0; while (i SetTimer(1,1,NULL); this->SetTimer(2,1,NULL);}定时器内部处理:void CEditTestDlg::OnTimer(UINT_PTR nIDEvent){ switch (nIDEvent) { case 1: if (tmp >= 100) ... 阅读全文
posted @ 2014-02-27 20:36 Sky_Watcher 阅读(24447) 评论(0) 推荐(1)
摘要:1. 重绘消息当需要更新或者重绘窗口时,一般系统会发出两个消息WM_PAINT(通知客户区有变化)和WM_NCPAINT(通知非客户区有变化)WM_NCPAINT系统会自己搞定WM_PAINT消息对应的函数是OnPaint(),它是系统默认的接受WM_PAINT消息的函数,但我们一般在程序中做重绘时都在OnDraw函数中进行的,因为在ONPAIN函数中调用了ONDRAW函数。///CView默认的标准的重画函数void CView::OnPaint(){ CPaintDC dc(this); OnPreparDC(&dc); OnDraw(&dc); //调用了OnDraw}2 阅读全文
posted @ 2014-02-25 21:43 Sky_Watcher 阅读(10911) 评论(0) 推荐(0)
摘要:WPARAM 和 LPARAM wParam和lParam 这两个是Win16系统遗留下来的产物,在Win16API中WndProc有两个参数:一个是WORD类型的16位整型变量;另一个是LONG类型的32位整型变量。因此根据匈牙利命名法,16位的变量就被命名为wParam, 32位的变量就被命名为lParam。 而到了Win32API中,原来的16位变量也被扩展为32位,因此此时wParam和lParam的大小完全相同。 区别及习惯用法: MS在使用时两种参数分别代表不同的含义和内容,WPARAM常常代表一些控件的ID或者高位低位组合起来分别表示鼠标的位置,如果消息的发送者需要将某种... 阅读全文
posted @ 2014-01-05 20:27 Sky_Watcher 阅读(6762) 评论(0) 推荐(1)
摘要:由于MFC中无法通过类向导来自定义消息,所以需要手动添加,主要过程如下:本文基于vs2008下通过线程实现数据实时更新的对话框运用程序1. 定义消息(Resource.h文件中):由于很多新控件也会用到WM_USER消息,所以定义WM_USER+100或更高,避免冲突#define WM_UPD... 阅读全文
posted @ 2014-01-05 19:18 Sky_Watcher 阅读(11902) 评论(0) 推荐(0)
摘要:在尝试线程更新界面时,在线程中调用UpdateData(FALSE)后出现如下错误:原因: MFC对象不支持多线程操作,不能供多个线程进程使用。子线程调用pDlg-> UpdateData(FALSE)时主线程(界面线程)会阻塞,更新必须由它完成,这样就形成死锁。UpdateData()函数属于CDialog类的保护成员函数,在工作线程中不能使用UpdateData来更新主线程中的数据。更改界面的操作最好用主线程(界面线程),要想在子线程(工作线程)里执行界面线程的操作,可以通过向主线程发送消息来解决。解决办法:1. 创建线程时使用AfxBeginThread创建CWinThread继承 阅读全文
posted @ 2014-01-05 17:08 Sky_Watcher 阅读(4218) 评论(0) 推荐(1)