• <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 - 131, comments - 12, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理


            在視圖類中添加私有bool類型的m_bDraw,m_bDraw在視圖類構造函數中初始化為FALSE.在OnLButtonDown和OnLButtonUp消息函數中分別設置為TRUE和FALSE。
            在視圖類添加私有CPoint類型m_ptOld,在OnLButtonDown消息函數中初始化這個變量m_ptOld=point;
            void CTestView::OnMouseMove(UINT nFlags, CPoint point) 
            {
            // TODO: Add your message handler code here and/or call default
            //扇形
            CClientDC dc(this);
            //SetROP2設置繪圖模式函數
            //dc.SetROP2(R2_BLACK);
            //dc.SetROP2(R2_MERGENOTPEN);
            CPen pen(PS_SOLID,1,#ff0000);
            CPen *pOldpen=dc.SelectObject(&pen);
            if(TRUE==m_bDraw)
            {
            dc.MoveTo(m_ptOrigin);
            dc.LineTo(point);
            dc.LineTo(m_ptOld);
            m_ptOld=point;
            }
            dc.SelectObject(pOldpen);
            //連續線條
            /*
            CClientDC dc(this);
            CPen pen(PS_SOLID,3,#ff0000);
            CPen *pOldPen=dc.SelectObject(&pen);
            if(TRUE==m_bDraw)
            {
            dc.MoveTo(m_ptOrigin);
            dc.LineTo(point);
            m_ptOrigin=point;
            }
            dc.SelectObject(pOldPen);
            */
            CView::OnMouseMove(nFlags, point);
            }

            posted @ 2012-09-29 16:23 盛勝 閱讀(667) | 評論 (0)編輯 收藏

            普通畫刷
            void CTestView::OnLButtonUp(UINT nFlags, CPoint point)
            {
                  CBrush brushRed(RGB (255,0,0));
            CBrush brushGreen(RGB (0,255,0));
            CBrush brushBlue(RGB (0,0,255));
            CClientDC dc(this);
            dc.FillRect(CRect(m_ptOrigin,point),&brushGreen);



            CView::OnLButtonUp(nFlags, point);
            }
            位圖畫刷
            void CTestView::OnLButtonUp(UINT nFlags, CPoint point) 
            {  
            //創建位圖對象
            CBitmap bitmap;
            //加載位圖資源
            bitmap.LoadBitmap(IDB_BITMAP1);
            //創建位圖畫刷
            CBrush brush(&bitmap);
            //創建并獲得設備描述表
            CClientDC dc(this);
            //利用位圖畫刷填充鼠標拖拽過程中形成的矩形區域
            dc.FillRect(CRect(m_ptOrigin,point),&brush);
            CView::OnLButtonUp(nFlags, point);
            }
            透明畫刷
            void CTestView::OnLButtonUp(UINT nFlags, CPoint point) 

            //創建并獲得設備描述表
            CClientDC dc(this);
            //創建一個空畫刷;getstockobject的返回類型是HGDIOBJECT,需要進行強制類型轉換
            //GetStockObject函數可以獲取一個畫刷句柄,FromHandle函數可以將畫刷句柄轉換為畫刷對象,繪圖操作需要的是一個畫刷對象
            CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
            //將空畫刷填入設備描述表ccwf
            CBrush *pOldBrush=dc.SelectObject(pBrush);
            //繪制一個矩形
            dc.Rectangle(CRect(m_ptOrigin,point));
            dc.SelectObject(pOldBrush);
            CView::OnLButtonUp(nFlags, point);
            }

            posted @ 2012-09-29 14:15 盛勝 閱讀(937) | 評論 (0)編輯 收藏


            void CTestView::OnLButtonUp(UINT nFlags, CPoint point) 
            {
            //CClientDC派生于CDC類,構造時自動調用GetDC函數。一旦定義了CClientDC的一個對象就不用再調用GetDC和ReleaseDC
            //CClientDC dc(this);
            //pen里面第一個參數:線的類型,第二個參數:線的寬度;第三個參數:線的顏色(紅,綠,藍)
            CPen pen(PS_DASH,1,RGB (255,0,0));
            CClientDC dc(this);
            CPen* pOldPen=dc.SelectObject(&pen);
            dc.MoveTo(m_ptOrigin);
            dc.LineTo(point);
            dc.SelectObject(pOldPen);
            CView::OnLButtonUp(nFlags, point);
            }

            posted @ 2012-09-29 10:06 盛勝 閱讀(297) | 評論 (0)編輯 收藏

            一、要修改窗口的背景,步驟如下:
            1、導入一個位圖文件。

            2、創建一個View窗體的刪除背景時的相應函數
            BOOL CWndMapView::OnEraseBkgnd(CDC* pDC)
            或者在view類的OnDraw響應函數
            void CWndMapView::OnDraw(CDC* pDC)
            這兩個函數的區別是,一個在擦除時直接將圖片貼上;一個是先擦除,
            然后在OnDraw時再將圖片貼上。所以,后一個會看到閃爍,前一個則無。

            3、創建一個位圖對象,和剛導入的位圖相關聯。
            CBitmap bitmap;
            bitmap.LoadBitmap(IDB_BITMAP1);

            4、創建兼容DC
            CDC dcCompatibale;
            dcCompatibale.CreateCompatibleDC(pDC);

            5、將位圖選擇到兼容DC中
            dcCompatibale.SelectObject(&bitmap);

            6、將兼容DC中的內容拷貝到當前DC中
            pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatibale,0,0,SRCCOPY);

            代碼如下:
            BOOL CWndMapView::OnEraseBkgnd(CDC* pDC) 
            {
            // TODO: Add your message handler code here and/or call default

            CBitmap bitmap;      //產生一個位圖變量
            bitmap.LoadBitmap(IDB_BITMAP1); //讓它和導入的位圖ID相關聯

            CDC dcCompatibale;     //產生一個兼容的設備容器變量
            dcCompatibale.CreateCompatibleDC(pDC); /*創建一個和OnEraseBkgnd函數
            所傳遞的參數pDC,兼容的設備容器*/

            dcCompatibale.SelectObject(&bitmap); //將位圖變量放入兼容設備中

            CRect rect;       //產生一個矩形變量rect
            GetClientRect(&rect);    //獲得客戶端的矩形區域,并付值給rect
            pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatibale,0,0,SRCCOPY);
            /*使用傳參的指針所指的設備驅動成員函數,將兼容的設備驅動復制過來*/

            //如果希望顯示的位圖能自動拉伸或收縮,以適應窗體的大小,將上面這句話改為。
            /* BITMAP map;
            bitmap.GetBitmap(&map);    //先獲取圖片的大小付給map變量
            pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatibale,
               0,0,map.bmWidth,map.bmHeight,SRCCOPY);*/ //然后用可拉伸的函數進行復制

            return TRUE;      /*注意,這里使用系統默認的回調函數,
            會將我們所繪的內容擦除。所以必須自己返回一個BOOL值。
            但如果是在view類的OnDraw響應函數,就沒有返回了。*/
            //return CView::OnEraseBkgnd(pDC);
            }

            posted @ 2012-09-29 09:16 盛勝 閱讀(533) | 評論 (0)編輯 收藏

            建立工程文件
            選擇單文檔其他全部默認


            添加LButtonDown和LButtonUp的消息響應函數

            點擊上邊的  查看(v)->建立類向導

            這里已經點擊過Add Funtion ,點擊后工程自動添加消息函數。點擊edit code可以進行代碼編輯。
            void CTestView::OnLButtonDown(UINT nFlags, CPoint point) 
            {
            // TODO: Add your message handler code here and/or call default
            m_ptOrigin=point;
            //MessageBox("view Clicked!");
            CView::OnLButtonDown(nFlags, point);
            }
            同理OnLButtonUp消息函數也一樣添加,代碼為下邊:
            void CTestView::OnLButtonUp(UINT nFlags, CPoint point) 
            {
            //1
            /*
            // TODO: Add your message handler code here and/or call default
            //首先獲取窗口的設備描述表
            HDC hdc;
            //m_hWnd是CWnd的一個成員變量用來保存窗口句柄,而CTestView派生于CWnd類。GetDC全局函數獲取得當前窗口的設備描述表
            hdc = ::GetDC(m_hWnd);
            //移動到線條的起點
            MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);
            //畫線
            LineTo(hdc,point.x,point.y);
            //釋放設備描述表
            ::ReleaseDC(m_hWnd,hdc);
            */
            //CWnd類提供了成員函數GetDC和ReleaseDC,先利用Platform SDK函數實現畫線功能時,這兩個函數前面都加::表示全局
            //函數
            //2
            /*
            //MFC封裝了CDC類(一個設備描述表)
            CDC* pDC=GetDC();
            pDC->MoveTo(m_ptOrigin);
            pDC->LineTo(point);
            ReleaseDC(pDC);
            */
            //3
            /*
            //CClientDC派生于CDC類,構造時自動調用GetDC函數。一旦定義了CClientDC的一個對象就不用再調用GetDC和ReleaseDC
            //CClientDC dc(this);
            CClientDC dc(GetParent());
            dc.MoveTo(m_ptOrigin);
            dc.LineTo(point);
            */
            //4
                    //CwindowDC的優勢:對象可以訪問整個窗口區域
            //CWindowDC dc(this);
            CWindowDC dc(GetParent());
            dc.MoveTo(m_ptOrigin);
            dc.LineTo(point);
            CView::OnLButtonUp(nFlags, point);
            }

            posted @ 2012-09-28 16:08 盛勝 閱讀(353) | 評論 (0)編輯 收藏

            SHCreateDirectoryEx是window flatform下建立文件夾的函數,他的功能比CreateDirectory(Ex)大。如果創建文件夾目錄有的中間目錄不存在,SHCreateDirectoryEx可以建立,而CreateDirectory(Ex)則做不到這一點。 

            int SHCreateDirectoryEx(          
                HWND hwnd,
                LPCTSTR pszPath,
                SECURITY_ATTRIBUTES *psa
            );
            hwnd是窗口句柄,可以為NULL.
            psa是安全屬性設置項,可以為NULL.
            pszPath要注意,這個路徑必須是絕對路徑. 比如c:\test, d:\hello, 不能寫成test,也不能寫成.\test這樣的相對路徑。 

            posted @ 2012-09-28 08:52 盛勝 閱讀(1059) | 評論 (0)編輯 收藏

            SetFileAttributes和GetFileAttributes

            設置文件或目錄的屬性,函數原型如下:

            BOOL SetFileAttributes(

                LPCTSTR lpFileName,

                DWORD dwFileAttributes);

                參數:

                lpFileName:輸入參數,為需要設置文件屬性的文件或目錄。

              返回值:

                返回BOOL值,表示是否成功。

                使用說明:

                文件系統中對文件屬性的表示使用了DWORD類型的數據,多個文件屬性用“|”運算連在一起

            DWORD GetFileAttributes(

                    LPCTSTR lpFilename);

                參數:

                hFileName: 輸入參數,為需要獲取屬性的文件或目錄

                返回值:

                返回DWORD值,表示文件屬性。如果返回INVALID_FILE_ATTRIBUTES,則表示失敗,可使用GetLastError函數獲取錯誤信息

                使用說明:
                要判斷文件屬性,需要使用“&”與屬性常量進行運算,如果運行結果為真,則表示具有這種屬性

            DWORD GetFileAttributes(

                  LPCTSTR lpFileName,

                  GET_FILEEX_INFO_LEVELS fInfoLevelId,

                  LPVOID lpFileInfomation);

                參數:

                lpFileName: 輸出參數,為需要獲取屬性的文件或目錄

                fInfoLevelId:輸入參數,是獲取文件屬性的類別,會影響到lpFileInfomation參數具體采用什么形式輸出結果。但是本參數一般只能指定為GetFileExInfoStandard

                lpFileInfomation: 輸出參數,用于返回結果。如果fInfoLevelId參數為GetFileInfoStandard,則為LPWIN32_FILE_ATTRIBUTE_DATA類型。

                返回值:

                返回BOOL值,表示十分成功

            posted @ 2012-09-28 08:46 盛勝 閱讀(693) | 評論 (0)編輯 收藏

            這個錯誤首先要在當前文檔頭文件添加#include "stdio.h"
            嘗試編譯如果不行注意添加的stdio.h要在原來的XXXX.h的下面。
            如果使用的是vs2008要把工程的屬性從Unicode改成多字符集。

            posted @ 2012-09-27 16:09 盛勝 閱讀(604) | 評論 (0)編輯 收藏

            原理:
            (1)在NM_CUSTOMDRAW消息處理函數中根據 dwDrawStage 狀態來編寫不同的處理代碼
            (2)主要是判斷 CDDS_ITEMPREPAINT 狀態
            (3)不要在對話框資源管理器中設置CListCtrl控件的Owner draw fixed屬性,否則在Debug模式下報錯。

            方法一,使用NM_CUSTOMDRAW消息映射
            (1)聲明消息處理函數:afx_msg void OnCustomDrawList ( NMHDR* pNMHDR, LRESULT* pResult );
            (1)手動添加消息映射:ON_NOTIFY_REFLECT ( NM_CUSTOMDRAW, OnCustomDrawList )
            (2)編寫自繪消息處理函數

            void CListCtrl2::OnCustomDrawList ( NMHDR* pNMHDR, LRESULT* pResult )
            {     
                 NMLVCUSTOMDRAW*    pLVCD   =    reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);   
                *pResult = CDRF_DODEFAULT;   
                 int rowIndex = static_cast<int>(pLVCD->nmcd.dwItemSpec);
                if(pLVCD->nmcd.dwDrawStage == CDDS_PREPAINT)   
                {   
                    *pResult = CDRF_NOTIFYITEMDRAW;   
                 }   
                else if (pLVCD->nmcd.dwDrawStage == CDDS_ITEMPREPAINT)   
                {     
                    *pResult = CDRF_NOTIFYSUBITEMDRAW;   
                 }//畫項
                else if (pLVCD->nmcd.dwDrawStage == (CDDS_ITEMPREPAINT | CDDS_SUBITEM))   
                {
                    int nitem = static_cast<int>    (pLVCD->nmcd.dwItemSpec);   
                    int nsubitem = pLVCD->iSubItem;   
                     CDC* pDC = CDC::FromHandle(pLVCD->nmcd.hdc);  
                     CString str;   
                     CRect rect;
                     CSize msize; 
                     UINT nFormat = DT_VCENTER | DT_SINGLELINE;   
                     rect.left += 3; //調整自繪輸出位置   
                    //get    rect    of    the    sub    item    which    is    going    to    paint   
                     GetSubItemRect(nitem,nsubitem,LVIR_BOUNDS,rect);     
                    //get    the    context    is    going    to    paint    on    the    subitem   
                     str = GetItemText(nitem,nsubitem);   

                    //如果選中
                    if(LVIS_SELECTED == this->GetItemState(rowIndex,LVIS_SELECTED)) //判斷當前項是否選中   
                    { 
                        //所畫項是選中項   
                         pDC->SetTextColor(#d93c28);//字體顏色,因該是白色   
                         pDC->FillSolidRect(&rect,#567de4);//背景,深藍色吧,試試               
                     }   
                    else   
                    {
                         pDC->SetTextColor(#000000);//字體顏色,因該是白色   
                         pDC->FillSolidRect(&rect,#ffffff);//背景,深藍色吧,試試   
                     }
                     msize = pDC->GetTextExtent(str);
                     pDC->DrawText(str,   &rect,    nFormat); //自繪輸出
                    *pResult = CDRF_SKIPDEFAULT;
                 }
            }

            posted @ 2012-09-27 14:49 盛勝 閱讀(1144) | 評論 (0)編輯 收藏

            ShellExecute(   hWnd: HWND;        {指定父窗口句柄}
              Operation: PChar;  {指定動作, 譬如: open、print}
              FileName: PChar;  {指定要打開的文件或程序}
              Parameters: PChar; {給要打開的程序指定參數; 如果打開的是文件這里應該是 nil}
              Directory: PChar;  {缺省目錄}
              ShowCmd: Integer  {打開選項}
            ): HINST;            {執行成功會返回應用程序句柄; 如果這個值 <= 32, 表示執行錯誤}
            //返回值可能的錯誤有:
                                  = 0  {內存不足}
            ERROR_FILE_NOT_FOUND  = 2;  {文件名錯誤}
            ERROR_PATH_NOT_FOUND  = 3;  {路徑名錯誤}
            ERROR_BAD_FORMAT      = 11; {EXE 文件無效}
            SE_ERR_SHARE          = 26; {發生共享錯誤}
            SE_ERR_ASSOCINCOMPLETE = 27; {文件名不完全或無效}
            SE_ERR_DDETIMEOUT      = 28; {超時}
            SE_ERR_DDEFAIL        = 29; {DDE 事務失敗}
            SE_ERR_DDEBUSY        = 30; {正在處理其他 DDE 事務而不能完成該 DDE 事務}
            SE_ERR_NOASSOC        = 31; {沒有相關聯的應用程序}
            //ShowCmd 參數可選值:
            SW_HIDE            = 0;  {隱藏}
            SW_SHOWNORMAL      = 1;  {用最近的大小和位置顯示, 激活}
            SW_NORMAL          = 1;  {同 SW_SHOWNORMAL}
            SW_SHOWMINIMIZED  = 2;  {最小化, 激活}
            SW_SHOWMAXIMIZED  = 3;  {最大化, 激活}
            SW_MAXIMIZE        = 3;  {同 SW_SHOWMAXIMIZED}
            SW_SHOWNOACTIVATE  = 4;  {用最近的大小和位置顯示, 不激活}
            SW_SHOW            = 5;  {同 SW_SHOWNORMAL}
            SW_MINIMIZE        = 6;  {最小化, 不激活}
            SW_SHOWMINNOACTIVE = 7;  {同 SW_MINIMIZE}
            SW_SHOWNA          = 8;  {同 SW_SHOWNOACTIVATE}
            SW_RESTORE        = 9;  {同 SW_SHOWNORMAL}
            SW_SHOWDEFAULT    = 10; {同 SW_SHOWNORMAL}
            SW_MAX            = 10; {同 SW_SHOWNORMAL}
            //舉例說明更多問題
            (別忘了 uses ShellAPI;): {譬如用記事本打開一個文件}
            begin   ShellExecute(Handle, 'open', 'notepad.exe', 'C:\WINDOWS\SchedLgU.Txt', nil, SW_SHOWNORMAL); end;
            {第一個參數是用來當作錯誤提示窗口的父窗口的, 不能是 nil, 可以是 0(也就是桌面窗口)}
            begin   ShellExecute(0, 'open', 'notepad.exe', 'C:\WINDOWS\SchedLgU.Txt', nil, SW_SHOWNORMAL); end;
            {第二個參數如果是 nil, 也會默認位 open}
            begin   ShellExecute(0, nil, 'notepad.exe', 'C:\WINDOWS\SchedLgU.Txt', nil, SW_SHOWNORMAL); end;
            {文件路徑可以放在參數五}
            begin   ShellExecute(0, nil, 'notepad.exe', 'SchedLgU.Txt', 'C:\WINDOWS', SW_SHOWNORMAL); end;
            {把參數三直接指定為要打開的文件, 文件將用對應默認程序打開; 次數參數四應為 nil}
            begin   ShellExecute(0, nil, 'SchedLgU.Txt', nil, 'C:\WINDOWS', SW_SHOWNORMAL); end;
            {如果文件在: 程序目錄/當前目錄/System32/Windows/PATH環境變量中, 參數五也可以 nil}
            begin   ShellExecute(0, nil, 'SchedLgU.Txt', nil, nil, SW_SHOWNORMAL); end;
            {如果參數三是個文件, 可以用參數二命令打印}
            begin   ShellExecute(0, 'print', 'SchedLgU.Txt', nil, nil, 1); end;
            {用 IE 打開網頁} begin   ShellExecute(Handle, 'open', 'IExplore.EXE', 'about:blank', nil, SW_SHOWNORMAL); end;
            {用火狐打開網頁} begin   ShellExecute(Handle, 'open', 'firefox.exe', 'about:blank', nil, SW_SHOWNORMAL); end;
            {用默認瀏覽器打開網頁} begin   ShellExecute(Handle, 'open', 'Explorer.exe', 'about:blank', nil, SW_SHOWNORMAL); end;
            {還是用默認瀏覽器打開網頁} begin   ShellExecute(0, nil, 'http://del.cnblogs.com', nil, nil, 1); end;

            posted @ 2012-09-27 10:57 盛勝 閱讀(303) | 評論 (0)編輯 收藏

            僅列出標題
            共14頁: First 6 7 8 9 10 11 12 13 14 
            久久久噜噜噜久久中文字幕色伊伊 | 久久久久久国产精品无码下载| 国产精品久久波多野结衣| 久久91精品国产91久久小草| 亚洲欧美精品伊人久久| 久久99精品久久久久久9蜜桃| 久久久精品日本一区二区三区| 欧美精品九九99久久在观看| 老男人久久青草av高清| 狠狠色丁香久久婷婷综合蜜芽五月| 久久香蕉国产线看观看精品yw| 国产精品久久网| 久久综合色区| 一本色道久久88—综合亚洲精品| 久久国产乱子伦免费精品| 热久久国产精品| 精品久久久久久中文字幕大豆网| 色欲av伊人久久大香线蕉影院| 久久久久中文字幕| 久久精品国产男包| 97精品伊人久久久大香线蕉| 国产精品成人久久久| 伊人久久免费视频| 嫩草伊人久久精品少妇AV| 久久午夜无码鲁丝片午夜精品| 久久国产精品77777| 久久WWW免费人成一看片| 国产精品成人久久久久三级午夜电影| 亚洲精品乱码久久久久久久久久久久 | 久久青青色综合| 久久伊人精品青青草原高清| 国内精品人妻无码久久久影院导航| 精品国产一区二区三区久久蜜臀| 久久精品中文闷骚内射| 久久久久人妻精品一区二区三区| 久久亚洲国产精品五月天婷| 四虎国产精品免费久久久 | 国产国产成人久久精品| 久久人人爽人人爽人人片av高请| 亚洲欧美精品一区久久中文字幕| 精品久久久久久99人妻|