• <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>

            我住包子山

            this->blog.MoveTo("blog.baozishan.in")

            vc++技術(shù)內(nèi)幕學(xué)習(xí)心得1

            這篇心得關(guān)于技術(shù)內(nèi)幕第五章,比較的基礎(chǔ)..
            我是VC++的初學(xué)者
            vc++
            技術(shù)內(nèi)幕這本書(shū)我是去年暑假開(kāi)始看的,那時(shí)候剛學(xué)windows編程,雖然之前用過(guò)c#,vb,不過(guò)都沒(méi)怎么練習(xí),這本書(shū)我大概看了前面的80%,不過(guò)都未曾動(dòng)手,近日打算從頭練習(xí)一下,在這里記些筆記
            第五章第一個(gè)例子很簡(jiǎn)單
            一個(gè)單文檔MFC應(yīng)用程序,View類(lèi)中一個(gè)CRect類(lèi)型變量保存矩形的信息,一個(gè)int型保存矩形顏色的屬性
            WM_LBUTTONDOWN
            響應(yīng)函數(shù)判斷單擊左鍵時(shí)鼠標(biāo)位置是不是在之前那個(gè)矩形區(qū)域內(nèi),是的話變換矩形顏色的屬性,而且命令矩形區(qū)域重繪..
            OnDraw()
            中用dc選取矩形顏色,繪制矩形的內(nèi)切橢圓

            應(yīng)用的函數(shù)有:

            virtual CGdiObject* CDC::SelectStockObject(

            int nIndex

            );//選取顏色,這里只選畫(huà)刷大概有如下畫(huà)刷
            BLACK_BRUSH DKGRAY_BRUSH GRAY_BRUSH HOLLOW_BRUSH LTGRAY_BRUSH NULL_BRUSH WHITE_BRUSH
            BOOL CDC::Ellipse(LPCRECT lpRect);//
            畫(huà)矩形對(duì)應(yīng)的內(nèi)切橢圓
            BOOL CRECT::PtInRect(

            POINT point 

            ) const throw( );//判斷point是否在矩形中

            注意一點(diǎn)就是CView::OnLButtonDown(UINT nFlags, CPoint point)
            這里的Point坐標(biāo)是Viewclient坐標(biāo),如果需要全局坐標(biāo)需要轉(zhuǎn)換

             

            第二個(gè)例子關(guān)于映射模式

             

            不同的映射模式,對(duì)應(yīng)的坐標(biāo)是有區(qū)別的,而且他們的邏輯單位比例都不同

             

            固定比例的映射模式有

             

            Mapping Mode

            Logical Unit

            MM_LOENGLISH

            0.01 inch

            MM_HIENGLISH

            0.001 inch

            MM_LOMETRIC

            0.1 mm

            MM_HIMETRIC

            0.01 mm

            MM_TWIPS

            1/1440 inch

             

            可變比例的映射模式

            MM_ISOTROPIC and MM_ANISOTROPIC

            我自己寫(xiě)了一個(gè)Demo看了一下,好像只有MM_ANISOTROPICMM_TEXTx軸左向右,y軸上到下,DC原點(diǎn)為0,0

            其他的映射模式x軸一樣,y軸變成了從下至上,DC原點(diǎn)還是0,0

            CDC的幾個(gè)函數(shù)這里有必要說(shuō)說(shuō)
            virtual int CDC::SetMapMode(
               int nMapMode
            );
            int CDC::GetMapMode() const;
            設(shè)置/讀取DC的映射模式

             

            virtual CSize CDC::SetWindowExt(
               int cx,
               int cy
            );//
            設(shè)置窗體范圍

            virtual CSize CDC::SetViewportExt(
               int cx,
               int cy
            );//
            設(shè)置視口范圍

            virtual CPoint CDC::SetViewportOrg(
               int x,
               int y
            );//
            設(shè)置(0,0)點(diǎn)的位置

            窗體范圍和視口范圍的設(shè)置會(huì)影響可變比例映射
            可變比例映射的x,y計(jì)算方法參看下面的公式

            x scale factor = x viewport extent / x window extent   

            y scale factor = y viewport extent / y window extent   

            device x = logical x* x scale factor + x origin offset   

            device y = logical y* y scale factor + y origin offset

            CDC成員函數(shù)的參數(shù)大都是用邏輯坐標(biāo),但是CWnd的成員卻以設(shè)備坐標(biāo)為參數(shù)

            但是CDC成員中有函數(shù)

            LPtoDP,將邏輯坐標(biāo)轉(zhuǎn)換為設(shè)備坐標(biāo)

            void LPtoDP( LPPOINT lpPoints, int nCount = 1 ) const; void LPtoDP( LPRECT lpRect ) const; void LPtoDP( LPSIZE lpSize ) const;
            DPtoLP,剛好相反

            void DPtoLP( LPPOINT lpPoints, int nCount = 1 ) const; void DPtoLP( LPRECT lpRect ) const; void DPtoLP( LPSIZE lpSize ) const;

            第三個(gè)例子關(guān)于滾動(dòng)條

            文檔視圖的工程建立向?qū)е锌梢宰?/span>View繼承自CScrollView,使得View帶有滾動(dòng)條

            OnInitialUpdate函數(shù)在視圖建立后,OnDraw執(zhí)行之前執(zhí)行,所以對(duì)于滾動(dòng)條的初始化可以放在這個(gè)函數(shù)中

            void CScrollingViewWindowView::OnInitialUpdate()

            {

                CScrollView::OnInitialUpdate();

                CSize sizeTotal;

                // TODO: 計(jì)算此視圖的合計(jì)大小

                sizeTotal.cx = 20000; //20cm

                sizeTotal.cy = 30000; //30cm

                CSize sizePage(sizeTotal.cx/2,sizeTotal.cy/2);

                CSize sizeLine(sizeTotal.cx/50,sizeTotal.cy/50);

                SetScrollSizes(MM_TEXT, sizeTotal,sizePage,sizeLine);

            }

            雖然是初始化了滾動(dòng)條,但是不能夠使用快捷鍵(上下左右,pagedown啥的),需要手動(dòng)重載afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);

            需要用到CWnd::OnVScroll, CWnd::OnHScroll,分別控制縱向與橫向兩個(gè)滾動(dòng)條

            nSBCode

            Specifies a scroll-bar code that indicates the user's scrolling request. This parameter can be one of the following:

            ·         SB_BOTTOM   Scroll to bottom.

            ·         SB_ENDSCROLL   End scroll.

            ·         SB_LINEDOWN   Scroll one line down.

            ·         SB_LINEUP   Scroll one line up.

            ·         SB_PAGEDOWN   Scroll one page down.

            ·         SB_PAGEUP   Scroll one page up.

            ·         SB_THUMBPOSITION   Scroll to the absolute position. The current position is provided in nPos.

            ·         SB_THUMBTRACK   Drag scroll box to specified position. The current position is provided in nPos.

            ·         SB_TOP   Scroll to top.

                                                                   by gohan 11.23

            posted on 2007-11-23 16:37 Gohan 閱讀(1319) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): MFC/SDK

            精品久久8x国产免费观看| 久久伊人精品青青草原高清| 亚洲国产精品久久久久| 久久夜色精品国产网站| 伊人久久综合成人网| 亚洲精品国产第一综合99久久| 久久成人18免费网站| 久久久精品波多野结衣| 久久se这里只有精品| 久久久久国产一区二区| 久久精品国产一区二区三区不卡| 国内精品伊人久久久久影院对白 | 亚洲精品高清一二区久久| 99久久伊人精品综合观看| 91亚洲国产成人久久精品| 91精品国产高清久久久久久91 | 久久综合鬼色88久久精品综合自在自线噜噜| 国产激情久久久久影院老熟女| 情人伊人久久综合亚洲| 中文字幕久久欲求不满| 精品久久久久久无码中文字幕 | 午夜天堂av天堂久久久| 久久久久久久亚洲Av无码| 99精品国产在热久久| 一本一道久久精品综合| 久久久无码精品午夜| 精品久久久无码21p发布| 99精品久久久久中文字幕| 国产香蕉97碰碰久久人人| 久久午夜无码鲁丝片秋霞| 国产精品一区二区久久不卡 | 久久香综合精品久久伊人| 中文字幕无码免费久久| 国产精品久久精品| 久久涩综合| 99久久er这里只有精品18| 精品无码人妻久久久久久| 人妻久久久一区二区三区| 国产一区二区精品久久凹凸| 久久99国产精品久久99小说| 69久久夜色精品国产69|