首页 > 学院 > 开发设计 > 正文

MFC指示灯学习

2019-11-10 18:00:08
字体:
来源:转载
供稿:网友

操作步骤

 1、在资源编辑的时候选中按钮的 Owner draw 属性,不需要选择 Bitmap 属性.       按钮右键-->Styles-->Owner draw 2、在程序中定义一个CBitmapButton成员变量。        属性添加变量,修改变量类型为CBitmapButton 3、在资源视图中添加资源Bitmap(照片格式要为bmp) 4、初始化OnInitDialog函数中添加如下代码
BOOL b = m_btbutton.LoadBitmaps(IDB_BITMAP1,IDB_BITMAP3);   //载入照片m_btbutton.SizeToContent();  //使按钮适应图片大小  5、重载PReTranslateMessage函数,使得按键控制显示照片
BOOL CledDlg::PreTranslateMessage(MSG *pMsg){if (pMsg->message==WM_CHAR){   switch (pMsg->wParam)   {   case 'a':    if (::GetKeyState('A')<0)    {	m_btbutton.LoadBitmaps(IDB_BITMAP3);   	m_btbutton.Invalidate();//重新绘制调用者本身     //AfxMessageBox(_T("ss"));    }    break;   case 'd':    if (::GetKeyState('D')<0)    {	m_btButton2.LoadBitmaps(IDB_BITMAP4);   	m_btButton2.Invalidate();     //AfxMessageBox(_T("ss"));    }    break;   }}    return CDialog::PreTranslateMessage(pMsg);}运行之后:按下‘a’和‘d’后实现过程中解决问题:1.照片格式问题。之前png格式编译总是不通过,选用bmp格式照片解决问题。2.MSG类typedef struct tagMSG {    HWND        hwnd;    UINT        message;    WPARAM      wParam;    LPARAM      lParam;    DWord       time;    POINT       pt;} MSG
       第一个成员变量hwnd表示消息所属的窗口。我们通常开发的程序都是窗口应用程序,一个消息一般都是与某个窗口相关联的。例如,在某个活动窗口中按下鼠标左键,产生的按键消息就是发给该窗口的。在Windows程序中,用HWND类型的变量来标识窗口。  第二个成员变量message指定了消息的标识符。在Windows中,消息是由一个数值来表示的,不同的消息对应不同的数值。但是由于数值不便于记忆,所以Windows将消息对应的数值定义为WM_XXX宏(WM是Window Message的缩写)的形式,XXX对应某种消息的英文拼写的大写形式。例如,鼠标左键按下消息是WM_LBUTTONDOWN,键盘按下消息是WM_KEYDOWN,字符消息是WM_CHAR,等等。在程序中我们通常都是以WM_XXX宏的形式来使用消息的。  提示:如果想知道WM_XXX消息对应的具体数值,可以在Visual C++开发环境中选中WM_XXX,然后单击鼠标右键,在弹出菜单中选择goto definition,即可看到该宏的具体定义。跟踪或查看某个变量的定义,都可以使用这个方法。  第三、第四个成员变量wParam和lParam,用于指定消息的附加信息。例如,当我们收到一个字符消息的时候,message成员变量的值就是WM_CHAR,但用户到底输入的是什么字符,那么就由wParam和lParam来说明。wParam、lParam表示的信息随消息的不同而不同。如果想知道这两个成员变量具体表示的信息,可以在MSDN中关于某个具体消息的说明文档查看到。读者可以在VC++的开发环境中通过goto definition查看一下WPARAM和LPARAM这两种类型的定义,可以发现这两种类型实际上就是unsigned int和long。  最后两个变量分别表示消息投递到消息队列中的时间和鼠标的当前位置。 3.GetKeyState函数GetKeyState是指定虚拟键的状态的一个函数。该函数检取指定虚拟键的状态。该状态指定此键是UP状态,DOWN状态,还是被触发的(开关每次按下此键时进行切换)。例子:::GetKeyState(VK_SHIFT) > 0 没按下::GetKeyState(VK_SHIFT) < 0被按下返回值给出了给定虚拟键的状态,状态如下:若高序位为1,则键处于DOWN状态,否则为UP状态。
若低序位为1,则键被触发。例如CAPS LOCK键,被找开时将被触发。若低序位置为0,则键被关闭,且不被触发。触发键在键盘上的指示灯,当键被触发时即亮,键不被触发时即灭。备注:当给定线程从它的消息队列中读键消息时,该函数返回的键状态发生改变。该状态并不反映与硬件相关的中断级的状态。使用GetAsyncKeyState可获取这一信息。4.Invalidate();//重新绘制调用者本身参考文档:http://blog.csdn.net/akof1314/article/details/4951836/http://www.cnblogs.com/QQingmu/archive/2007/09/06/884840.htmlhttp://www.cnblogs.com/huipengkankan/archive/2011/09/21/2184479.htmlhttp://blog.sina.com.cn/s/blog_a5b3ed560101bwgm.html
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表