vc++工作笔记1
2007-10-12 18:06
176 查看
1) 透明位图按钮
在对话框上添加一个按钮,定义按钮的风格为BS_OWNERDRAW(自画风格),添加一个按钮类继承于CButton,重载虚函数virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);这个函数的作用就是在改变按钮。可以变成ICON,也可以变成位图,要想改变按钮的背景还必须执行消息WM_ ERASEBKGND的消息函数OnEraseBkgnd(CDC* pDC),在此函数设备内显示图片。
2) 嵌套窗体的实现
嵌套窗体可以使两个窗体分开来写各自的功能,然后把这两个窗体融合在第三个窗体内,可以使功能开发更加清晰。首先这两个窗体必需是第三个窗体的成员变量,即在第三个窗体类中定义这两个窗体类的成员,如
CDialogue1 m_cDialogue1;
CDialogue1 m_cDialogue2;
在初始化对话框时或着在你要添加窗体的函数中实现一下代码:
//添加第一个窗体
m_cDialogue1.Create(IDD_DIALOG1,this);//创建窗体
m_cDialogue1.MoveWindow(nPosX1,nPosY1,nWidth,nHeight,TRUE);//定位窗体
m_cDialogue1.ShowWindow(SW_SHOW);//显示窗体
//添加第二个窗体
m_cDialogue2.Create(IDD_DIALOG2,this);//创建窗体
m_cDialogue2.MoveWindow(nPosX2,nPosY2,nWidth,nHeight,TRUE);//定位窗体
m_cDialogue2.ShowWindow(SW_SHOW);//显示窗体
即可实现嵌套窗体
3) 在对话框窗体上打印文字
在对话框窗体上显示文字,在实现WM_PAINT消息的OnPaint()函数中实现一下类似的代码:
CClientDC dc1(this);/定义客户区域显示设备
CFont mFont;//定义一个类字体变量
dc1.SetTextColor(crColor);//设置字体的颜色
dc1.SetBkMode(TRANSPARENT);//设置显示文字的背景透明
VERIFY(mFont.CreateFont(
30, 30, 0, 0, FW_HEAVY, false, FALSE,
0, ANSI_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH | FF_SWISS, "宋体"));//创建字体的大小30X30,宋体,不是斜体
CFont * pOldFont;
pOldFont = dc1.SelectObject( &mFont );//把文字载入设备
dc1.TextOut(0,30,szNum);//打印文字
UpdateWindow();
在视频上不断的显示数字,视频会不断的更新窗体,导致最开始打印的在对话框上数字被视频更新,如何让视频上不断的显示数字,一个最简单的方法就是定义一个定时器把上述过程写在一个函数里,定时器不断地调用这个函数,但是这样也有缺点,就是当定时器很多时,定时器执行很多函数,导致这个过程变慢,字体在视频上显示就是不断闪烁,定时器内执行的程序很少时,就看不出来闪烁。
4)在视频上添加按钮
直接在视频中添加按钮,视频会不断的更新窗体,导致按钮会被更新的视频隐埋,如何在视频上一直显示按钮,人工实现控件的更新,如下代码:
CButton m_Button;//定义一个按钮成员
m_Button.GetClientRect(rect);//获得按钮的客户区域
m_Button.InvalidateRect(rect,true);//更新按钮
但是执行一次的话,按钮还是会只出现一次,最简单的方法还是把此过程写在定时器中,不断的执行按钮更新,还是一样的问题如果定时器内执行的过程过多的话,按钮会出现闪烁的现象,所以不要在定时器里写太多的执行过程。
在对话框上添加一个按钮,定义按钮的风格为BS_OWNERDRAW(自画风格),添加一个按钮类继承于CButton,重载虚函数virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);这个函数的作用就是在改变按钮。可以变成ICON,也可以变成位图,要想改变按钮的背景还必须执行消息WM_ ERASEBKGND的消息函数OnEraseBkgnd(CDC* pDC),在此函数设备内显示图片。
2) 嵌套窗体的实现
嵌套窗体可以使两个窗体分开来写各自的功能,然后把这两个窗体融合在第三个窗体内,可以使功能开发更加清晰。首先这两个窗体必需是第三个窗体的成员变量,即在第三个窗体类中定义这两个窗体类的成员,如
CDialogue1 m_cDialogue1;
CDialogue1 m_cDialogue2;
在初始化对话框时或着在你要添加窗体的函数中实现一下代码:
//添加第一个窗体
m_cDialogue1.Create(IDD_DIALOG1,this);//创建窗体
m_cDialogue1.MoveWindow(nPosX1,nPosY1,nWidth,nHeight,TRUE);//定位窗体
m_cDialogue1.ShowWindow(SW_SHOW);//显示窗体
//添加第二个窗体
m_cDialogue2.Create(IDD_DIALOG2,this);//创建窗体
m_cDialogue2.MoveWindow(nPosX2,nPosY2,nWidth,nHeight,TRUE);//定位窗体
m_cDialogue2.ShowWindow(SW_SHOW);//显示窗体
即可实现嵌套窗体
3) 在对话框窗体上打印文字
在对话框窗体上显示文字,在实现WM_PAINT消息的OnPaint()函数中实现一下类似的代码:
CClientDC dc1(this);/定义客户区域显示设备
CFont mFont;//定义一个类字体变量
dc1.SetTextColor(crColor);//设置字体的颜色
dc1.SetBkMode(TRANSPARENT);//设置显示文字的背景透明
VERIFY(mFont.CreateFont(
30, 30, 0, 0, FW_HEAVY, false, FALSE,
0, ANSI_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH | FF_SWISS, "宋体"));//创建字体的大小30X30,宋体,不是斜体
CFont * pOldFont;
pOldFont = dc1.SelectObject( &mFont );//把文字载入设备
dc1.TextOut(0,30,szNum);//打印文字
UpdateWindow();
在视频上不断的显示数字,视频会不断的更新窗体,导致最开始打印的在对话框上数字被视频更新,如何让视频上不断的显示数字,一个最简单的方法就是定义一个定时器把上述过程写在一个函数里,定时器不断地调用这个函数,但是这样也有缺点,就是当定时器很多时,定时器执行很多函数,导致这个过程变慢,字体在视频上显示就是不断闪烁,定时器内执行的程序很少时,就看不出来闪烁。
4)在视频上添加按钮
直接在视频中添加按钮,视频会不断的更新窗体,导致按钮会被更新的视频隐埋,如何在视频上一直显示按钮,人工实现控件的更新,如下代码:
CButton m_Button;//定义一个按钮成员
m_Button.GetClientRect(rect);//获得按钮的客户区域
m_Button.InvalidateRect(rect,true);//更新按钮
但是执行一次的话,按钮还是会只出现一次,最简单的方法还是把此过程写在定时器中,不断的执行按钮更新,还是一样的问题如果定时器内执行的过程过多的话,按钮会出现闪烁的现象,所以不要在定时器里写太多的执行过程。
相关文章推荐
- OpenCV学习笔记(6)基于 VC+OpenCV+DirectShow 的多个摄像头同步工作
- 工作准备笔记一
- volatile的工作机制代码测试之socket学习笔记
- 1_2年VC++工作经验的人,有机会进入微软工作,报名啦~~
- 【MoreWindows工作笔记3】 使用cout/pintf输出16进制,8进制,2进制数据
- vc++ 笔记--串行通信与重叠I/O
- [国嵌笔记][030][U-Boot工作流程分析]
- 【工作笔记】工具类方法--时间相关
- VC++孙鑫-学习笔记-第一章-Windows程序的运行机制
- UC_GUI LISTBOX列表控件工作学习笔记
- 孙鑫VC++讲座笔记-(5)文本编程
- 七月工作笔记 7.7 - 7.11
- 【工作笔记】大端与小端
- VC++ 笔记
- 【工作笔记】ElasticSearch从零开始学(三)—— 入门(聚合)
- 四月份最后一周工作笔记总结
- 孙鑫VC++讲座笔记-(2)C++
- 国内几大互联网公司提供的云主机云应用简单对比(工作笔记)
- 工作笔记
- vc学习笔记之active控件