[翻译]-WinCE 程序设计 (3rd 版)--2.2 输出文本[5]

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:


                     LPARAM lParam) {
    PAINTSTRUCT ps;
    RECT rect, rectCli;
    HBRUSH hbrOld;
    HDC hdc;
    INT i, cy;
    DWORD dwColorTable[] = {0x00000000, 0x00808080,
                            0x00cccccc, 0x00ffffff};
  
    GetClientRect (hWnd, &rectCli);
  
    hdc = BeginPaint (hWnd, &ps);
  
    // Get the height and length of the string.
    DrawText (hdc, TEXT ("Hello Windows CE"), -1, &rect,
              DT_CALCRECT | DT_CENTER | DT_SINGLELINE);
  
    cy = rect.bottom - rect.top + 5;
  
    // Draw black rectangle on right half of window.
    hbrOld = (HBRUSH)SelectObject (hdc, GetStockObject (BLACK_BRUSH));
    Rectangle (hdc, rectCli.left + (rectCli.right - rectCli.left) / 2,
               rectCli.top, rectCli.right, rectCli.bottom);
    SelectObject (hdc, hbrOld);
  
    rectCli.bottom = rectCli.top + cy;
    SetBkMode (hdc, TRANSPARENT);
    for (i = 0; i < 4; i++) {
        SetTextColor (hdc, dwColorTable[i]);
        SetBkColor (hdc, dwColorTable[3-i]);
  
        DrawText (hdc, TEXT ("Hello Windows CE"), -1, &rectCli,
                  DT_CENTER | DT_SINGLELINE);
        rectCli.top += cy;
        rectCli.bottom += cy;
    }
  
    SetBkMode (hdc, OPAQUE);
    for (i = 0; i < 4; i++) {
        SetTextColor (hdc, dwColorTable[i]);
        SetBkColor (hdc, dwColorTable[3-i]);
  
        DrawText (hdc, TEXT ("Hello Windows CE"), -1, &rectCli,
                  DT_CENTER | DT_SINGLELINE);
        rectCli.top += cy;
        rectCli.bottom += cy;
    }
    EndPaint (hWnd, &ps);
    return 0;
}
//----------------------------------------------------------------------
// DoDestroyMain - Process WM_DESTROY message for window.
//
LRESULT DoDestroyMain (HWND hWnd, UINT wMsg, WPARAM wParam,
                       LPARAM lParam) {
    PostQuitMessage (0);
    return 0;
}
TextDemo的实质内容在OnPaintMain函数里。对DrawText的第一次调用并没有在设备环境上画任何东西。相反,使用DT_CALCRECT标志指示Windows将文本串的矩形尺寸存在rect里。该信息用于计算字符串的高度,并存储在cy里。接下来,在窗口的右侧绘制了一个黑色矩形。我将在本章稍后一些讨论如何绘制一个矩形。该矩形用来在文本被书写之前,产生两个不同的背景。函数接下来用不同的前景色、背景色在透明和不透明模式下输出了 同样的字符串。程序结果如图2-2所示:

头四行使用透明模式来绘制。后四行使用不透明模式来绘制。文本颜色从黑到白,每行使用不同的颜色,同时背景色设置为从白到黑。在透明模式下,背景色是无关紧要的,因为并不使用该背景色。但是在不通明模式下,背景色欣然出现在每行里。
图2-2(略):TextDemo展示了文本色、背景色以及背景模式之间的关系。

字体
如果Windows提供的全部灵活性就是设置前景色和背景色,那我们还是回到MS-DOS和字符属性时代的好。有证据表明,Windows同MS-DOS最显著的变化就是Windows可改变显示文本字体的能力。所有Windows操作系统都是建立在WYS/WYG-所见即所得-的概念上的,而采用可变字体就是达到这一目的的一个主要手段。

在所有Windows操作系统里都有两种字体类型-光栅型(raster)和TrueType型。光栅型字体存储为位图,即小的像素图像,每个字符都有一个。光栅字体容易存储和使用,但有一个重要问题:不能很好的缩放。就像小图放大时出现锯齿纹一样,光栅字体放大到更大的字体时会出现锯齿纹。

TrueType字体解决了缩放问题。它不是存储成图象,每个TrueType字符存都存储成如何绘制字符的描述信息。作为在屏幕上绘制字符的Windows功能的一部分,字体引擎获得描述信息,并按需要的尺寸在屏幕上绘制字符。一个Windows CE系统支持TrueType或光栅字体,但不会同时支持。幸运的是,对光栅字体和TrueType字体来说,编程接口都是一样的,这减少了Windows 开发者对字体技术的担忧,毕竟字体技术用在所有应用里,也是最让人吃力的技术之一。

Windows CE里的字体函数同Windows其它版本中的字体函数很相近。从创建字体、选择进DC到最后删除字体,让我们看一下字体生存周期中用到的函数吧。如何查询当前字体以及枚举可使用的字体等,都会在下面几节里涉及到。

本文关键:[翻译]-WinCE 程序设计 (3rd 版)--2.2 输出文本
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top