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

            積木

            No sub title

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              140 Posts :: 1 Stories :: 11 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(1)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            #

            注意:剛剛試了下,似乎沒法響應。改日再行研究。或高手們還請不吝賜教。

             ClientToScreen(&point);
             theApp.GetContextMenuManager()->ShowPopupMenu(IDR_MENU_OBJECTMGR, point.x, point.y, this, TRUE);

            說明一點:
            1) 如果有用dockpane的話,則菜單控制需要在wm_rbuttondown中處理
            2) 用上面的方法,彈出來的右鍵菜單,將是灰的,而且就算你已經為它們寫了消息響應。它們也是灰的。(但請注意:此時的菜單項,雖是
            灰的,可它們是可以點擊的。即:它們是可以響應的。)
            要想解決菜單項灰的問題。可以用如下方法解決。
            步驟一:
             CMenu rMenu;
             rMenu.LoadMenu(IDR_MENU_OBJECTMGR);
             CMenu* pPopupMenu = rMenu.GetSubMenu(0);
             ClientToScreen(&point);
             pPopupMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTALIGN, point.x, point.y, this);

            上面的代碼其實是我們非常熟悉的處理方法。但用上它,vs2008中的皮膚效果將無法顯示出來。
            所以需要下面的步驟二。
            步驟二:
            不用上面的 pPopupMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTALIGN, point.x, point.y, this);
            將其改為:GetContextMenuManager()->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTALIGN, point.x, point.y, this);
            此時就萬事OK了。

            -----------------------------------------------
            總結:vs2008在皮膚以及一些新的功能特性方面,的確給我們帶來了不少的驚奇。可同時,也給我們帶來了不少的"麻煩"。
            posted @ 2011-11-03 14:03 Jacc.Kim 閱讀(473) | 評論 (0)編輯 收藏

            VS2008創建的單文檔應用程序,其默認的菜單欄字體與工具欄字體都偏小。具體原因,mao似是微軟在vs2008上,對字體的大小有設置過(有多寫了幾行代碼)
            下面是一種解決辦法:
            在CXxxxxApp::InitInstance()處,添加如下代碼:

             LOGFONT logfont = {0};
             ::SystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(LOGFONT), &logfont, 0);
             afxGlobalData.SetMenuFont(&logfont, true);
            posted @ 2011-11-03 11:48 Jacc.Kim 閱讀(1000) | 評論 (0)編輯 收藏

            以下代碼是將指定目錄或文件 lpcszResPath 添加到指定的 pParentItem 樹節點下。(如果 lpcszResPath 是一目錄,則遞歸其所有子目錄及文件)
            代碼如下:
            void CLocalResourceView::Add(HTREEITEM pParentItem /* = NULL */const char* lpcszResPath /* = NULL */)
            {
                
            if (!::PathFileExists((LPCTSTR)lpcszResPath))
                    
            return ;
                
            char szName[MAX_PATH] = { '\0' };
                GLOBALFUNCTION::GetNameByPath(lpcszResPath, szName);

                HTREEITEM hItem 
            = NULL;
                
            if (PathIsDirectory((LPCSTR)lpcszResPath))
                    hItem 
            = m_wndLocalResTree.InsertItem(szName, 00, pParentItem, NULL);
                
            else
                    hItem 
            = m_wndLocalResTree.InsertItem(szName, 22, pParentItem, NULL);

                
            if (PathIsDirectory((LPCSTR)lpcszResPath))
                {
                    
            //* 末尾添加上斜杠
                    GLOBALFUNCTION::IncludeDirTailSlash(lpcszResPath, szName);
                    
            string strPath(szName);
                    
            string strTemp("");

                    HANDLE hSearch;
                    WIN32_FIND_DATA data;
                    strTemp 
            = strPath + "*.*";
                    hSearch 
            = FindFirstFile(strTemp.c_str(), &data);
                    
            if (INVALID_HANDLE_VALUE != hSearch)
                    {
                        
            do 
                        {
                            
            if (!strcmp(data.cFileName, "."|| !strcmp(data.cFileName, ".."))
                                
            continue;
                            strTemp 
            = strPath + data.cFileName;
                            
            this->Add(hItem, strTemp.c_str());
                        } 
            while (FindNextFile(hSearch, &data));
                        FindClose(hSearch);
                    }
                }
            }


            posted @ 2011-10-21 11:52 Jacc.Kim 閱讀(508) | 評論 (0)編輯 收藏

            在窗口的OnCreate響應中,添加:
            DragAcceptFiles(TRUE);

            接著響應ONDROPFILES消息。在響應中添加如下方法:


             //hDropInfo是指向含有被拖放的文件名的結構體的句柄
             char szFilePathName[_MAX_PATH + 1] = {0};
             //函數原型:UINT DragQueryFile(HDROP hDrop, UINT iFile, LPTSTR lpszFile, UINT cch)
             //當iFile為0xFFFFFFFF時,后面兩個參數忽略,并返回拖放文件的個數
             UINT nNumOfFiles = DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 0);

             //循環處理拖放的多個文件
             for (UINT nIndex=0; nIndex < nNumOfFiles; nIndex++)
             {
              DragQueryFile(hDropInfo, nIndex, (LPTSTR)szFilePathName, _MAX_PATH);
              //通過文件路徑,做文件處理的那些事
              MessageBox((LPTSTR)szFilePathName);
             }

             DragFinish(hDropInfo);//拖放操作完成,釋放用來傳輸文件名的內存

            posted @ 2011-10-20 21:26 Jacc.Kim 閱讀(642) | 評論 (0)編輯 收藏

            Imports System
            Imports EnvDTE
            Imports EnvDTE80
            Imports EnvDTE90
            Imports System.Diagnostics

            Public Module Module1

                Sub EX_GeneralGUID()
                    '' General a guid string
                    ''
                    Dim strGUID As String
                    strGUID = System.Guid.NewGuid.ToString()
                    strGUID = UCase(strGUID.Replace("-", "_"))

                    ActiveDocument.Selection.text = strGUID
                End Sub
            End Module

            posted @ 2011-10-08 17:57 Jacc.Kim 閱讀(782) | 評論 (0)編輯 收藏

            1) 關于10進制、8進制、16進制的常量:
                  常規寫法,就表示10進制;
                  以數字0開頭的寫法,表示8進制;
                  以數字0加上小寫字母x開頭的,表示16進制;
            舉例如下:數字20的以上三種表示法:
                  10進制表示法:20
                  8進制表示法:024
                  16進制表示法:0x14

            2)  在常量后面跟上字母"U"或"u"(即:大小寫的U)時,表示unsigned類型
            3) 在常量后面跟上字母"L"或"l"(即:大小寫的L)時,表示長整型,即:long
            關于2) 與 3) 舉例
                  128u   //* 表示unsigned      //* 當然此處也可以用大寫的U
                  128L   //* 表示long             //* 當然此處也可以用小寫的l
                  128LU //* 表示unsigned long       //* 當然此處也可以用128LU

            4) 關于浮點數的常量:
                  在小數常量后面加上F或f,表示該常量為一單精度常量
                  如果在小數常量后面加上L或l,表示擴展精度(一種比單精度再精確的浮點數類型)

            5) 布爾常量,有且僅有兩種:true與false

            6) 關于char與wchar_t類型的字符常量
                  char 類型的常量,是指:用兩個單引號括起來的單個字符,即為char型常量。
                  如果在單引號的前面加上大寫字母L,則可表示wchar_t類型的常量。
            注釋:wchar_t是指一種寬字節類型。比如,有時候項目中可能就需要處理一些unicode或中文漢字之類的字符時,就需要用到它。
            舉例如下:
                  'a'         L'a'//wchar_t
            posted @ 2011-10-06 21:05 Jacc.Kim 閱讀(408) | 評論 (0)編輯 收藏

            聲明進度條對象
            CProgressCtrl m_wndProgress;
            創建按鈕對象

             //* 進度條
             CRect rectClient;
             rectClient.left = 10;
             rectClient.top = 10;
             rectClient.right = 200;
             rectClient.bottom = 18;

             if (!m_wndProgress.Create(WS_CHILD | WS_VISIBLE | PBS_SMOOTH, rectClient, this, 6))
             {
              TRACE0("Failed to create progress control.");
              return -1;
             }


             m_wndProgress.SetRange(0, 100);
             m_wndProgress.SetPos(37);
             m_wndProgress.SetStep(0);
             m_wndProgress.StepIt();
             
             m_wndProgress.ShowWindow(SW_SHOWNORMAL);


            m_wndProgress.MoveWindow(rect.left, rect.top, rect.right, rect.bottom);//* 注意:此處同樣可以使用SetWindowPos()來調整位置及大小
            posted @ 2011-10-04 18:33 Jacc.Kim 閱讀(6028) | 評論 (0)編輯 收藏

            聲明按鈕對象
            CButton m_wndBtn;
            創建按鈕對象
            CRect rect;
            //* 按鈕
             rectClient.left = 0;
             rectClient.top = 35;
             rectClient.right = 200;
             rectClient.bottom = 35;
             if (!m_wndButton.Create(_T("Button"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, rectClient, this, 7))
             {
              TRACE0("Failed to create button.");
              return -1;
             }
             m_wndButton.ShowWindow(SW_SHOWNORMAL);
            wndBtn.MoveWindow(rect.left, rect.top, rect.right, rect.bottom);//* 注意:CButton對SetWindowPos()免疫,此暫時也不知道是啥情況。請高手不吝賜教。
            posted @ 2011-10-04 18:27 Jacc.Kim 閱讀(1024) | 評論 (0)編輯 收藏

            原文轉自:http://blog.csdn.net/hhaoma/article/details/3165783

            函數功能:該函數改變一個子窗口,彈出式窗口式頂層窗口的尺寸,位置和Z序。子窗口,彈出式窗口,及頂層窗口根據它們在屏幕上出現的順序排序、頂層窗口設置的級別最高,并且被設置為Z序的第一個窗口。
              函數原型:BOOL SetWindowPos(HWN hWnd,HWND hWndlnsertAfter,int X,int Y,int cx,int cy,UNIT.Flags);
              參數:
              hWnd:窗口句柄。
              hWndlnsertAfter:在z序中的位于被置位的窗口前的窗口句柄。該參數必須為一個窗口句柄,或下列值之一:
              HWND_BOTTOM:將窗口置于Z序的底部。如果參數hWnd標識了一個頂層窗口,則窗口失去頂級位置,并且被置在其他窗口的底部。
              HWND_DOTTOPMOST:將窗口置于所有非頂層窗口之上(即在所有頂層窗口之后)。如果窗口已經是非頂層窗口則該標志不起作用。
              HWND_TOP:將窗口置于Z序的頂部。
              HWND_TOPMOST:將窗口置于所有非頂層窗口之上。即使窗口未被激活窗口也將保持頂級位置。
              查看該參數的使用方法,請看說明部分。
              x:以客戶坐標指定窗口新位置的左邊界。
              Y:以客戶坐標指定窗口新位置的頂邊界。
              cx:以像素指定窗口的新的寬度。
              cy:以像素指定窗口的新的高度。
              uFlags:窗口尺寸和定位的標志。該參數可以是下列值的組合:
              SWP_ASNCWINDOWPOS:如果調用進程不擁有窗口,系統會向擁有窗口的線程發出需求。這就防止調用線程在其他線程處理需求的時候發生死鎖。
              SWP_DEFERERASE:防止產生WM_SYNCPAINT消息。
              SWP_DRAWFRAME:在窗口周圍畫一個邊框(定義在窗口類描述中)。
              SWP_FRAMECHANGED:給窗口發送WM_NCCALCSIZE消息,即使窗口尺寸沒有改變也會發送該消息。如果未指定這個標志,只有在改變了窗口尺寸時才發送WM_NCCALCSIZE。
              SWP_HIDEWINDOW;隱藏窗口。
              SWP_NOACTIVATE:不激活窗口。如果未設置標志,則窗口被激活,并被設置到其他最高級窗口或非最高級組的頂部(根據參數hWndlnsertAfter設置)。
              SWP_NOCOPYBITS:清除客戶區的所有內容。如果未設置該標志,客戶區的有效內容被保存并且在窗口尺寸更新和重定位后拷貝回客戶區。
              SWP_NOMOVE:維持當前位置(忽略X和Y參數)。
              SWP_NOOWNERZORDER:不改變z序中的所有者窗口的位置。
              SWP_NOREDRAW:不重畫改變的內容。如果設置了這個標志,則不發生任何重畫動作。適用于客戶區和非客戶區(包括標題欄和滾動條)和任何由于窗回移動而露出的父窗口的所有部分。如果設置了這個標志,應用程序必須明確地使窗口無效并區重畫窗口的任何部分和父窗口需要重畫的部分。
              SWP_NOREPOSITION;與SWP_NOOWNERZORDER標志相同。
              SWP_NOSENDCHANGING:防止窗口接收WM_WINDOWPOSCHANGING消息。
              SWP_NOSIZE:維持當前尺寸(忽略cx和Cy參數)。
              SWP_NOZORDER:維持當前Z序(忽略hWndlnsertAfter參數)。
              SWP_SHOWWINDOW:顯示窗口。
              返回值:如果函數成功,返回值為非零;如果函數失敗,返回值為零。若想獲得更多錯誤消息,請調用GetLastError函數。
              備注:如果設置了SWP_SHOWWINDOW和SWP_HIDEWINDOW標志,則窗口不能被移動和改變大小。如果使用SetWindowLoog改變了窗口的某些數據,則必須調用函數SetWindowPos來作真正的改變。使用下列的組合標志:SWP_NOMOVEISWP_NOSIZEISWP_FRAMECHANGED。
              有兩種方法將窗口設為最頂層窗口:一種是將參數hWndlnsertAfter設置為HWND_TOPMOST并確保沒有設置SWP_NOZORDER標志;另一種是設置窗口在Z序中的位置以使其在其他存在的窗口之上。當一個窗口被置為最頂層窗口時,屬于它的所有窗口均為最頂層窗口,而它的所有者的z序并不改變。
              如果HWND_TOPMOST和HWND_NOTOPMOST標志均未指定,即應用程序要求窗口在激活的同時改變其在Z序中的位置時,在參數hWndinsertAfter中指定的值只有在下列條件中才使用:
              在hWndlnsertAfter參數中沒有設定HWND_NOTOPMOST和HWND_TOPMOST標志。
              由hWnd參數標識的窗口不是激活窗口。
              如果未將一個非激活窗口設定到z序的頂端,應用程序不能激活該窗口。應用程序可以無任何限制地改變被激活窗口在Z序中的位置,或激活一個窗口并將其移到最高級窗口的頂部或非最高級窗口的頂部。
              如果一個頂層窗口被重定位到z序的底部(HWND_BOTTOM)或在任何非最高序的窗口之后,該窗口就不再是最頂層窗口。當一個最頂層窗口被置為非最頂級,則它的所有者窗口和所屬者窗口均為非最頂層窗口。
              一個非最頂端窗口可以擁有一個最頂端窗口,但反之則不可以。任何屬于頂層窗口的窗口(例如一個對話框)本身就被置為頂層窗口,以確保所有被屬窗口都在它們的所有者之上。
              如果應用程序不在前臺,但應該位于前臺,就應調用SetForegroundWindow函數來設置。
              Windows CE:如果這是一個可見的頂層窗口,并且未指定SWP_NOACTIVATE標志,則這個函數將激活窗口、如果這是當前的激活窗口,并且指定了SWP_NOACTIVATE或SWP_HIDEWINDOW標志,則激活另外一個可見的頂層窗口。
              當在這個函數中的nFlags參數里指定了SWP_FRAMECHANGED標志時,WindowsCE重畫窗口的整個非客戶區,這可能會改變客戶區的大小。這也是重新計算客戶區的唯一途徑,也是通過調用SetwindowLong函數改變窗口風格后通常使用的方法。
              SetWindowPos將使WM_WINDOWPOSCHANGED消息向窗口發送,在這個消息中傳遞的標志與傳遞給函數的相同。這個函數不傳遞其他消息。
              Windows CE 1.0不支持在hWndlnsertAber參數中的HWND_TOPMOST和HWND_NOTOPMOST常量。
              Windows CE1.0不支持在fuFags參數中的SWP_DRAWFRAME和SWP_NOCOPYBITS標志。
              速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;頭文件:winuser.h庫文件:eser32lib。
            posted @ 2011-10-01 19:33 Jacc.Kim 閱讀(3064) | 評論 (0)編輯 收藏

            MFC 之樹控件篇

            CTreeCtrl m_wndMyTree;

            1) 取得樹的當前選中節點:
            HTREEITEM hSelectedItem = m_wndMyTree.GetSelectedItem();

            2) 取得指定節點的標簽值(也就是Caption):
            CString strCaption = m_wndMyTree.GetItemText(hSelectedItem);

            3) 記住:MFC中的樹的節點,是沒有索引這一概念的。一棵樹的唯一辨別方法是通過樹節點
            的句柄(HTREEITEM)區別的。(這一點不同于Delphi中的樹).Delphi中的樹是的每個節點都
            有以下兩個屬性:a) 節點的層次 b) 節點的在當前層次中其父節點下的第幾個索引號。

            4) 可以通過如下方法,對樹節點進行額外數據的存儲。
            CMyClass *pObj = new CMyClass;
            m_wndMyTree.SetItemData(hSelectedItem, (DWORD_PTR)pObj);
            上面這兩句,等同于Delphi的:
            hSelectedItem.Data := Pointer(pObj);//或 hSelectedItem := pObj;
            另外,需要注意的一點:為樹節點設置了Data值后,在刪除節點時,需要釋放掉它。(這在
            Delphi中是必須要做的一件事。在MFC中,本人相信也是必須要做的。因本人也初學MFC,故
            未經驗證。待有機會,再行驗證)

            有了上面的SetItemData()。固然也會有GetItemData()

            CMyClass *pMyObj = (CMyClass *)m_wndMyTree.GetItemData(hSelectedItem);
            ...


            5) 取得樹的根節點:
            HTREEITEM hRoot = m_wndMyTree.GetRootItem();

            6) 取得指定節點的下一個兄弟節點
            HTREEITEM hCurrItem = xxx;
            HTREEITEM hNextItem = m_wndMyTree.GetNextItem(hCurrItem, TVGN_NEXT);

            7) 取得指定節點的第一個子節點:
            HTREEITEM hFirstChildItem = m_wndMyTree.GetNextItem(hCurrItem, TVGN_CHILD);

            有了上面的5、6、7,我們就可以對樹進行遍歷。參考示例如下:

            void CViewTree::RecursiveTree(HTREEITEM hItem/* = NULL*/)
            {
             if (NULL == hItem)
              return ;
             AfxMessageBox(GetItemText(hItem));
             HTREEITEM hFirstChild = GetNextItem(hItem, TVGN_CHILD);

             if (NULL != hFirstChild)
              RecursiveTree(hFirstChild);

             HTREEITEM hNextItem = GetNextItem(hItem, TVGN_NEXT);
             if (NULL != hNextItem)
              RecursiveTree(hNextItem);
            }

            調用方法如下:

             HTREEITEM hRoot = GetRootItem();
             if (NULL == hRoot)
             {
              AfxMessageBox(_T("對不起,當前這棵樹沒有任何節點。"));
             }
             else
             {
              this->RecursiveTree(hRoot);
             }

            8) 判斷指定節點下是否有子節點
            方法一:
            HTREEITEM hCurrItem = xxx;
            HTREEITEM hFirstChild = GetNextItem(hCurrItem, TVGN_CHILD);
            if (NULL != hFirstChild)
                  //有子節點
            else
                  //沒有子節點
            方法二:
            if (ItemHasChildren(hCurrItem))
                  //有子節點
            else
                  //沒有子節點
            9) 清除所有節點:
            m_wndMyTree.DeleteAllItems();

            以上為常用的一些方法總結。詳細的,可查看CTreeCtrl類接口聲明。。或詳查MSDN

            posted @ 2011-10-01 19:19 Jacc.Kim 閱讀(4024) | 評論 (2)編輯 收藏

            僅列出標題
            共14頁: First 6 7 8 9 10 11 12 13 14 
            亚洲精品蜜桃久久久久久| 精品久久久久久无码中文字幕| 色狠狠久久综合网| 99精品久久久久久久婷婷| 国内精品久久久人妻中文字幕| 国产精品va久久久久久久| 亚洲精品美女久久久久99小说| 亚洲中文字幕无码久久2020| 久久精品国产亚洲麻豆| 97精品伊人久久大香线蕉| 久久久综合九色合综国产| 99热热久久这里只有精品68| 伊人久久大香线蕉综合Av| 久久久久久狠狠丁香| 亚洲中文精品久久久久久不卡| 精品久久久久久久中文字幕| 性高湖久久久久久久久| 亚洲一区精品伊人久久伊人| 久久精品国内一区二区三区| 久久亚洲精品国产精品婷婷| 狠狠人妻久久久久久综合| 97精品国产91久久久久久| 亚洲国产另类久久久精品小说| 欧美与黑人午夜性猛交久久久 | 国产精品久久一区二区三区| 久久久久久久91精品免费观看| 国产精自产拍久久久久久蜜| 久久综合给久久狠狠97色| 午夜精品久久久久| 中文字幕久久亚洲一区| 久久青青草原精品国产软件| 伊人热人久久中文字幕| 久久免费视频观看| 久久精品国内一区二区三区| 国产亚洲精品美女久久久| 久久综合噜噜激激的五月天| 久久综合综合久久综合| 久久婷婷五月综合97色 | 国产成人精品白浆久久69| 亚洲国产精品无码久久98| 伊人久久无码中文字幕|