zoukankan      html  css  js  c++  java
  • Wince 文本函数和字体应用

      好像又进入了一个疲惫期了,晚上状态不好,但是还是想继续更新下博客,继上次分析了wince下设备环境以及怎么绘制相关图像后,,笔者在这片文章中讲到文本函数以及其相关应用。文本输出函数是输出文本的内容,也就是在一个窗体之上将文字输出的一个函数,当然输出文字有些居左居右居中的限制,例如显示背景颜色,前进颜色的一些输出设置,在wince中,字体是一个比较大的资源,它占据了很大的空间。所以wince当中所有的字体很少,但是它提供了一种方法,让我们可以自定义字体,这个简直nice呀,下面我来具体介绍一下上面提到的内容。

     *文本输出函数

      int DrawText(      //通过DrawText可以将一段文字输出到指定的区域去

        HDC hDC,      //表示设备环境

        LPCTSTR lpString,  //被输出的字符串的指针

        int nCount,      //字符串中的字符数

        LPRECT lpRect,    //文本的显示矩形区域

        UINT uFormat    //文本的显示方法

        );

     *文本输出设置

     1.设置文本的背景颜色

      COLORREF SeTBkColor( HDC hdc,COLORREF crColor);

     2.设置文本颜色

      COLORREF SetTextColor(HDC hdc,COLORREF crColor);

     3.文本的对齐方式

      UINT SetTextAlign(HDC hdc,UINT fmode);

     *wince 中的字体

     *系统默认有两种字体:光栅型(raster)和TrueType型

     *自定义字体类型: HFONT CreateFontlndirect(const LOGFONT *lplf);

      创建字体

      选入设备环境

      使用字体

      删除字体

    下面也有一个实例来实线刚才讲到的文本函数和字体应用的问题。

      1 #include <windows.h>
      2 #include "UseFont.h"
      3 
      4 
      5 struct DecodeUnit MainMessage[]={
      6     WM_DESTROY,DoDestroy,
      7     WM_PAINT,DoPaint
      8 };
      9 
     10 
     11 int WINAPI WinMain(HINSTANCE hInstance,        
     12                    HINSTANCE hPrevInstance, 
     13                    LPTSTR    lpCmdLine,        
     14                    int       nCmdShow)        
     15 
     16 {
     17     //第一步:创建一个窗体类
     18     WNDCLASS ws;
     19 
     20     TCHAR szAppName[]= TEXT("UseFont");
     21 
     22     ws.style        = CS_HREDRAW | CS_VREDRAW;
     23     ws.cbClsExtra    = 0;
     24     ws.cbWndExtra   = 0;
     25     ws.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
     26     ws.hCursor        = 0;
     27     ws.hIcon        = 0;
     28     ws.hInstance    = hInstance;
     29     ws.lpfnWndProc    = WndProc;
     30     ws.lpszClassName = szAppName;
     31     ws.lpszMenuName = 0;
     32 
     33     //第二步:注册窗体类
     34 
     35     if (!RegisterClass(&ws))
     36         return -1;
     37 
     38     //第三步:根据窗体类创建一个窗体
     39 
     40     HWND hWnd = CreateWindow(szAppName,TEXT("Use Font"),WS_BORDER | WS_CAPTION | WS_SYSMENU | WS_VISIBLE,
     41         10,10,400,300,
     42         NULL,NULL,hInstance,NULL);
     43 
     44 
     45     //第四步:显示窗体
     46 
     47     ShowWindow(hWnd,nCmdShow);
     48     UpdateWindow(hWnd);
     49 
     50 
     51     //第五步:让窗体获得系统消息
     52 
     53     MSG msg;
     54     while(GetMessage(&msg,NULL,0,0))
     55     {
     56         TranslateMessage(&msg);
     57         DispatchMessage(&msg);
     58     }
     59 
     60     return (0);
     61 }
     62 
     63 
     64 
     65 LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
     66 {
     67     int i;
     68     for (i =0 ;i< dim(MainMessage);i++)
     69     {
     70         if (message == MainMessage[i].message )
     71             MainMessage[i].fun(hwnd,message,wParam,lParam);
     72     }
     73     return DefWindowProc(hwnd,message,wParam,lParam);
     74 }
     75 
     76 
     77 LRESULT DoPaint(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
     78 {
     79 
     80     PAINTSTRUCT ps;
     81     HDC hdc;
     82     RECT rect ;
     83     int nSmooth;
     84 
     85     LOGFONT lf;
     86     HFONT hFontNew, hFontOld;
     87 
     88     //定义要显示的内容
     89     TCHAR str[] = TEXT("show a Shadow Text");
     90 
     91     //获得系统设备环境
     92     hdc = BeginPaint(hwnd, &ps);
     93     //获得窗体区域
     94     GetClientRect(hwnd,&rect);
     95 
     96     //初始化自定义字体结构
     97     memset(&lf, 0, sizeof(LOGFONT));
     98 
     99     //设置字体圆滑显示
    100     nSmooth = 1000;
    101     SystemParametersInfo(SPI_SETFONTSMOOTHINGCONTRAST, 0, &nSmooth, FALSE);
    102 
    103     //设置自定义字体的显示质量
    104     lf.lfQuality = CLEARTYPE_QUALITY;
    105     //设置字体的倾斜度
    106     lf.lfEscapement = 450;
    107     //创建自定义字体
    108     hFontNew = CreateFontIndirect(&lf);
    109     //选入到设备环境
    110     hFontOld = (HFONT) SelectObject(hdc, hFontNew);
    111     //设置背景模式
    112     SetBkMode(hdc,TRANSPARENT);
    113     //设置字体颜色为红色
    114     SetTextColor(hdc,RGB(0xFF,0,0));
    115     //绘制文字
    116     DrawText(hdc,str,-1,&rect,DT_SINGLELINE| DT_CENTER | DT_VCENTER);
    117 
    118     //移动矩形区域
    119     OffsetRect(&rect,-2,-2);
    120     //重新设置字体颜色为黑色
    121     SetTextColor(hdc,RGB(0,0,0));
    122     DrawText(hdc,str,-1,&rect,DT_SINGLELINE| DT_CENTER | DT_VCENTER);
    123 
    124     //清除使用过的资源
    125     SelectObject(hdc, hFontOld);
    126     DeleteObject(hFontNew);
    127     //释放设备环境
    128     EndPaint(hwnd,&ps);
    129 
    130     return 0;
    131 
    132 
    133 }
    134 
    135 LRESULT DoDestroy(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
    136 {
    137     PostQuitMessage(0);
    138     return (0);
    139 }
    UseFont

     这里的代码还有待继续探索其中的深奥之处,以及对其中一些函数的使用,任重道远~

  • 相关阅读:
    在Web服务调试时,出现IIS配置错误的相应解决办法
    Eclipse解决Launch error: Failed to connect to remote VM [duplicate]
    在Eclipse中应该怎样去修改Android应用程序的包名(注意按步骤修改)
    用Fragment实现Tab页面切换效果初步总结
    与像素无关的dp单位与像素单位px之间的转换
    在Andorid开发项目中遇到的Bug记录(续)
    java邮件
    图片上传实例
    java多线程总结一:线程的两种创建方式及优劣比较
    java多线程总结二:后台线程(守护线程)
  • 原文地址:https://www.cnblogs.com/lihuidashen/p/4215270.html
Copyright © 2011-2022 走看看