1.在对话框文档中定义两个定时器,每间隔5秒弹出一个消息框提示“定时器1”,每隔5秒弹出一个消息框提示“定时器2”

UINT ID_TIMER1 = 1 , ID_TIMER2 = 2;   //设置id

BOOL CKongjianDlg::OnInitDialog()
{
  CDialog::OnInitDialog();

  SetTimer(ID_TIMER1,5000,0);

  SetTimer(ID_TIMER2,5000,0);

  return TRUE; // return TRUE unless you set the focus to a control
}

在resourceView中先定义好窗口的定时器消息队列

void CKongjianDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
  switch(nIDEvent)
  {
  case ID_TIMER1:
  {
  AfxMessageBox("定时器1");
  break;
  }
  case ID_TIMER2:
  {
  AfxMessageBox("定时器2");
  break;
  }
  default:
  break;
  }
CDialog::OnTimer(nIDEvent);
}

关闭定时器:在析构函数中

  KillTimer(ID_TIMER1);

  KillTimer(ID_TIMER2);

2.

问:VC++ 6.0中,我把那个显示控件的小窗口关掉了,现在不知道怎么能让其显示出来了,我现在想添加一个按钮都不知道怎么加了。
答:
在工具栏右击,把控件的钩打上

3.常见的MFC消息映射宏说明

  1、DECLARE_MESSAGE_MAP:在头文件中声明源文件中所含有的消息映射 
  2, BEGIN_MESSAGE_MAP:标记源文件消息映射的开始 
  3,END_MESSAGE_MA:标记源文件消息映射的结束 
  4,ON_COMMAND:将特定命令的处理委派给类的一个成员函数 
  5,ON_CONTROL:映射一个函数到一个定制控制通知消息,该定制消息是 
  从一个控制发送父窗口的消息 
  6,ON_CONTROL_REFLECT:映射一个父窗口反射回控制的通知消息 
  7,ON_CONTROL_RANGE:将一个控制ID的范围映射到一个消息处理函数 
  8,ON_MESSAGE:将一个用户自定义消息映射到一消息处理函数 
  9,ON_NOTIFY:映射一个控制消息到一个函数 
  10,ON_NOTIFY_RANGE:映射一个控制ID范围内的控制消息到一个函数 
  11,ON_NOTIFY_EX:映射一个控制消息到一个函数,该成员函数返回FALSE或TRUE来表明通知是否应被传送到一下对象以进行其他反应 
  12,ON_NOTIFY_EX_RANGE:映射一个控制ID范围内的消息到一个函数,该成员函数返回FALSE或TRUE来表明通知是否应被传送到一下对象以进行其他反应 
  13,ON_NOTIFY_REFLECT:映射一个控制消息到一个函数,该消息将会被控制的父窗口反射回来 
  14,ON_REGISTERED_MESSAGE:映射一个惟一的消息到一个将处理该注册消息的函数上.该消息是由RegisterWindowMessage()函数注册的 
  15,ON_UPDATE_COMMAND_UI:映射一个函数来处理用户接口更新命令消息 
  16,ON_UPDATE_COMMAND_UI_RANGE:映射一个命令ID的范围到一个更新消息处理函数

4.WinIO初始化失败

WinIO是一个能够打开一些操作系统IO特权操作的一个库,简单的来说它加载了一些驱动。通过加载的驱动可以直接的访问端口。在工控上,我们可以利用这个库直接操作IO卡的地址。例如我最近在做的一个数控钻铣床的IO卡和运动控制卡就是很老的一个卡,在WIN98下面工作很正常,但是在NT核心上就会出现非法指令调用的问题。这些非法指令来自于底层对IO卡和运动控制卡的直接地址访问。在98时代,这些操作都没有受到保护的,在NT核心下就会出现保护问题。经试验,经过WinIO初始化载入驱动以后再进行IO卡直接访问,很成功。但应用的时候,就出现了一些莫名其妙的问题。应用WinIO只需要调用两个函数InitializeWinIo(),和最后的ShutdownWinIo()即可。InitializeWinIo()将会返回一个bool值指示初始化结果。就是这个函数造成了许多困扰。第一次困扰是在一次调试中,经常初始化失败,一旦成功以后就总是成功的。刚开始以为是InitializeWinIo()以后没有ShutdownWinIoI()造成的,后来看了WinIO的C Example证明只写InitializeWinIo()一样能够进程一旦结束,由InitializeWinIo初始化的资源自然就结束了。所以不存在上次运行影响这次运行的事情。后来突然发现,WinIO相关的dll,vxd,sys竟然是绿色的。绿色在WindowsXP系统里面代表了文件是被EFS加密的。我为了工程的保密,把所有的工程目录都进行了EFS加密。EFS加密会影响磁盘性能,原因就在于其加解密过程。但是这里很奇怪,可能是间歇性的EFS解密速度没有跟上WinIO中加载驱动的速度,造成读取的sys和vxd设备驱动是混乱的,最终导致加载失败。将EFS加密取消,问题解决。第二次困找在我用C#写了一个dllimport,然后进行调用,结果,总是返回false。很疑惑,WinIO相关的文件都放到一起的,怎么还是这样的呢?VS2005单元测试里也会失败。究其原因还是路径的问题造成。

分析WinIO的源代码,可以发现InitializeWinIo()会调用一个GetDriverPath这个函数: 
bool GetDriverPath() 

PSTR pszSlash; 
if (!GetModuleFileName(GetModuleHandle(NULL), szWinIoDriverPath, sizeof(szWinIoDriverPath))) return false; 
pszSlash = strrchr(szWinIoDriverPath, ‘\\’); 
if (pszSlash) pszSlash[1] = 0; 
else return false; 
strcat(szWinIoDriverPath, “winio.sys”);
 return true; }

这里面已经很清楚的知道了什么情况下会false了。注意winio.sys存放的位置问题就能使之初始化正常。其实还可以更加详细的打印出InitializeWinIo()中每步的执行过程,这样更容易判断是哪个地方出现了问题。就先写到这里吧,WinIO是个很好很强大,很黄很暴力的一个库~~~

网上的回答:
    1.将WinIo.dll,WinIo.sys,WINIO.VXD 文件放到程序目录。
    2.将WinIo.dll,WinIo.sys,WINIO.VXD 文件放到VC98目录下。
    但是我已经正确复制了所有文件,仍然无法正确初始化。经过一番摸索终于可以正常初始化了,现将我的方法放出。
  3.设置项目属性 -> C/C++ -> 预编译头 -> 不使用预编译头。

5.看门狗

看门狗,又叫 watchdog timer,是一个定时器电路, 一般有一个输入,叫喂狗,一个输出到MCU的RST端,MCU正常工作的时候,每隔一端时间输出一个信号到喂狗端,给 WDT 清零,如果超过规定的时间不喂狗,(一般在程序跑飞时),WDT 定时超过,就回给出一个复位信号到MCU,是MCU复位. 防止MCU死机. 看门狗的作用就是防止程序发生死循环,或者说程序跑飞

6.

VC自定义消息响应的实现

第一步:定义消息。开发Windows95应用程序时,Microsoft推荐用户自定义消息至少是WM_USER+100,因为很多新控件也要使用WM_USER消息。

第二步:实现消息处理函数。该函数使用WPRAM和LPARAM参数并返回LPESULT。

LPESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
// TODO: 处理用户自定义消息
...
return 0;
}
第三步:在类头文件的AFX_MSG块中说明消息处理函数:

class CMainFrame:public CMDIFrameWnd
{
...
// 一般消息映射函数
protected:
// {{AFX_MSG(CMainFrame)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnTimer(UINT nIDEvent);
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
}
第四步:在用户类的消息块中,使用ON_MESSAGE宏指令将消息映射到消息处理函数中。

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_WM_TIMER()
ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

如果用户需要一个整个系统唯一的消息,可以调用SDK函数RegisterWindowMessage并使用ON_REGISTER_MESSAGE宏指令取代ON_MESSAGE宏指令,其余步骤同上。

MFC笔记1的更多相关文章

  1. MFC笔记

    一.Win32基本程序概念 所有的windows程序都必须载入windows.h MFC程序都有一个Stdafx.h文件,它载入了MFC框架必须的文件. Windows程序以消息为基础,以事件驱动之. ...

  2. MFC笔记10

    1. CDC MemDC1; MemDC1.SetBkMode(OPAQUE); 背景模式,VC6下面有三种:/* Background Modes */#define TRANSPARENT 1// ...

  3. MFC笔记7

    1.VS中显示行号 工具 -> 选项 -> 文本编辑器 -> C/C++ -> 行号 2.VS中调整字体大小 工具 -> 选项 -> 环境->字体和颜色 3. ...

  4. MFC笔记6

    1.MFC文件的读写操作 写操作 创建一个编辑框(IDC_INFOR_EDIT1),在里面输入信息,创建一个按钮(IDC_BUTTON),点击按钮会触发(OnBnClickedButton2()函数) ...

  5. MFC笔记5

    1.MessageBox()             引用自(http://www.douban.com/note/40199603/) 一 函数原型及参数 function MessageBox(h ...

  6. MFC笔记3

    1. C6有默认的提示代码功能,但是其默认的快捷键是Ctrl + Space,这一般情况下是切换输入法快捷键,所以,只需重新设置一下快捷键就可以实现提示代码功能,具体设置位置如下: 工具(T) -&g ...

  7. MFC笔记2

    1.Create()函数创建,该函数原型如下: BOOL Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* ...

  8. MFC笔记(DN)

    01:MFC应用程序编程 02:MFC菜单.工具栏.状态栏 03:视图窗口

  9. MFC笔记<持续更新>

    1.设置垂直滚动条的位置在末尾 SCROLLINFO si; GetScrollInfo(SB_VERT, &si, SIF_PAGE | SIF_RANGE | SIF_POS); si.f ...

随机推荐

  1. Spring MVC 学习笔记12 —— SpringMVC+Hibernate开发(1)依赖包搭建

    Spring MVC 学习笔记12 -- SpringMVC+Hibernate开发(1)依赖包搭建 用Hibernate帮助建立SpringMVC与数据库之间的联系,通过配置DAO层,Service ...

  2. 【HQL】窗口函数

    LAG LAG(col,n,DEFAULT) :与lead相反,用于统计窗口内往上第n行值.第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为NULL时候, ...

  3. 1. ip正则表达式验证

    java: private boolean IsIpAddressValidOrEmpty(String ip) { if (ip == null) return false; String temp ...

  4. Vue.js Failed to resolve filter: key

    转自:https://stackoverflow.com/questions/35835214/vue-js-failed-to-resolve-filter-key I am following t ...

  5. Collection List接口

    常用的:ArrayList,Vector 特点:有序的,允许多个空值

  6. vue格式化显示json数据

    已经是json格式数据的,直接用标签 <pre></pre>展示. 参考:https://www.jianshu.com/p/d98f58267e40

  7. vue中修改了数据但视图无法更新的情况[转载]

    我们有时候常碰到vue中明明修改了数据,但是视图无法更新,因此我总结了一点点碰到此类的情况: 1.v-for遍历的数组,当数组内容使用的是arr[0].xx =xx更改数据,vue无法监测到 数组数据 ...

  8. windows 服务管理器使用系统内置帐户时密码的输入

    windows 服务管理器使用系统内置帐户时在选择帐户如network services后不需要输入密码,直接确认即可,系统会自动附加密码.

  9. CSS 点击事件

    :active 伪类向激活(在鼠标点击与释放之间发生的事件)的元素添加特殊的样式. 这个伪类应用于处于激活状态的元素.最常见的例子就是在 HTML 文档中点击一个超链接:在鼠标按钮按下期间,这个链接是 ...

  10. HBASE小结--待续使用

    构建在HDFS之上的分布式,面向列的存储系统,使用zookeeper做协同服务,在需要实时读写和随机访问超大规模数据集的时候使用 缺点:非关系型,不支持SQL,数据类型单一(字符串,无类型),之支持单 ...