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

📄 chap11_1.htm

📁 网络资源
💻 HTM
📖 第 1 页 / 共 4 页
字号:
    <blockquote>
      <blockquote>
        </font><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">CPalette* SelectPalette( 
        CPalette* pPalette, BOOL bForceBackground );<br>
        </font><font SIZE="3">该函数把指定的调色板选择到设备上下文中。参数</font><font FACE="Times New Roman" SIZE="3">pPalette</font><font SIZE="3">指向一个</font><font FACE="Times New Roman" SIZE="3">CPalette</font><font SIZE="3">对象。参数</font><font FACE="Times New Roman" SIZE="3">bForceBackground</font><font SIZE="3">如果是</font><font FACE="Times New Roman" SIZE="3">TRUE</font><font SIZE="3">,那么被选择的调色板总是作为背景调色板使用,如果</font><font FACE="Times New Roman" SIZE="3">bForceBackground</font><font SIZE="3">是</font><font FACE="Times New Roman" SIZE="3">FALSE</font><font SIZE="3">并且设备上下文是附属于某个窗口的,那么当窗口是活动窗口或活动窗口的子窗口时,被选择的调色板将作为前景调色板实现,否则作为背景调色板实现。如果使用调色板的是一个内存设备上下文,则该参数被忽略。函数返回设备上下文原来使用的调色板,若出错则返回</font><font FACE="Times New Roman" SIZE="3">NULL</font><font SIZE="3">。</p>
        </font><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">UINT RealizePalette( );<br>
        </font><font SIZE="3">该函数把设备上下文中的逻辑调色板实现到系统调色板中。函数的返回值表明调色板映射表中有多少项被改变了。</font></p>
      </blockquote>
    </blockquote>
    <p><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">如果某一个窗口要显示特殊的颜色,那么一般应该在处理</font><font FACE="Times New Roman" SIZE="3">WM_PAINT</font><font SIZE="3">消息时实现自己的逻辑调色板。也就是说,在</font><font FACE="Times New Roman" SIZE="3">OnPaint</font><font SIZE="3">或</font><font FACE="Times New Roman" SIZE="3">OnDraw</font><font SIZE="3">函数中重绘以前,要调用</font><font FACE="Times New Roman" SIZE="3">SelectPalette</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">RealizePalette</font><font SIZE="3">。如果窗口显示的颜色比较重要,则在调用</font><font FACE="Times New Roman" SIZE="3">SelectPalette</font><font SIZE="3">时应该指定</font><font FACE="Times New Roman" SIZE="3">bForceBackground</font><font SIZE="3">参数为</font><font FACE="Times New Roman" SIZE="3">FALSE</font><font SIZE="3">。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">前景调色板具有使用颜色的最高优先级,它有无条件占用系统调色板</font><font FACE="Times New Roman" SIZE="3">(20</font><font SIZE="3">种保留颜色除外</font><font FACE="Times New Roman" SIZE="3">)</font><font SIZE="3">的权力,也就是说,如果需要,前景调色板将覆盖系统调色板的</font><font FACE="Times New Roman" SIZE="3">236</font><font SIZE="3">个表项,而不管这些表项是否正被别的窗口使用。背景调色板则无权破坏系统调色板中的已使用项。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">请读者注意,前景调色板应该是唯一。如果一个活动窗口同时要实现几个逻辑调色板,那么只能有一个调色板作为前景调色板实现,也即在调用</font><font FACE="Times New Roman" SIZE="3">CDC::SelectPalette</font><font SIZE="3">时只能有一个</font><font FACE="Times New Roman" SIZE="3">bForceBackground</font><font SIZE="3">被指定为</font><font FACE="Times New Roman" SIZE="3">FALSE</font><font SIZE="3">,其它的</font><font FACE="Times New Roman" SIZE="3">bForceBackground</font><font SIZE="3">必需为</font><font FACE="Times New Roman" SIZE="3">TRUE</font><font SIZE="3">。通常是把具有输入焦点的窗口的调色板作为前景调色板实现,其它窗口只能使用背景调色板。如果活动窗口的子窗口全都使用前景调色板,则会导致程序的死循环。</font><font FACE="Times New Roman" SIZE="3"></p>
    </font><font SIZE="3"><b><div align="center"><center><table border="2" cellpadding="2" cellspacing="0" width="100%" bgcolor="#71D0FF">
      <tr>
        <td width="100%"></b>提示</font><font FACE="Times New Roman" SIZE="3">:</font><font SIZE="3">请读者注意区分活动窗口和有输入焦点的窗口。有输入焦点的窗口要么是活动窗口本身,要么是活动窗口的子窗口。也就是说,活动窗口不一定具有输入焦点,当活动窗口的子窗口获得输入焦点时,活动窗口就会失去输入焦点。</font></td>
      </tr>
    </table>
    </center></div><font FACE="Times New Roman" SIZE="3"><p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font></b><font color="#3973DE" FACE="Times New Roman" SIZE="3">11.1.3 
    </font><font SIZE="3" color="#3973DE">使用颜色的三种方法</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">在调用</font><font FACE="Times New Roman" SIZE="3">GDI</font><font SIZE="3">函数绘图时,可以用不同的方法来选择颜色。</font><font FACE="Times New Roman" SIZE="3">Windows</font><font SIZE="3">用</font><font FACE="Times New Roman" SIZE="3">COLORREF</font><font SIZE="3">数据类型来表示颜色,</font><font FACE="Times New Roman" SIZE="3">COLORREF</font><font SIZE="3">型值的长度是</font><font FACE="Times New Roman" SIZE="3">4</font><font SIZE="3">字节,其中最高位字节可以取三种不同的值,分别对应三种使用颜色的方法。表</font><font FACE="Times New Roman" SIZE="3">11.1</font><font SIZE="3">列出了这些不同的取值及其含义。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><b><font SIZE="3"> </p>
    <p ALIGN="CENTER">表</font><font FACE="Times New Roman" SIZE="3">11.1 </b>COLORREF</font><font SIZE="3">型值的最高位字节的含义</font></p>
    <table BORDER="1" CELLSPACING="1" CELLPADDING="1" WIDTH="579">
      <tr>
        <td WIDTH="16%"><font SIZE="3"><b><p ALIGN="JUSTIFY">取值</b></font></td>
        <td WIDTH="84%"><font SIZE="3"><b><p ALIGN="JUSTIFY">含义</b></font></td>
      </tr>
      <tr>
        <td WIDTH="16%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">0x00</font></td>
        <td WIDTH="84%"><font SIZE="3"><p ALIGN="JUSTIFY">指定</font><font FACE="Times New Roman" SIZE="3">RGB</font><font SIZE="3">引用。此时三个低位字节含有红、绿、蓝色的强度,</font><font FACE="Times New Roman" SIZE="3">Windows</font><font SIZE="3">将抖动</font><font FACE="Times New Roman" SIZE="3">20</font><font SIZE="3">种保留的颜色来匹配指定的颜色,而不管程序是否实现了自己的调色板。</font></td>
      </tr>
      <tr>
        <td WIDTH="16%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">0x01</font></td>
        <td WIDTH="84%"><font SIZE="3"><p ALIGN="JUSTIFY">指定调色板索引引用。此时最低位字节含有逻辑调色板的索引,</font><font FACE="Times New Roman" SIZE="3">Windows</font><font SIZE="3">根据该索引在逻辑调色板中找到所需的颜色。</font></td>
      </tr>
      <tr>
        <td WIDTH="16%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">0x02</font></td>
        <td WIDTH="84%"><font SIZE="3"><p ALIGN="JUSTIFY">指定调色板</font><font FACE="Times New Roman" SIZE="3">RGB</font><font SIZE="3">引用。此时三个低位字节含有红、绿、蓝色的强度,</font><font FACE="Times New Roman" SIZE="3">Windows</font><font SIZE="3">会在逻辑调色板中找到最匹配的颜色。</font></td>
      </tr>
    </table>
    <font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY"></font><font SIZE="3">为了方便用户的使用,</font><font FACE="Times New Roman" SIZE="3">Windows</font><font SIZE="3">提供了三个宏来构建三种不同的</font><font FACE="Times New Roman" SIZE="3">COLORREF</font><font SIZE="3">数据,它们是:</p>
    <blockquote>
      <blockquote>
        </font><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">COLORREF RGB(BYTE 
        bRed,BYTE bGreen,BYTE bBlue); //RGB</font><font SIZE="3">引用</p>
        </font><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">COLORREF PALETTEINDEX(WORD 
        wPaletteIndex); //</font><font SIZE="3">调色板索引引用</p>
        </font><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">COLORREF PALETTERGB(BYTE 
        bRed,BYTE bGreen, //</font><font SIZE="3">调色板</font><font FACE="Times New Roman" SIZE="3">RGB</font><font SIZE="3">引用<br>
        </font><font FACE="Times New Roman" SIZE="3">BYTE bBlue); </p>
      </blockquote>
    </blockquote>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">例如,我们可以用上述三种方法来指定刷子的颜色。下面的代码用系统调色板中的红色建立一个刷子:</p>
    <blockquote>
      </font><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">CBrush brush;</p>
      <p ALIGN="JUSTIFY">brush.CreateSolidBrush(RGB(255,0,0));</p>
      <p ALIGN="JUSTIFY">pDC-&gt;SelectObject(&amp;brush);</p>
    </blockquote>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">下面的代码用逻辑调色板的索引</font><font FACE="Times New Roman" SIZE="3">2</font><font SIZE="3">中的颜色来创建一个刷子:</p>
    <blockquote>
      </font><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">pDC-&gt;SelectPalette(&amp;m_Palette,FALSE);</p>
      <p ALIGN="JUSTIFY">pDC-&gt;RealizePalette( );</p>
      <p ALIGN="JUSTIFY">CBrush brush;</p>
      <p ALIGN="JUSTIFY">brush.CreateSolidBrush(PALETTEINDEX(2));</p>
      <p ALIGN="JUSTIFY">pDC-&gt;SelectObject(&amp;brush);</p>
    </blockquote>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">下面的代码用逻辑调色板中最匹配的深灰色来创建一个刷子:</p>
    <blockquote>
      </font><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">pDC-&gt;SelectPalette(&amp;m_Palette,FALSE);</p>
      <p ALIGN="JUSTIFY">pDC-&gt;RealizePalette( );</p>
      <p ALIGN="JUSTIFY">CBrush brush;</p>
      <p ALIGN="JUSTIFY">brush.CreateSolidBrush(PALETTERGB(20,20,20));</p>
      <p ALIGN="JUSTIFY">pDC-&gt;SelectObject(&amp;brush);</p>
    </blockquote>
    <b><p ALIGN="JUSTIFY"></b></font><font color="#3973DE" FACE="Times New Roman" SIZE="3">11.1.4 
    </font><font SIZE="3" color="#3973DE">与系统调色板有关的消息</font><font FACE="Times New Roman" SIZE="3"></p>

⌨️ 快捷键说明

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