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

📄 subject_24470.htm

📁 一些关于vc的问答
💻 HTM
字号:
<p>
序号:24470 发表者:intern99 发表日期:2002-12-12 22:25:06
<br>主题:改变button的颜色,请指点!
<br>内容:HBRUSH CDvrappDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) <BR>{<BR>&nbsp;&nbsp; HBRUSH hbr=CDialog::OnCtlColor(pDC, pWnd, nCtlColor);<BR>&nbsp;&nbsp;&nbsp;&nbsp; if(nCtlColor==CTLCOLOR_BTN)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;SetBkMode(TRANSPARENT);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;SetTextColor(RGB(255,5,25));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return m_hbrush;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp; if(nCtlColor==CTLCOLOR_LISTBOX)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pDC-&gt;SetBkMode(TRANSPARENT);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pDC-&gt;SetTextColor(RGB(255,5,25));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return m_hbrush;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return hbr;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>}<BR>可以改变listbox的颜色,但不能改变button的颜色。为什么?<BR><BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:tjhe 回复日期:2002-12-12 23:26:27
<br>内容:<BR>以下是一篇闻怡洋先生的作品,从vckbase上转载,在本站怎么没找到?<BR>先参考一下:<BR><BR><BR><BR>改变Push Button背景色&nbsp;&nbsp;<BR>闻怡洋&nbsp;&nbsp;<BR><BR>--------------------------------------------------------------------------------<BR> <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-&gt;hDC);//???????DC<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;UINT state = lpDIS-&gt;itemState; //得到状态<BR>&nbsp;&nbsp;&nbsp;&nbsp;CRect focusRect, btnRect;//两个矩形,表示得当输入焦点时的虚线矩形和按钮矩形&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;focusRect.CopyRect(&amp;lpDIS-&gt;rcItem); <BR>&nbsp;&nbsp;&nbsp;&nbsp;btnRect.CopyRect(&amp;lpDIS-&gt;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; focusRect.right -= 4;<BR>&nbsp;&nbsp; focusRect.top += 4;<BR>&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; const int bufSize = 512;<BR>&nbsp;&nbsp; TCHAR buffer[bufSize];<BR>&nbsp;&nbsp; GetWindowText(buffer, bufSize);<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp; // 使用m_fg, m_bg颜色利用 Draw3dRect(...)绘制按钮边框<BR><BR>&nbsp;&nbsp; // FillRect(...)填充按钮内部<BR><BR>&nbsp;&nbsp; // DrawText(...)绘制文字<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;//根据当前状态调整显示<BR>&nbsp;&nbsp;&nbsp;&nbsp;//<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (state &amp; ODS_FOCUS) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.........//得到输入焦点,通过focusRect画虚线<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (state &amp; 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 &amp; 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)-&gt;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; m_cbBtn.Attach(IDC_BUTTON1,this);<BR><BR>} <BR> <BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

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