• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 34,comments - 2,trackbacks - 0
            一、Windows可以畫直線、橢圓線(橢圓圓周上的曲線)和貝塞爾曲線。
            ////////////7 個(gè)畫線函式是:
            (1)畫直線
            LineTo    BOOL LineTo(HDC hdc,int nXEnd,int nYEnd);
            結(jié)合MoveToEx函數(shù)使用BOOL MoveToEx(HDC hdc,int X,int Y,LPPOINT lpPoint);Point記錄了舊的坐標(biāo)點(diǎn)(先前的當(dāng)前位置)。
            ///注意:GetCurrentPositionEx (hdc, &pt) ;獲得當(dāng)前位置。

            (2)畫一系列相連的直線。
            Polyline    把Point數(shù)組的點(diǎn)連接成線。不用當(dāng)前點(diǎn)做開始點(diǎn),
            PolylineTo  使用當(dāng)前點(diǎn)做開始點(diǎn),并將當(dāng)前的位置設(shè)置成最后一根線的終點(diǎn)。
            PolyPolyline 畫多組相連的線。

            (3)填充矩形
            Rectangle 畫一個(gè)矩形,并用白色刷子填充、Rectangle(hdc,xleft,ytop,xright,ybottom)
            Ellipse   畫一橢圓,并用白色的刷子填充。Ellipse (hdc,xleft,ytop,xright,ybottom)
            RoundRect 畫圓角矩形。并用白色的刷子填充 RoundRect(hdc,xL,yT,xR,yB,xC,yC)
             xC,yC是圓角矩形的圓角。
            Arc  畫橢圓線。Arc (hdc, xLeft, yTop, xRight, yBottom, xStart, yStart, xEnd,yEnd)
            Chord 畫弦弓形Chord(hdc,xLeft, yTop, xRight, yBottom, xStart, yStart, xEnd, yEnd)
            Pie 畫餅形圖 Pie(hdc, xLeft, yTop, xRight, yBottom, xStart, yStart, xEnd, yEnd);
            ArcTo 和AngleArc 畫橢圓線。

            //////多邊形
            Polygon(hdc,apt,iCount);  //畫一個(gè)多邊形,最后一點(diǎn)與第一點(diǎn)相連。
            PolyPolygon(hdc,apt,aiCount,iPolyCount);  //畫多個(gè)多邊形。


             

             
            (4)貝塞爾曲線,畫貝塞爾曲線
            POINY  apt【4】=(起點(diǎn),第一控制點(diǎn),第二控制點(diǎn),終點(diǎn))
            需要注意的是::曲線是起點(diǎn)到終點(diǎn)的連線曲線,控制點(diǎn)(調(diào)整點(diǎn))不在其中、
            PolyBezier (hdc,apt,icount)
            PolyBezierTo (hdc,apt,icount)。使用當(dāng)前點(diǎn)為起點(diǎn)
            PolyDraw 畫一系列相連的線以及貝塞爾曲線。
            對(duì)于多條貝塞爾曲線,后一條的起點(diǎn)是前一條的終點(diǎn)。

            (5)矩形函數(shù)
            FillRect(hdc,&rect,hBrush);  //使用指定的畫刷來填充矩形,(不包含(Right,buttom)FrameRect(hdc,&rect,hBrush);//使用畫刷來填充矩形框,不填充矩形,
            InvertRect(hdc,&rect);  //使像素翻轉(zhuǎn),白變黑,黑變白,綠變紅。

            ///////對(duì)Rect的操作
            SetRect(&rect,xLeft,yTop,xRight,yButtom);//賦值
            OffsetRect(&rect,x,y);  //沿x,y移動(dòng)
            InflateRect(&rect,x,y); //增減矩形的尺寸。
            SetRectEmpty(&rect);  //置0
            CopyRect(&A,&B);把B復(fù)制到A.
            IntersectRect(&A,&B1,&B2);//把B1和B2的交集復(fù)制到A.
            UnionRect(&A,&B1,&B2);  //取并集
            bEmpty=IsRectEmpty(&Rect);//判斷矩形是否為空。
            blnRect=PtlnRect(&Rect,point); //判斷點(diǎn)是否在矩形中。


            二、映像坐標(biāo)

            1)、視口:設(shè)備坐標(biāo)(像素)
            窗口:邏輯坐標(biāo),像素、mm、英寸
            視口(設(shè)備)坐標(biāo)轉(zhuǎn)換為窗口(邏輯)坐標(biāo):
            公式:一般不用記,有專門的函數(shù)。
            xWindow=(xViewport - xViewOrg) * xWinExt/xViewExt +xWinOrg
            yWindow=(yViewport - yViewOrg) * yWinExt/yViewExt +yWinOrg

            (xWindow,yWindow) 轉(zhuǎn)換后的窗口坐標(biāo)
            (xViewport,yViewport)待轉(zhuǎn)換的視口坐標(biāo)
            (xWinExt,yWinExt)是邏輯座標(biāo)的視窗范圍;
            (xViewExt,yViewExt)是裝置座標(biāo)的視窗范圍。
            (xWinOrg,yWinOrg)是邏輯座標(biāo)的窗口原點(diǎn);
            (xViewOrg,yViewOrg)是裝置座標(biāo)的視口原點(diǎn)

            2)、設(shè)備點(diǎn)轉(zhuǎn)化為邏輯點(diǎn)
            DPtoLP (hdc, pPoints, iNumber);pPoints 結(jié)構(gòu)陣列的指標(biāo),而iNumber 是要轉(zhuǎn)換的點(diǎn)的個(gè)數(shù)
            例如:
            GetClientRect (hwnd, &rect) ;
            DPtoLP (hdc, (PPOINT) &rect, 2) ;

            將邏輯點(diǎn)轉(zhuǎn)換為裝置點(diǎn):
            LPtoDP (hdc, pPoints, iNumber) ;


            3):
            SetMapMode(hdc,iMapMode);   //設(shè)置映射方式。
            默認(rèn):MM_TEXT:每個(gè)邏輯單位轉(zhuǎn)換為一個(gè)圖素,X正方向向右,Y正方向向下。
            原點(diǎn)可以改變,范圍不可改變
            SetWindowOrgEx();  //設(shè)置設(shè)備環(huán)境的原點(diǎn)
            SetViewprocOrgEx(); //設(shè)置客戶區(qū)中心
            //
            //原點(diǎn)和范圍都可以改變、
            MM_ANISOTROPIC:邏輯單位轉(zhuǎn)換成具有任意比例軸的任意單位,用SetWindowExtExSetViewportExtEx函數(shù)可指定單位、方向和比例。

            //原點(diǎn)可以改變,范圍不可以改變,X的正方面向右,Y的正方向向上。
            MM_HIENGLISH:每個(gè)邏輯單位轉(zhuǎn)換為0.001英寸,X的正方面向右,Y的正方向向上。
            MM_HIMETRIC:每個(gè)邏輯單位轉(zhuǎn)換為0.01毫米,X正方向向右,Y的正方向向上。
            MM_ISOTROPIC:邏輯單位轉(zhuǎn)換成具有均等比例軸的任意單位,即沿X軸的一個(gè)單位等于沿Y軸的一個(gè)單位,用和函數(shù)可以指定該軸的單位和方向。圖形設(shè)備界面(GDI)需要進(jìn)行調(diào)整,以保證X和Y的單位保持相同大小(當(dāng)設(shè)置窗口范圍時(shí),視口將被調(diào)整以達(dá)到單位大小相同)。
            MM_LOENGLISH:每個(gè)邏輯單位轉(zhuǎn)換為0.01英寸,X正方向向右,Y正方向向上。
            MM_LOMETRIC:每個(gè)邏輯單位轉(zhuǎn)換為0.1毫米,X正方向向右,Y正方向向上。
            MM_TWIPS;每個(gè)邏輯單位轉(zhuǎn)換為打印點(diǎn)的1/20(即1/1400英寸),X正方向向右,Y方向向上。

             


            三、GDI  對(duì)象

            畫筆、刷子、位圖、區(qū)域、字體、調(diào)色板是可以創(chuàng)建的6種GDI對(duì)象。
            GetStockObject(obj);獲取對(duì)象的句柄。
            DeleteObject(obj);  刪除對(duì)象。(注意不能在有效的設(shè)備描述表中刪除。)
            除調(diào)色板外,其他對(duì)象都是通過SelectObject(hdc,obj);選入設(shè)備描述表中。
            GetObject(HOBJ,size,lpObj); lpObj可以是下列的結(jié)構(gòu)體。獲取對(duì)象信息、
            BITMAP       //位圖
            DIBSECTION  //位圖
            EXTLOGPEN   //畫筆
            LOGBRUSH    //刷
            LOGFONT     //字體
            LOGPEN      //畫筆
            (1)畫筆(Pen) windows的默認(rèn)值:BLACK_PEN
            創(chuàng)建:
            方法一:hPen=CreatePen(iPenStyle,iWidth,crColor);
            iPenStyle的參數(shù):PS_SOLID    實(shí)心畫筆
               PS_DASH     破折號(hào)畫筆(在iWidth<1有效,否則系統(tǒng)會(huì)用實(shí)心筆替代)
               PS_DOT     虛線(在iWidth<1有效,否則系統(tǒng)會(huì)用實(shí)心筆替代)
              PS_DASHDOT  點(diǎn)劃線(在iWidth<1有效,否則系統(tǒng)會(huì)用實(shí)心筆替代)
              PS_DASHDOTDOT 雙重點(diǎn)劃線(在iWidth<1有效,否則系統(tǒng)會(huì)用實(shí)心筆替代)
              PS_NULL   空白筆
              PS_INSIDEFRAME  粗實(shí)線,當(dāng)iWidth>1可以使用抖動(dòng)色(不只是純色)

            方法二:LOGPEN logpen   //指定筆顏色、大小、類型的結(jié)構(gòu)體。同上。
             hPen=CreatePenIndirect(&logpen);

            (2)字體(Font) 默認(rèn)值:SYSTEM_FONT
            創(chuàng)建:
            一:CreateFont
            只用到2個(gè)參數(shù),其他都為0,例:CreateFont (0, 0, 0, 0, 0, 0, 0, 0, dwCharSet, 0, 0, 0, FIXED_PITCH, NULL)
            HFONT CreateFont(
              int nHeight,             // 字符寬度,邏輯單位
              int nWidth,              //
              int nEscapement,         // 斜放置字符串
              int nOrientation,        // 字符傾斜的角度,影響單個(gè)字符
              int fnWeight,            // 粗體。0—400標(biāo)準(zhǔn),700粗體
              DWORD fdwItalic,         // 斜體
              DWORD fdwUnderline,      // 下劃線
              DWORD fdwStrikeOut,      // 刪除線
              DWORD fdwCharSet,        // 1為默認(rèn)值。指定字體字符集一個(gè)字節(jié)的值(*不用理會(huì))
              DWORD fdwOutputPrecision,  // 輸出精度*
              DWORD fdwClipPrecision,  // 裁剪精度*
              DWORD fdwQuality,        // 期望匹配字體*
              DWORD fdwPitchAndFamily,  // 字體族*
              LPCTSTR lpszFace         // 字樣*
            );
                                             
            字體:
            SYSTEM_FONT
            SYSTEM_FIXED_FONT
            OEM_FIXED_FONT

            ANSI_FIXED_FONT、
            ANSI_VAR_FONT
            DEVICE_DEFAULT_FONT

            其中: WM_INPUTLANGCHANGE: dwCharSet = wParam ;
            二:LOGFONT logfont;
                CreateFontIndirect(&logfont);

            (3)刷子(Brush) 默認(rèn)值::WHITE_BRUSH
            系統(tǒng)的刷子: WHITE_BRUSH 
              LTGRAY_BRUSH    亮灰
              GRAY_BRUSH 灰
                            DKGRAY_BRUSH 黑灰
              BLACK_BRUSH
            創(chuàng)建:
            一:hBrush=CreateSolidBrush(crColor);
            二:hBrush=CreateHatchBrush(iHatchStyle,crColor);//創(chuàng)建有影線的刷子填充部分為陰影
            其中:iHatchStyle的參數(shù)如下:
             HS_BDIAGONAL   45度的斜線、
             HS_CROSS        十字型的線、
             HS_DIAGCROSS ×型
             HS_FDIAGONAL  135度斜線
             HS_HORIZONTAL   水平
             HS_VERTICAL  垂直 
            三:LOGBRUSH  logbrush
                CreateBrushIndirect(&logbrush);
            四: hBrush=CreatePatternBrush(HBITMAP hbmp);//創(chuàng)建位圖的刷子、
            五:hBrush=CreateDIBPatternBrushPt;//創(chuàng)建DIB位圖的刷子。
                CreateDIBPatternBrush,

             


            (4)位圖(Bitmap)默認(rèn)值:None(無);
             
            CreateBitmap,
            CreateBitmapIndirect,
            CreateCompatibleBitmap,
            CreateDIBitmap,
            CreateDIBSection
            CreateSolidBrush
            第一種::
            HBITMAP CreateBitmap(
              int nWidth,         // 寬
              int nHeight,        // 高
              UINT cPlanes,       // 顏色板的數(shù)目
              UINT cBitsPerPel,   // 沒像素的位數(shù)。
              CONST VOID *lpvBits // 指向顏色數(shù)據(jù)數(shù)組指針。這些顏色數(shù)據(jù)用來設(shè)置矩形區(qū)域內(nèi)像素的顏色。矩形區(qū)域中的每一掃描線必須是雙字節(jié)的整數(shù)倍(不足部分以0填充)。如果該參數(shù)為NULL,那么就表示沒有定義新位圖。
            );

            //簡(jiǎn)化版
            HBITMAP CreateCompatibleBitmap( HDC hdc,     int nWidth,   int nHeight  );


            //第二種
            HBITMAP CreateBitmapIndirect(&bitmap);bitmap是BITMAP結(jié)構(gòu)體

            (5)區(qū)域(Region)區(qū)域是對(duì)顯示器上一個(gè)范圍的描述,這個(gè)范圍是矩形、多邊形和橢圓的組合,把區(qū)域選進(jìn)設(shè)備描述表,區(qū)域可以用于繪制和剪裁。
            作用:iRgnType=CombineRgn(hRgn,hRgn1,hRgn2,iCombine);
            iCombine的參數(shù):
            RGN_AND  兩個(gè)源區(qū)域的公共部分
            RGN_OR   全部
            RGN_XOR  除去公共部分。
            RGN_DIFF hRgn1不在hRgn2的部分
            RGN_COPY hRgn1的全部。(忽略hRgn2);
            iRgnType的參數(shù):
            NULLREGION     得到空區(qū)域
            SIMPLEREGION   得到簡(jiǎn)單的矩形、橢圓或多邊形
            COMPLEXREGION   多個(gè)多邊形、矩形、橢圓的組合
            ERROR  出錯(cuò)
            創(chuàng)建:
            一:創(chuàng)建矩形區(qū)域:
                hRgn = CreateRectRgn (xLeft, yTop, xRight, yBottom) ;
                hRgn = CreateRectRgnIndirect (&rect) ;
            二: 創(chuàng)建橢圓剪裁區(qū)域;
               hRgn = CreateEllipticRgn (xLeft, yTop, xRight, yBottom) ;//
               hRgn = CreateEllipticRgnIndirect (&rect) ;
            三;創(chuàng)建多邊形剪裁區(qū)域
             hRgn = CreatePolygonRgn (&point, iCount, iPolyFillMode) ;

            ///////////////////////////////////////////////////////////
            矩形與區(qū)域的剪裁
            對(duì)于矩形;
            InvalidateRect (hwnd, NULL, TRUE) ;//使矩形無效
            GetUpdateRect 來取得失效矩形的座標(biāo)或WM_PAINT中從PAINTSTRUCT結(jié)構(gòu)中得到
            ValidateRect使有效
            對(duì)于區(qū)域:
            InvalidateRgn (hwnd, hRgn, bErase) ;
            ValidateRgn (hwnd, hRgn) ;


            SelectObject(hdc,hRgn);  或SelectClipRgn(hdc,hRgn);選進(jìn)設(shè)備描述表
            ExcludeClipRect用於將一個(gè)矩形從剪裁區(qū)域里排除掉,
            IntersectClipRect 用於建立一個(gè)新的剪裁區(qū)域,它是前一個(gè)剪裁區(qū)域與一個(gè)矩形的交,OffsetClipRgn 用於將剪裁區(qū)域移動(dòng)到顯示區(qū)域的另一部分。


            四、設(shè)備描述表

            理解1:設(shè)備描述表中包含許多確定的GDI函數(shù)如何在設(shè)備上工作的當(dāng)前屬性。這些屬性允許傳遞給GDI函數(shù)的參數(shù)只包含其實(shí)坐標(biāo)或者尺寸信息,而不包含Windows在設(shè)備上顯示對(duì)象時(shí)需要的所以其他信息、

            理解2:一個(gè)設(shè)備描述表通常指一個(gè)物理顯示設(shè)備。如視頻顯示器或打印機(jī)。

            理解3:設(shè)備描述表(簡(jiǎn)稱DC)實(shí)際上是GDI內(nèi)部保存的數(shù)據(jù)結(jié)構(gòu)。有些值是圖形化的“屬性”,這些屬性定義了一些GDI繪圖函數(shù)的工作,例如:文本顏色,文本的背景、TextOut函數(shù)的X坐標(biāo),y坐標(biāo)映射到窗口客戶區(qū)的方式,還有windows顯示的字體、

            //////////////////////////////////獲取句柄hdc

            (1)注意這不能使無效區(qū)域變的有效
            hdc=GetDC(hwnd);
            //////
            ReleaseDC(hwnd,hdc);

            (2)在處理WM_PAINT消息使使用。能使無效區(qū)域變的有效、重繪。
            hdc=BeginPaint(hwnd,&ps);
            /////////
            EndPaint(hwnd,&ps);

            (3)能獲得非客戶區(qū)的繪制消息。包括窗口的標(biāo)題欄,菜單欄,和滾動(dòng)條、框架等。
            在WM_NCPAINT中處理、
            hdc=GetWindowDC(hwnd);
            //////
            ReleaseDC(hwnd,hdc);

            (4)通用獲得DC的方法。視頻顯示器或者打印機(jī)上的DC.
            hdc=CreateDC(TEXT("DISPLAY"),NULL,NULL,NULL);   //獲得整個(gè)屏幕的dc
            //////////////
            DeleteDC(hdc);

            (5)獲得一個(gè)dc,其參數(shù)與CreateDC的參數(shù)相同。但是不能用這個(gè)信息環(huán)境句柄往設(shè)備描述表上寫東西。////特別 注意。
            hdc=CreateIC(TEXT("DISPLAY"),NULL,NULL,NULL);
            /////////
            DeleteDC (hdc);


            (6)可以把位圖選進(jìn)內(nèi)部設(shè)備描述表。然后用GDI 函數(shù)在位圖上繪畫。
            hdcMem=CreateCompatibleDC(hdc); //位圖選進(jìn)內(nèi)部設(shè)備描述表
            ///////////
            DeleteDC (hdcMem);

            (7)獲取元文件的設(shè)備描述表來創(chuàng)建元文件。
            hdcMeta=CreateMetaFile(pszFilename);
            //////////
            hmf=ColseMetaFile(hdcMeta)

            /////////////////////獲取信息
            (8)獲取視頻顯示器的尺寸,色彩等信息。
            int iValue=GetDeviceCaps(hdc,ilndex);

            ///////////////////保存設(shè)備描述表。
            (9)
            SaveDC(hdc);可以保存多次
            RestoreDC(hdc,-1);恢復(fù)DC



            五、設(shè)備描述表屬性

            1\一些空間隔的填充。如點(diǎn)和虛線之間的間隔填充。
            背景模式:使用SetBkMode(hdc,iBkMode)修改
            (1)OPAQUE(系統(tǒng)默認(rèn)值),間隔使用背景顏色填充。
                   修改:SetBkColor(hdc,crColor);  //修改背景色
              GetBkColor(hdc);  獲取背景色
            (2)TRANSPARENT  不填充間隔 ,不擦除背景,透明模式
              

            2\繪圖方式:
            用畫筆進(jìn)行繪圖實(shí)際是畫筆像素與目標(biāo)位置處原來像素之間的某種布爾值運(yùn)算。
            默認(rèn)值::R2_COPYPEN;
            修改:
            SetROP2(hdc,iDrawMode);
            獲取:
            iDrawMode=GetROP2(hdc);


            posted on 2011-09-13 16:12 Yu_ 閱讀(3311) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Windows程序設(shè)計(jì)
            久久综合狠狠综合久久综合88 | 亚洲国产天堂久久久久久| 国产精品久久久久久久| 国产精品无码久久综合| 精品无码久久久久久国产| 久久午夜综合久久| 欧美一区二区三区久久综| 亚洲乱亚洲乱淫久久| 国产精品99久久久精品无码| 亚洲αv久久久噜噜噜噜噜| 国产欧美一区二区久久| 伊人久久大香线蕉精品不卡| 国产精品99精品久久免费| 久久人人超碰精品CAOPOREN| 中文字幕乱码久久午夜| 精品久久久久中文字| 久久精品www人人爽人人| 欧美久久一区二区三区| 狠狠综合久久AV一区二区三区| 青青草原1769久久免费播放| 久久99热这里只频精品6| 91超碰碰碰碰久久久久久综合| 国产69精品久久久久观看软件| 亚洲国产成人久久综合碰碰动漫3d| 77777亚洲午夜久久多喷| 久久这里只有精品首页| 午夜精品久久久久久毛片| 性做久久久久久久久| 999久久久国产精品| 99久久国产热无码精品免费| 一本久道久久综合狠狠躁AV| 亚洲国产精品久久久久久| 亚洲精品乱码久久久久久蜜桃图片 | 久久99精品国产麻豆婷婷| 久久精品天天中文字幕人妻| 五月丁香综合激情六月久久| 性欧美大战久久久久久久| 亚洲国产高清精品线久久 | 亚洲精品无码专区久久同性男| 9191精品国产免费久久| a高清免费毛片久久|