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);//
更新按钮
但是执行一次的话,按钮还是会只出现一次,最简单的方法还是把此过程写在定时器中,不断的执行按钮更新,还是一样的问题如果定时器内执行的过程过多的话
,
按钮会出现闪烁的现象,所以不要在定时器里写太多的执行过程。