WM SDK 学习篇(一)

以下hdc为当前设备句柄

1.点:
      创建画笔,并设置其属性:
                     HPEN CreatePen(
                                             int fnPenStyle,                      //画笔风格
                                               int nWidth,                            //
                                               COLORREF crColor             //画笔颜色
                                              );

                      画笔风格可以设置为:PS_SOLID(实型),PS_DASH(虚),PS_NULL(透明)
                     画笔宽度:如果设置为0,则宽度为一个像素。
                      画笔颜色:可以以一下方式获得 RGB(0xff,0xff,0xff)//黑色
        画点:WINGDIAPI COLORREF WINAPI SetPixel(HDC,int,int,COLORREF);
       举例:
       HPEN hNewPen,hOldPen;
        hNewPen = CreatePen(PS_SOLID,1,RGB(255,0,0));
       hOldPen = (HPEN)SelectObject(hdc,hNewPen);//保存前一次的画笔状态
        SetPixel(hdc,100,100,RGB(255,0,0));
        SelectObject(hdc,hOldPen);//恢复前一次的画笔状态

2.线
       首先设置画笔风格,同画点
      画线函数:
      MoveToEx(HDC,int,int,LPPOINT);LineTo(HDC,int,int);或者
      Polyline(__in HDC hdc,__in_ecount(c) CONST POINT * lppt, int c)
      举例:
      HPEN hOldPen,hNewPen;
       hNewPen = CreatePen(PS_SOLID,1,RGB(255,255,0);
       hOldPen = (HPEN)SelectObject(hdc,hNewPen);
      MoveToEx(hdc,100,100,NULL);
      LineTo(hdc,100,200);
      SelectObject(hdc,hOldPen);

3.矩形
       首先设置画笔风格,同画点。
      画矩形函数:
      Rectangle(HDC,int,int,int,int);//普通矩形
      RoundRect(HDC,int,int,int,int,int,int);//圆角矩形
      设置画刷:HBRUSH hBrush = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
      填充函数:FillRect(HDC,CONST RECT *,HBRUSH);
       举例:
       RECT rect= {10,10,100,100};
       HBRUSH hBrush = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
       Rectangle(hdc,rect.left + 1,rect.top +1,rect.right + 1,rect.bottom +1);
      FillRect(hdc,&rect,hBrush);    
4.打印字符串
   字体属性:
    typedef struct tagLOGFONT { // lf
LONG lfHeight; //字高度
LONG lfWidth; //字符平均宽度
LONG lfEscapement; //行与水平页角度
LONG lfOrientation; //基线与水平角度
LONG lfWeight; //笔划的粗细
BYTE lfItalic; //非零为斜体
BYTE lfUnderline; //非零为下划线
BYTE lfStrikeOut; //非零为中划线
BYTE lfCharSet; //指定字符集
BYTE lfOutPrecision; //输出精度
BYTE lfClipPrecision; //裁剪精度
BYTE lfQuality; //输出质量
BYTE lfPitchAndFamily; //字体的字距和族
TCHAR lfFaceName[LF_FACESIZE]; //含字体名的字符串
     } LOGFONT;     

     举例
     LOGFONT stFont;
   HFONT hNewFont, hOldFont;
     RECT rect = {0, 0, 100, 30};

     //创建字体
     memset(&stFont, 0, sizeof(stFont));
     stFont.lfWeight = FW_BOLD;
     stFont.lfHeight = 14;
     wcscpy(stFont.lfFaceName,_T("TodayFont"));
     hNewFont = CreateFontIndirect(&stFont);

     //设置字体
     hOldFont = (HFONT)SelectObject(hdc, hNewFont);
     //设置文本颜色
     SetTextColor(hdc, RGB(0xff, 0xff, 0xff));
     //设置背景为透明
     SetBkMode(hdc, TRANSPARENT);
     //打印文本
     DrawText(hdc, _T("This is a Test."), -1, &rect, DT_SINGLELINE);

     //恢复字体
     SelectObject(hdc, hOldFont);

5.打印图片:
       位图的普通打印:
      BITMAP bitmap;
      HBITMAP hBitmap = (HBITMAP)LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_BITMAP1));
      HDC hdcTemp = CreateCompatibleDC(hdc);//创建临时DC
      SelectObject(hdcTemp, hBitmap);
      GetObject(hBitmap, sizeof(bitmap), &bitmap);
      BitBlt(hdc, 0, 0, bitmap.bmpWidth, bitmap.bmpHeight, hdcTemp, 0, 0, SRCCOPY);
      DeleteDC(hdcTemp);//删除不再使用的DC

     绘制有透明色的位图:
     // hdc:     窗口DC
    //wImageID:    图片资源ID
     //cTrans:     要过滤的颜色
    // iStartX,iStartY: 打印起始位置
    void DrawTransparentIcon(HDC hdc, WORD wImageID, COLORREF cTrans, int iStartX, int iStartY)
    {
          HBITMAP hAlarmIcon;
          BITMAP bmAlarmIcon;
         BOOL bRet;

         hAlarmIcon = (HBITMAP)LoadBitmap(g_hInst,MAKEINTRESOURCE(wImageID));
         GetObject( hAlarmIcon, sizeof(bmAlarmIcon), &bmAlarmIcon);
           bRet = TransparentImage( hdc, iStartX, iStartY, bmAlarmIcon.bmWidth ,bmAlarmIcon.bmHeight,
          hAlarmIcon, 0, 0, bmAlarmIcon.bmWidth ,bmAlarmIcon.bmHeight, cTrans);
          DeleteObject( hAlarmIcon);
    }

      普通图片的打印:
      void DrawImage(HDC hdc,LPCTSTR lpImagePath,int x,int y)
     {
            IImagingFactory *pImgFactory = NULL;
            IImage *pImage = NULL;
            RECT rc = { x, y, x+32, y+32};

            // Normally you would only call CoInitialize/CoUninitialize
            // once per thread. This sample calls CoInitialize in this
            // draw function simply to illustrate that you must call
            // CoInitialize before calling CoCreateInstance.
            CoInitializeEx(NULL, COINIT_MULTITHREADED);

            // Create the imaging factory.
            if (SUCCEEDED(CoCreateInstance (CLSID_ImagingFactory,
                                    NULL,
                                    CLSCTX_INPROC_SERVER,
                                    IID_IImagingFactory,
                                    (void **)&pImgFactory)))
          {
               // Load the image from the JPG file.
                 if (SUCCEEDED(pImgFactory->CreateImageFromFile(
                        lpImagePath,
                        &pImage)))
                 {
                         // Draw the image.
                           pImage->Draw(hdc, &rc, NULL);
                          pImage->Release();
                 }

                pImgFactory->Release();
          }
           CoUninitialize();
      }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值