📄 按钮控制.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> CCButton();<Br> virtual ~CCButton();<Br> BOOL CCButton::Attach(const UINT nID, CWnd* pParent)<Br></Br>protected:<Br> virtual void DrawItem(LPDRAWITEMSTRUCT lpDIS);//必需重载的函数<Br></Br>public:<Br> 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> CDC* pDC = CDC::FromHandle(lpDIS->hDC);//???????DC<Br></Br> UINT state = lpDIS->itemState; //得到状态<Br> CRect focusRect, btnRect;//两个矩形,表示得当输入焦点时的虚线矩形和按钮矩形<Br> focusRect.CopyRect(&lpDIS->rcItem);<Br> btnRect.CopyRect(&lpDIS->rcItem);<Br></Br> //<Br> //调整虚线矩形<Br> //<Br> focusRect.left += 4;<Br> focusRect.right -= 4;<Br> focusRect.top += 4;<Br> focusRect.bottom -= 4;<Br></Br> //<Br> // 得当Button上文字<Br> //<Br> const int bufSize = 512;<Br> TCHAR buffer[bufSize];<Br> GetWindowText(buffer, bufSize);<Br></Br> // 使用m_fg, m_bg颜色利用 Draw3dRect(...)绘制按钮边框<Br></Br> // FillRect(...)填充按钮内部<Br></Br> // DrawText(...)绘制文字<Br></Br> //根据当前状态调整显示<Br> //<Br> if (state & ODS_FOCUS) {<Br> .........//得到输入焦点,通过focusRect画虚线<Br> if (state & ODS_SELECTED){<Br> .....// 被按下,绘制下陷边框<Br> }<Br> }<Br> else if (state & ODS_DISABLED) {<Br> //失效,通过m_disabled_fg, m_disabled_bg 重绘按钮内部<Br> }<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> GetDlgItem(nID)->ModifyStyle(0,BS_OWNERDRAW,0);<Br></Br> if (!SubclassDlgItem(nID, pParent))<Br> return FALSE;<Br></Br> return TRUE;<Br>}<Br></Br>如在一对话框的InitDialog(...)中加入下面几行<Br></Br>{// 假定 m_cbBtn为成员变量 IDC_BUTTON1为一按钮ID值<Br></Br> 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 + -