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

📄 chap09.html

📁 利用软件开发
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<FONT FACE="宋体" LANG="ZH-CN" SIZE=1><P ALIGN="JUSTIFY">返回</FONT><FONT SIZE=1>CRect</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=1>对象和另一矩形的并</FONT></TD>
</TR>
</TABLE>
</CENTER></P>

<FONT FACE="Arial"><P>9.1.2 </FONT><FONT FACE="黑体" LANG="ZH-CN">显示设备上下文</P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">对于在视类的</FONT><FONT SIZE=3>OnDraw</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>成员函数中使用设备上下文进行输出的这种情况,我们已经以前面讲述文档和视时给出了一些示例,因此这里就不再重复叙述,读者可以参考前面所讲述的内容。下面我们来看一下如何自己构造设备上下文,并通过该设备上下文来进行绘制。</P>
<P ALIGN="JUSTIFY">在示例程序</FONT><FONT SIZE=3>MulticlrdCaption</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中,我们通过</FONT><FONT SIZE=3>CWindowDC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>对象获得包括客户区和非客户区的显示设备上下文,然后将窗口的标题绘制为五彩的。</P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=1><P>#include &lt;afxwin.h&gt;</P>
<P>#include &lt;afxext.h&gt;</P>

<P>// 派生自己的应用程序类</P>
<P>class CMyApp : public CWinApp</P>
<P>{</P>
<P>public:</P>
<P>&#9;virtual BOOL InitInstance();</P>
<P>};</P>

<P>// 应用程序主窗口类</P>
<P>class CMyWnd : public CFrameWnd</P>
<P>{</P>
<P>protected:</P>
<P>&#9;void PaintTitleBar(BOOL bActive);</P>
<P>&#9;// 声明主窗口的消息处理函数</P>
<P>&#9;afx_msg void OnNcPaint();</P>
<P>&#9;afx_msg BOOL OnNcActivate(BOOL bActive);</P>
<P>&#9;DECLARE_MESSAGE_MAP();</P>
<P>};</P>

<P>// 初始化应用程序的实例</P>
<P>BOOL CMyApp::InitInstance()</P>
<P>{</P>
<P>&#9;// 创建应用程序主窗口</P>
<P>&#9;CMyWnd *pWnd=new CMyWnd;</P>
<P>&#9;pWnd-&gt;Create(NULL, "具有五彩标题条的窗口");</P>
<P>&#9;// 显示应用程序主窗口,并更新客户区</P>
<P>&#9;pWnd-&gt;ShowWindow(SW_SHOW);</P>
<P>&#9;pWnd-&gt;UpdateWindow();</P>
<P>&#9;m_pMainWnd=pWnd;</P>
<P>&#9;return TRUE;</P>
<P>}</P>

<P>// 声明应用程序对象</P>
<P>CMyApp MyApp;</P>

<P>// 应用程序主窗口的消息映射</P>
<P>BEGIN_MESSAGE_MAP(CMyWnd, CWnd)</P>
<P>&#9;ON_WM_NCPAINT()</P>
<P>&#9;ON_WM_NCACTIVATE()</P>
<P>END_MESSAGE_MAP()</P>

<P>// 绘制窗口的标题条,参数 bActive 代表窗口的当前激活状态</P>
<P>void CMyWnd::PaintTitleBar(BOOL bActive)</P>
<P>{</P>
<P>&#9;// 创建代表整个窗口的显示设备上下文对象</P>
<P>&#9;CWindowDC dc(this);</P>

<P>&#9;CRect rc;</P>
<P>&#9;// 获得窗口矩形及其宽度</P>
<P>&#9;GetWindowRect(rc);</P>
<P>&#9;UINT nWidth=rc.Width();</P>
<P>&#9;// 获得窗口边框的度量</P>
<P>&#9;UINT nXFrame=GetSystemMetrics(SM_CXSIZEFRAME);</P>
<P>&#9;UINT nYFrame=GetSystemMetrics(SM_CYSIZEFRAME);</P>
<P>&#9;// 获得窗口标题条的高度</P>
<P>&#9;UINT nYCaption=GetSystemMetrics(SM_CYCAPTION);</P>

<P>&#9;COLORREF cr;</P>
<P>&#9;if (bActive)</P>
<P>&#9;{</P>
<P>&#9;&#9;// 获得当窗口处于激活状态时其标题条的颜色</P>
<P>&#9;&#9;cr=GetSysColor(COLOR_ACTIVECAPTION);</P>
<P>&#9;&#9;// 按从红到绿,再到蓝的渐变规律绘制标题条</P>
<P>&#9;&#9;for (UINT j=nYFrame; j&lt;=nYFrame+nYCaption; j++)</P>
<P>&#9;&#9;{</P>
<P>&#9;&#9;&#9;for (UINT i=nXFrame; i&lt;=nWidth/2; i++)</P>
<P>&#9;&#9;&#9;{</P>
<P>&#9;&#9;&#9;&#9;UINT nLen=nWidth/2-nXFrame+1;</P>
<P>&#9;&#9;&#9;&#9;if (dc.GetPixel(i, j)==cr)</P>
<P>&#9;&#9;&#9;&#9;{</P>
<P>&#9;&#9;&#9;&#9;&#9;dc.SetPixelV(i, j, </P>
<P>&#9;&#9;&#9;&#9;&#9;    RGB(255-255*(i-nXFrame)/nLen, 255*(i-nXFrame)/nLen, 0));</P>
<P>&#9;&#9;&#9;&#9;}</P>
<P>&#9;&#9;&#9;}</P>
<P>&#9;&#9;&#9;for (i=nWidth/2+1; i&lt;=nWidth-nXFrame; i++)</P>
<P>&#9;&#9;&#9;{</P>
<P>&#9;&#9;&#9;&#9;UINT nLen=nWidth/2-nXFrame-1+1;</P>
<P>&#9;&#9;&#9;&#9;if (dc.GetPixel(i, j)==cr)</P>
<P>&#9;&#9;&#9;&#9;{</P>
<P>&#9;&#9;&#9;&#9;&#9;dc.SetPixelV(i, j, </P>
<P>&#9;&#9;&#9;&#9;&#9;    RGB(0, 255-255*(i-nWidth/2-1)/nLen, 255*(i-nWidth/2-1)/nLen));</P>
<P>&#9;&#9;&#9;&#9;}</P>
<P>&#9;&#9;&#9;}</P>
<P>&#9;&#9;}</P>
<P>&#9;}</P>
<P>&#9;else</P>
<P>&#9;{</P>
<P>&#9;&#9;// 获得窗口处于非激活状态时的标题条颜色</P>
<P>&#9;&#9;cr=GetSysColor(COLOR_INACTIVECAPTION);</P>
<P>&#9;&#9;// 按从黑到灰,再到黑的渐变规律绘制标题条</P>
<P>&#9;&#9;for (UINT j=nYFrame; j&lt;=nYFrame+nYCaption-1; j++)</P>
<P>&#9;&#9;{</P>
<P>&#9;&#9;&#9;for (UINT i=nXFrame; i&lt;=nWidth/2; i++)</P>
<P>&#9;&#9;&#9;{</P>
<P>&#9;&#9;&#9;&#9;UINT nLen=nWidth/2-nXFrame;</P>
<P>&#9;&#9;&#9;&#9;if (dc.GetPixel(i, j)==cr)</P>
<P>&#9;&#9;&#9;&#9;{</P>
<P>&#9;&#9;&#9;&#9;&#9;dc.SetPixelV(i, j, RGB(192*(i-nXFrame)/nLen, </P>
<P>&#9;&#9;&#9;&#9;&#9;    192*(i-nXFrame)/nLen, 192*(i-nXFrame)/nLen));</P>
<P>&#9;&#9;&#9;&#9;}</P>
<P>&#9;&#9;&#9;}</P>
<P>&#9;&#9;&#9;for (i=nWidth/2+1; i&lt;=nWidth-nXFrame; i++)</P>
<P>&#9;&#9;&#9;{</P>
<P>&#9;&#9;&#9;&#9;UINT nLen=nWidth/2-nXFrame-1;</P>

⌨️ 快捷键说明

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