⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 按钮控制.htm

📁 VC的一些技巧性文档
💻 HTM
字号:
<html><style type="text/css"><!--.p9 {  font-family: "宋体"; font-size: 9pt}a        {text-transform: none; text-decoration: none;}a:hover {text-decoration: underline; color: #FF0000;}--></style><body background="di2001.jpg"><h3 align="center"><font COLOR="#AOAO99">按钮控制</font></h3><table width="100%"><tr><td><font color="0000FF"><a name="1">如何一个创建三态下压按钮 </a></font></td></tr><tr><td><p></Br>可以使用新的BS_PUSHBUTTON 风格位和检测框以及按钮来创建一个三态下压按钮。这很容易,只需将检测框和按钮拖拉到对话中并指定属性Push—like即可。不用任何附加程序就可以成为三态下压按钮。<Br></Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="2">改变Push Button背景色<Br>闻怡洋</a></font></td></tr><tr><td><p></Br>在Windows中Edit,StaticBox的背景色都可以通过处理WM_CTLCOLOR消息来改变,但Push Button却不行。<Br></Br>唯一的方法是使用OwnerDraw风格的按钮。本文讲述的方法是使用CButton的派生类。<Br></Br>class CCButton : public CButton<Br>{<Br>DECLARE_DYNAMIC(CCButton)<Br>public:<Br>&nbsp;&nbsp;&nbsp;&nbsp;CCButton();<Br>&nbsp;&nbsp;&nbsp;&nbsp;virtual ~CCButton();<Br>&nbsp;&nbsp;&nbsp;&nbsp;BOOL CCButton::Attach(const UINT nID, CWnd* pParent)<Br></Br>protected:<Br>&nbsp;&nbsp;&nbsp;&nbsp;virtual void DrawItem(LPDRAWITEMSTRUCT lpDIS);//必需重载的函数<Br></Br>public:<Br>&nbsp;&nbsp;&nbsp;&nbsp;COLORREF m_fg, m_bg, m_disabled_fg, m_disabled_bg;//四种颜色分别为文字,背景,失效时文字,失效时背景<Br>};<Br></Br></Br>实现DrawItem<Br></Br>void CCButton::DrawItem(LPDRAWITEMSTRUCT lpDIS)<Br>{<Br>&nbsp;&nbsp;&nbsp;&nbsp;CDC* pDC = CDC::FromHandle(lpDIS->hDC);//???????DC<Br></Br>&nbsp;&nbsp;&nbsp;&nbsp;UINT state = lpDIS->itemState; //得到状态<Br>&nbsp;&nbsp;&nbsp;&nbsp;CRect focusRect, btnRect;//两个矩形,表示得当输入焦点时的虚线矩形和按钮矩形<Br>&nbsp;&nbsp;&nbsp;&nbsp;focusRect.CopyRect(&lpDIS->rcItem);<Br>&nbsp;&nbsp;&nbsp;&nbsp;btnRect.CopyRect(&lpDIS->rcItem);<Br></Br>&nbsp;&nbsp;&nbsp;&nbsp;//<Br>&nbsp;&nbsp;&nbsp;&nbsp;//调整虚线矩形<Br>&nbsp;&nbsp;&nbsp;&nbsp;//<Br>&nbsp;&nbsp;&nbsp;&nbsp;focusRect.left += 4;<Br>&nbsp;&nbsp;&nbsp;focusRect.right -= 4;<Br>&nbsp;&nbsp;&nbsp;focusRect.top += 4;<Br>&nbsp;&nbsp;&nbsp;focusRect.bottom -= 4;<Br></Br>&nbsp;&nbsp;&nbsp;&nbsp;//<Br>&nbsp;&nbsp;&nbsp;&nbsp;// 得当Button上文字<Br>&nbsp;&nbsp;&nbsp;&nbsp;//<Br>&nbsp;&nbsp;&nbsp;const int bufSize = 512;<Br>&nbsp;&nbsp;&nbsp;TCHAR buffer[bufSize];<Br>&nbsp;&nbsp;&nbsp;GetWindowText(buffer, bufSize);<Br></Br>&nbsp;&nbsp;&nbsp;// 使用m_fg, m_bg颜色利用 Draw3dRect(...)绘制按钮边框<Br></Br>&nbsp;&nbsp;&nbsp;// FillRect(...)填充按钮内部<Br></Br>&nbsp;&nbsp;&nbsp;// DrawText(...)绘制文字<Br></Br>&nbsp;&nbsp;&nbsp;&nbsp;//根据当前状态调整显示<Br>&nbsp;&nbsp;&nbsp;&nbsp;//<Br>&nbsp;&nbsp;&nbsp;&nbsp;if (state & ODS_FOCUS) {<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.........//得到输入焦点,通过focusRect画虚线<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (state & ODS_SELECTED){<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.....// 被按下,绘制下陷边框<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<Br>&nbsp;&nbsp;&nbsp;&nbsp;}<Br>&nbsp;&nbsp;&nbsp;&nbsp;else if (state & ODS_DISABLED) {<Br>&nbsp;&nbsp;&nbsp;&nbsp;//失效,通过m_disabled_fg, m_disabled_bg 重绘按钮内部<Br>&nbsp;&nbsp;&nbsp;&nbsp;}<Br>}<Br></Br></Br>CCButton是CButton派生类,具有CButton的全部成员函数,但在创建时需要使用BS_OWNERDRAW风格。<Br></Br>如果按钮不是动态生成,使用Attach函数使CCButton代替原来按钮的窗口过程。<Br></Br>BOOL CCButton::Attach(const UINT nID, CWnd* pParent)<Br>{<Br>&nbsp;&nbsp;&nbsp;&nbsp;GetDlgItem(nID)->ModifyStyle(0,BS_OWNERDRAW,0);<Br></Br>&nbsp;&nbsp;&nbsp;&nbsp;if (!SubclassDlgItem(nID, pParent))<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<Br></Br>&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;<Br>}<Br></Br>如在一对话框的InitDialog(...)中加入下面几行<Br></Br>{// 假定 m_cbBtn为成员变量 IDC_BUTTON1为一按钮ID值<Br></Br>&nbsp;&nbsp;&nbsp;m_cbBtn.Attach(IDC_BUTTON1,this);<Br></Br>}<Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="3">如何用位图显示下压按钮 </a></font></td></tr><tr><td><p></Br>Windows 95按钮有几处新的创建风格,尤其是BS_BITMAP和BS_ICON,要想具有位图按钮,创建按钮和调用CButton : : SetBitmap或CButton : : SetIcon时要指定BS_BITMAP或BS_ICON风格。<Br></Br>首先,设置按钮的图标属性。<Br></Br>然后,当对话初始化时调用CButton: : SetIcon。注意:下例用图标代替位图,使用位图时要小心,因为不知道背景所有的颜色——并非每个人都使用浅灰色。<Br></Br>BOOL CSampleDlg : : OnInitDialog ( )<Br></Br>{<Br></Br>CDialog : : OnInitDialog ( ) ;<Br></Br>//set the images for the push buttons .<Br></Br>m_wndButton1.SetIcon (AfxGetApp ( ) —> LoadIcon (IDI _ IPTION1) )<Br></Br>m_wndButton2.SetIcon (AfxGetApp ( ) —> LoadIcon (IDI _ IPTION2) )<Br></Br>m_wndButton3.SetIcon (AfxGetApp ( ) —> LoadIcon (IDI _ IPTION3) )<Br></Br>return TRUE ;<Br></Br>}<Br></Br></p></td></tr></table><p align="center"><img src="/logo.gif" align="center"><a href="/co/index.htm">北京美达美科技有限公司</a> 版权所有: 1998-1999</a></p></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -