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

📄 vctip4.html

📁 一些关于vc编程技巧的文章
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<html><head><meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312"><meta NAME="GENERATOR" CONTENT="Microsoft FrontPage 3.0"><meta NAME="doccomm" CONTENT="sss"><meta NAME="Template" CONTENT="C:\MSOffice\Template\Sl_BOOK.dot"><meta NAME="Author" CONTENT="Cheng Jinxing"><title>Visual C++编程技巧之四</title></head><body TEXT="#000000" BGCOLOR="#CCFFFF" LINK="#0000EE" VLINK="#551A8B" ALINK="#FF0000"><p align="center"><br><font SIZE="+3" FACE="楷体_GB2312">Visual C++编程技巧之四</font> &nbsp; </p><p><a HREF="#tip25"><font SIZE="+0" FACE="Times New Roman">25</font><font SIZE="+0">、如何获取有关窗口正在处理的当前消息的信息</font></a> </p><p><a HREF="#tip26"><font SIZE="+0" FACE="Times New Roman">26</font><font SIZE="+0">、如何创建一个不规则形状的窗口</font></a> </p><p><a HREF="#tip27"><font SIZE="+0" FACE="Times New Roman">27</font><font SIZE="+0">、如何在代码中获取工具条和状态条的指针</font></a> </p><p><a HREF="#tip28"><font SIZE="+0" FACE="Times New Roman">28</font><font SIZE="+0">、如何使能和禁止工具条的工具提示</font></a> </p><p><a HREF="#tip29"><font SIZE="+0" FACE="Times New Roman">29</font><font SIZE="+0">、如何设置工具条标题</font></a> </p><p><a HREF="#tip30"><font SIZE="+0" FACE="Times New Roman">30</font><font SIZE="+0">、如何创建和使用无模式对话框</font></a> </p><p><a HREF="#tip31"><font SIZE="+0" FACE="Times New Roman">31</font><font SIZE="+0">、如何在对话框中显示一个位图</font></a> </p><p><a HREF="#tip32"><font SIZE="+0" FACE="Times New Roman">32</font><font SIZE="+0">、如何改变对话或窗体视窗的背景颜色</font></a> </p><p><font SIZE="+2"><b> </b></font> </p><p><a NAME="tip25"></a><b><font SIZE="+2"><font FACE="Times New Roman">25</font><fontFACE="黑体">、如何获取有关窗口正在处理的当前消息的信息</font></font></b> </p><p><font SIZE="+0">调用<font FACE="Times New Roman">CWnd: : GetCurrentMessage</font>可以获取一个<fontFACE="Times New Roman">MSG</font>指针。例如,可以使用</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">ClassWizard</font>将几个菜单项处理程序映射到一个函数中,然后调用<fontFACE="Times New Roman">GetCurrentMessage</font></font> </p><p><font SIZE="+0">来确定所选中的菜单项。</font> </p><p><font SIZE="+0" FACE="Times New Roman">viod CMainFrame : : OnCommmonMenuHandler ( )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Display selected menu item in debug window .</font> </p><p><font SIZE="+0" FACE="Times New Roman">TRACE (&quot;Menu item %u was selected . \n&quot; ,</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">GetCruuentMessage ( ) </font>—<fontFACE="Times New Roman">&gt; wParam );</font></font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><a NAME="tip26"></a><b><font SIZE="+2"><font FACE="Times New Roman">26</font><fontFACE="黑体">、如何创建一个不规则形状的窗口</font></font></b> </p><p><font SIZE="+0">可以使用新的<font FACE="Times New Roman">SDK</font>函数<fontFACE="Times New Roman">SetWindowRgn</font>。该函数将绘画和鼠标消息限定在窗口的一</font> </p><p><font SIZE="+0">个指定的区域,实际上使窗口成为指定的不规则形状。</font> </p><p><font SIZE="+0">使用<font FACE="Times New Roman">AppWizard</font>创建一个基于对的应用程序并使用资源编辑器从主对话资源中删</font> </p><p><font SIZE="+0">除所在的缺省控件、标题以及边界。</font> </p><p><font SIZE="+0">给对话类增加一个<font FACE="Times New Roman">CRgn</font>数据成员,以后要使用该数据成员建立窗口区域。</font> </p><p><font SIZE="+0" FACE="Times New Roman">Class CRoundDlg : public CDialog</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0">…</font> </p><p><font SIZE="+0" FACE="Times New Roman">private :</font> </p><p><font SIZE="+0" FACE="Times New Roman">Crgn m_rgn : // window region</font> </p><p><font SIZE="+0">…</font> </p><p><font SIZE="+0" FACE="Times New Roman">} ;</font> </p><p><font SIZE="+0">修改<font FACE="Times New Roman">OnInitDialog</font>函数建立一个椭圆区域并调用<fontFACE="Times New Roman">SetWindowRgn</font>将该区域分配给</font> </p><p><font SIZE="+0">窗口:</font> </p><p><font SIZE="+0" FACE="Times New Roman">BOOL CRoundDlg : : OnInitDialog ( )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">CDialog : : OnInitDialog ( ) ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Get size of dialog .</font> </p><p><font SIZE="+0" FACE="Times New Roman">CRect rcDialog ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">GetClientRect (rcDialog );</font> </p><p><font SIZE="+0" FACE="Times New Roman">// Create region and assign to window .</font> </p><p><font SIZE="+0" FACE="Times New Roman">m_rgn . CreateEllipticRgn (0 , 0 , rcDialog.Width ( ) , rcDialog .Height ( ) );</font> </p><p><font SIZE="+0" FACE="Times New Roman">SetWindowRgn (GetSafeHwnd ( ) , (HRGN) m_ rgn , TRUE );</font> </p><p><font SIZE="+0" FACE="Times New Roman">return TRUE ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><font SIZE="+0">通过建立区域和调用<font FACE="Times New Roman">SetWindowRgn</font>,已经建立一个不规则形状的窗口,下面的例</font> </p><p><font SIZE="+0">子程序是修改<font FACE="Times New Roman">OnPaint</font>函数使窗口形状看起来象一个球形体。</font> </p><p><font SIZE="+0" FACE="Times New Roman">voik CRoundDlg : : OnPaint ( )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">CPaintDC de (this) ; // device context for painting .</font> </p><p><font SIZE="+0" FACE="Times New Roman">//draw ellipse with out any border</font> </p><p><font SIZE="+0" FACE="Times New Roman">dc. SelecStockObject (NULL_PEN);</font> </p><p><font SIZE="+0" FACE="Times New Roman">//get the RGB colour components of the sphere color</font> </p><p><font SIZE="+0" FACE="Times New Roman">COLORREF color= RGB( 0 , 0 , 255);</font> </p><p><font SIZE="+0" FACE="Times New Roman">BYTE byRed =GetRValue (color);</font> </p><p><font SIZE="+0" FACE="Times New Roman">BYTE byGreen = GetGValue (color);</font> </p><p><font SIZE="+0" FACE="Times New Roman">BYTE byBlue = GetBValue (color);</font> </p><p><font SIZE="+0" FACE="Times New Roman">// get the size of the view window</font> </p><p><font SIZE="+0" FACE="Times New Roman">Crect rect ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">GetClientRect (rect);</font> </p><p><font SIZE="+0" FACE="Times New Roman">// get minimun number of units</font> </p><p><font SIZE="+0" FACE="Times New Roman">int nUnits =min (rect.right , rect.bottom );</font> </p><p><font SIZE="+0" FACE="Times New Roman">//calculate he horiaontal and vertical step size</font> </p><p><font SIZE="+0" FACE="Times New Roman">float fltStepHorz = (float) rect.right /nUnits ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">float fltStepVert = (float) rect.bottom /nUnits ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">int nEllipse = nUnits/3; // calculate how many to draw</font> </p><p><font SIZE="+0" FACE="Times New Roman">int nIndex ; // current ellipse that is being draw</font> </p><p><font SIZE="+0" FACE="Times New Roman">CBrush brush ; // bursh used for ellipse fill color</font> </p><p><font SIZE="+0" FACE="Times New Roman">CBrush *pBrushOld; // previous brush that was selected into dc</font> </p><p><font SIZE="+0" FACE="Times New Roman">//draw ellipse , gradually moving towards upper-right corner</font> </p><p><font SIZE="+0" FACE="Times New Roman">for (nIndex = 0 ; nIndes &lt; + nEllipse ; nIndes ++)</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">//creat solid brush</font> </p><p><font SIZE="+0" FACE="Times New Roman">brush . CreatSolidBrush (RGB ( ( (nIndex *byRed ) /nEllipse ).</font> </p><p><font SIZE="+0" FACE="Times New Roman">( ( nIndex * byGreen ) /nEllipse ), ( (nIndex * byBlue) /nEllipse ) ) );</font> </p><p><font SIZE="+0" FACE="Times New Roman">//select brush into dc</font> </p><p><font SIZE="+0" FACE="Times New Roman">pBrushOld= dc .SelectObject (&amp;brhsh);</font> </p><p><font SIZE="+0" FACE="Times New Roman">//draw ellipse</font> </p><p><font SIZE="+0" FACE="Times New Roman">dc .Ellipse ( (int) fltStepHorz * 2, (int) fltStepVert * nIndex ,</font> </p><p><font SIZE="+0" FACE="Times New Roman">rect. right -( (int) fltStepHorz * nIndex )+ 1,</font> </p><p><font SIZE="+0" FACE="Times New Roman">rect . bottom -( (int) fltStepVert * (nIndex *2) ) +1) ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">//delete the brush</font> </p><p><font SIZE="+0" FACE="Times New Roman">brush.DelecteObject ( );</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><font SIZE="+0">最后,处理<font FACE="Times New Roman">WM_NCHITTEST</font>消息,使当击打窗口的任何位置时能移动窗口。</font> </p><p><font SIZE="+0" FACE="Times New Roman">UINT CRoundDlg : : OnNchitTest (Cpoint point )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Let user move window by clickign anywhere on the window .</font> </p><p><font SIZE="+0" FACE="Times New Roman">UINT nHitTest = CDialog : : OnNcHitTest (point) ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">rerurn (nHitTest = = HTCLIENT)? HTCAPTION: nHitTest ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><a NAME="tip27"></a><b><font SIZE="+2"><font FACE="Times New Roman">27</font><fontFACE="黑体">、如何在代码中获取工具条和状态条的指针</font></font></b> </p><p><font SIZE="+0">缺省时, 工作框创建状态条和工具条时将它们作为主框窗口的子窗口,状态条</font> </p><p><font SIZE="+0">有一个<font FACE="Times New Roman">AFX_IDW_STATUS_BAR</font>标识符,工具条有一个<fontFACE="Times New Roman">AFX_IDW_TOOLBAR</font>标识符,下例说</font> </p><p><font SIZE="+0">明了如何通过一起调用<font FACE="Times New Roman">CWnd: : GetDescendantWindow</font>和<font FACE="Times New Roman">AfxGetMainWnd</font>来获取这些</font> </p><p><font SIZE="+0">子窗口的指针:</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Get pointer to status bar .</font> </p>

⌨️ 快捷键说明

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