1. 程式人生 > >MFC中常用函式總結

MFC中常用函式總結

1、MFC編輯框、靜態文字框相關的常用函式

《1》GetDlgItemText(ID ,str)

作用:從對話方塊中獲取文字

第一個引數為要獲取的編輯框(或者靜態文字框、單選按鈕等可以顯示內容的控制元件)的ID,第二個引數為字串(Cstring 型別)的變數,獲取的文字儲存在str中。

《2》SetDlgItemText(ID,str)

作用:將字串顯示在控制元件中

第一個引數為要顯示的編輯框(或者靜態文字框、單選按鈕、組合框等可以顯示內容的控制元件)的ID,第二個引數為字串(Cstring 型別)的變數,顯示的文字儲存在str中。如果要顯示的變數的型別不是Cstring,則通過Format函式強制轉換。

通常還要加一個UpDateData(FALSE)。

《3》UINT nID=GetCheckedRadioButton(IDC1, IDC2);

作用:獲取單選框的選項的ID

第一個引數為該組合框中第一個單選按鈕的ID,第二個引數為該組合框中最後一個按鈕的ID。

《4》CheckRadioButton(IDC1, IDC2, IDC3);

作用:初始化單選按鈕

第一個引數為該組合框中第一個單選按鈕的ID,第二個引數為該組合框中最後一個按鈕的ID,第三個引數為為預設選項的ID。

《5》m_scrollBar.SetScrollRange(0, 500) ;

作用:設定水平滾動條的取值範圍,m_scrollBar為水平滾動條的控制型別的變數,0為設定最小值,500為設定的最大值。

《6》m_nAmount = m_slider.GetPos() ;

作用:獲取滑塊的當前位置。

《7》m_slider.SetRange(0,1000) ;

作用://設定滑塊取值範圍

第一個引數為設定的最小值,第二個引數為設定的最大值。

《8》double Volum = atof(strCtrl);

作用:將字串strCtl轉換成浮點型的Volum

《9》int Volum = atof(strCtrl);

作用:將字串strCtl轉換成整型的Volum

《10》MessageBox(str) ;(區域性函式)

作用:輸出字串str

《11》AfxMessageBox(str) ;(全域性函式)

作用:輸出字串str

《12》tempt = m_time2.Format("%H:%m:%S") ;

作用:將時間轉化成字元型(時、分、秒)

m_time2為日曆時間選取器的變數,tempt為CString型變數

《13》tempt = m_time.Format("%Y-%m-%d") ;//將時間轉化成字元型

作用:將時間轉化成字元型(年、月、日)

m_time2為日曆時間選取器的變數,tempt為CString型變數

《14》m_time = CTime::GetCurrentTime();

作用:獲取系統當前時間

m_time為Ctime型別的變數。

《15》m_list.AddString(str);

功能:將Cstrig型別的變數的內容顯示在列表框中(或者組合框中)。

m_str為ClistBox型別的變數(或者是CcomboBox型別的變數)。

《16》m_time = CTime(2012 ,5 ,28 ,0 ,0 ,0) ;

功能:初始化日期

m_time為Ctime型別的變數

《17》str.TrimLeft();

功能:去掉Cstring型別變數的左邊的空格

《18》str.TrimRight();

功能:去掉Cstring型別變數的右邊的空格

《19》str.IsEmpty();

功能:判斷Cstring型別的變數str是否為空,如果為空則返回1,否則返回零。

《20》int nIndex=m_list.FindString(int k,str);

功能:列表框中查詢與str匹配的列表項,m_list為ClistBox型別變數。

從第k個位置開始查詢,若為-1,則從頭至尾查詢。

函式原型:

int FindString(int nStartAfter,LPCTSTR lpszItem) const;

int FindStringExact(int nIndexStart,LPCTSTR lpszFind) const;

其中,FindStringExact的查詢精度最高

《21》m_list.ResetContent() ;

功能:清空列表框中的內容

m_list為ClistBox型別變數。

《22》m_listSearch.DeleteString(int  nIndex);

功能:刪除列表框中的第nIndex條記錄。

m_listSearch為ClistBox型別變數。

《23》GetDlgItem(IDC_BUTTON_DELETE)->EnableWindow(FALSE);

功能:是ID為IDC_BUTTON_DELETE的按鈕灰選。

《24》GetDlgItem(IDC_BUTTON_DELETE)->EnableWindow(TRUE);

功能:是ID為IDC_BUTTON_DELETE的按鈕還原。

《25》str.Left(length);

功能:獲取字串str左邊長度為length的值。

《26》int length = str.GetLength() ;

功能:獲取字串str的長度

《27》dlg.DoModal() ;

功能:建立一個對話方塊

dlg為該對話方塊的類的物件。

《28》CDialog::OnCancel() ;

功能:關閉視窗

《29》CMenu* pSysMenu=GetMenu();

功能:獲取程式選單指標

《30》int nCount=pSysMenu->GetMenuItemCount();

功能:獲取項層選單項的項數

《31》int nIndex=m_ListBox.GetCurSel();

功能:獲取指標在列表框中的位置

m_ListBox為ClistBox型別變數。

《32》GetWindowText(str) ;

功能:獲取當前視窗的標題

Str為Cstring 型別的變數

《33》GetDlgItem(IDC_CLICKHERE)->SetFocus();

將游標設定在控制元件IDC_CLICKHERE處,若是在開啟某個對話方塊時候做此設定,則將該語句加到訊息處理函式OnInitDialog的return語句前,並且將最後的語句 return TRUE; 該為 return FALSE;

GetDlgItem(IDC_CLICKHERE)->SetFocus();也可寫成m_strit.SetFocus();

其中m_strit為該控制元件對應的變數。

《34》GetDlgItem(IDC_STATIC_NUMBER1)

功能:獲取ID為IDC_STATIC_NUMBER1控制元件的指標.

例如:

CString str ;

GetDlgItem(IDC_STATIC_NUMBER1)->GetWindowText(str) ;//此句等價於

GetDlgItemText(IDC_STATIC_NUMBER1,str);

《35》int  num1 = GetDlgItemInt(IDC_EDIT1);

功能:獲取ID為IDC_EDIT1控制元件的文字並且轉化成整形的值,如果文字中含有非數字字元則轉化失敗.

《36》SetDlgItemInt(IDC_EDIT3,num3) ;

功能:將整數num3顯示在ID為IDC_EDIT3的編輯框中.

《37》::SendMessage(GetDlgItem(IDC_EDIT1)->m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);

注意:在函式前面加上作用域分節符表示呼叫的是全域性函式.

功能:取ID為IDC_EDIT1控制元件的文字,獲取的最大長度為10,並且將獲取的內容儲存在ch1中.相當於GetDlgItemText(IDC_EDIT1,ch1,10);

說明:第一個引數為對應控制元件的控制代碼,第二個引數為訊息名稱,第三個引數為獲取文字的最大長度,第四個引數為儲存文字的緩衝區,此處ch1為字元陣列,即 char ch1[10];第四個引數的型別必須強制轉換成LPARAM.

此函式有多種呼叫方式,其功能是相同的。列舉如下:

(1) ::SendMessage(GetDlgItem(IDC_EDIT1)->m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);

(2) GetDlgItem(IDC_EDIT1)->SendMessage(WM_GETTEXT,10,(LPARAM)ch1);

(3) m_edit1.SendMessage(WM_GETTEXT,10,(LPARAM)ch1);

(4) ::SendMessage(m_edit1.m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);

其中m_edit1是IDC_EDIT1控制元件的類別為Control,型別為CEdit的變數.

《38》::SendMessage(GetDlgItem(IDC_EDIT3)->m_hWnd,WM_SETTEXT,0,(LPARAM)ch3);

功能:將緩衝區ch3的內容顯示在D為IDC_EDIT1控制元件上.其作用相當於SetDlgItemText(IDC_EDIT1,ch1);

說明:第一個引數為對應控制元件的控制代碼,第二個引數為訊息名稱,第三個引數用不上,故設定為零,第四個引數為要顯示的文字內容, 第四個引數的型別必須強制轉換成LPARAM.

《39》SendDlgItemMessage(IDC_EDIT1,WM_GETTEXT,10,(LPARAM)ch1);

功能等價於::SendMessage(GetDlgItem(IDC_EDIT1)->m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);

《40》SendDlgItemMessage(IDC_EDIT3,WM_SETTEXT,0,(LPARAM)ch3);

功能等價於::SendMessage(GetDlgItem(IDC_EDIT3)->m_hWnd,WM_SETTEXT,0,(LPARAM)ch3);

2、常用函式(比較全)

WinExec()

ExitWindowsEx()

GlobalMemoryStatus()

GetSystemInfo()

GetSystemDirectory()

GetWindowsDirectory()

GetTaskmanWindow() //user32.dll中 獲取工作列視窗控制代碼

OpenProcessToken()開啟一個程序的訪問令牌

GetCurrentProcess()獲取本程序控制代碼

LookupPrivilegeValue()修改程序許可權

AdjustTokenProvileges()通知WindowsNT修改本程序權利

CreateRectRgn()

CreateEllipticRgnIndirect()

PtInRegion()

CommandToIndex()ID號轉換為索引值

選單類:

DrawMenuBar()重畫選單

SetDefaultItem()設定預設選單項

CheckMenuItem()設定選單項Check狀態

CreatePopupMenu()建立彈出選單

視窗類:

MoveWindow()

Invalidate()使視窗無效,視窗無效時會進行視窗重繪

GetParent()獲得視窗的父視窗控制代碼

BringWindowToTop()把視窗放到頂部

SetWindowPos()

DeferWindowPos()

SetActiveWindow()啟用頂層視窗

Set/GetForegroundWindow()設定/獲取前臺視窗,返回控制代碼

Set/GetWindowLong()改變視窗屬性

GetNextWindow()獲取下一個視窗控制代碼

GetWindow()獲取視窗控制代碼

FromHandle()通過控制代碼獲取指標

AfxGetInstanceHandle()獲取程式當前例項控制代碼

AfxRegisterWndClass()

Set/GetClassLong()

Set/GetWindowLong()

GetWindowRect()獲取視窗在螢幕中的Rect

對話方塊:

GetDlgItem()

Set/GetDlgItemText()

Set/GetDlgItemInt()

Set/GetDlgItem()

SendDlgItemMessage()

SetFocus()文字編輯框Edit控制元件若要響應回車按鍵訊息,必須設定為多行型別

GetNextDlgTabItem()獲取下一個有TABStop屬性的控制元件控制代碼

OnCtlColor()WM_CTLCOLOR視窗繪製訊息響應函式

GetDlgCtrlID()

SetButtonText()設定按鈕文字CreateRectRgn

GetStartPosition()

GetNextPathName()

SetHorizontalExtent()

SHBrowseForFolder()

屬性表單:

SetWizardMode()

SetWizardButtons()

OnSetActive()

工具欄:

RecalcLayout()

ShowControlBar()

狀態列:

CommandToIndex()根據ID號獲取索引值

SetMessageText()

GetMessageBar()

GetDescendantWindow()

圖形類

OnEraseBkgnd()

CButton::DrawItem()

SetBkMode()設定文字背景

SetTextColor()

SetBkColor()

SetROP2()

SetClipRtn()

DrawText()

BeginPath()

EndPath()

BeginPaint()

EndPaint()

GetTextExtend()

SetWorldTransform()

GetDeviceCaps()

Set/GetViewportOrg()

Set/GetWindowOrg()

DPtoLP()將裝置座標點轉換為邏輯座標點

LPtoDP()將邏輯座標點轉換為裝置座標點

DeleteMetaFile()

CopyMetaFile()

GetMetaFile()

GetEnhMetaFile()

void CView::OnPaint()

{

CPaintDC dc(this);

OnPrepareDC(&dc);

OnDraw(&dc);

}

檔案操作:

EncryptFile()

CreateFile()

ReadFile()

WriteFile()

SetFilePointer()

::WriteProfileString()向win.ini寫入相關資訊

::GetProfileString()從win.ini獲取相關資訊

CWinApp::WriteProfileString()向登錄檔中寫入相關資訊

CWinApp::GetProfileString()從登錄檔中獲取相關資訊

::WritePrivateProfileString()

RegCreateKeyEx()建立登錄檔項

RegCloseKey()關閉登錄檔項

RegOpenKeyEx()開啟登錄檔項

RegSetValueEx()寫入登錄檔項

RegQueryValueEx()讀取登錄檔項

RegEnumKeyEx()

RegDeleteKey()

文件檢視:

鉤子:

SetWindowsHookEx()

CallNextHookEx()

UnhookWindowsHookEx()

GetCurrentThreadID()

GetModuleHandle()

動態庫:

#pragma data_seg()

#pragma comment(linker,"/section:XXX,RWS") R可讀W可寫S共享

SEGMENTS

XXX READ WRITE SHARED

MAKEINTRESOURCE()

GetProcAddress()獲取函式地址

LoadLibrary()載入Dll

FreeLibrary()減少Dll的引用計數

多執行緒:

CreateThread()

CloseHandle()

互斥:

CreateMutex()

ReleaseMutex()

WaitForSingleObject()

事件:

CreateEvent()

SetEvent()設定有訊號狀態

ResetEvent()設定無訊號狀態

臨界區:

EnterCriticalSection()

InitializeCriticalSection()

LeaveCriticalSection()

DeleteCriticalSection()

非同步套接字:

WSAAsyncSelect()為一個套接字請求網路訊息通知

WSAEnumProtocols()檢索可用的網路通訊協議

WSASocket()

剪貼簿:

OpenClipboard()開啟剪貼簿

CloseClipboard()關閉剪貼簿

EmptyClipboard()清空剪貼簿

SetClipboardData()

GetClipboardData()

GlobalAlloc()

GlobalLock()

GlobalUnlock()

IsClipboardFormatAvailable()

匿名管道:

CreatePipe()

CreateProcess()

CreateFile()

ReadFile()

WriteFile()

命名管道:

CreateNamedPipe()

ConnectNamedPipe()

WaitNamedPipe()

CreateFile()

ReadFile()

WriteFile()

郵槽:

CreateMailslot()

多媒體:

mciSendCommand()<mmsystem.h>

視窗、控制元件的指標和控制代碼的相互轉化

1指標轉化為控制代碼

在MFC應用程式中首先要獲得視窗的指標,然後將其轉化為控制代碼

CWnd* pWnd;

HANDLE hWnd = pWnd->GetSafeHwnd();

2控制代碼轉化為指標

在MFC應用程式中首先獲得對話方塊控制元件的控制代碼,然後獲得其指標

HANDLE hWnd;

GetDlgItem(IDC_xxx,&hWnd);

CWnd * pWnd = FromHandle(hWnd);

獲得程式視窗指標的辦法

1獲得主框架視窗指標(任何時候都可以用,只要是MFC程式中)

CWnd* pWnd = AfxGetMainWnd();

2獲得對話方塊中控制元件指標

CWnd* pWnd = GetDlgItem(IDC_xxx);

3獲得對話方塊中某控制元件的控制代碼

HANDLE GetDlgItem(m_hDLG,m_nID_DlgItem);

4獲得GDI物件的控制代碼

HANDLE m_hGDIObj = m_pGDIObj->GetSafeHanle();

1. 如何獲取應用程式的 例項控制代碼? AfxGetInstanceHandle()

     應用程式的 例項控制代碼儲存在CWinAppIm_hInstance 中,可以這麼呼叫 AfxGetInstancdHandle獲得控制代碼.

       Example: HANDLE hInstance=AfxGetInstanceHandle();

2. 如何通過程式碼獲得應用程式主視窗的 指標? AfxGetMainWnd   GetSafeHwnd() AfxGetAppName()   AfxGetThread

    主視窗的 指標儲存在CWinThread::m_pMainWnd中,呼叫 AfxGetMainWnd實現。 

   【例】    AfxGetMainWnd() ->ShowWindow(SW_SHOWMAXMIZED); //使程式最大化. 

   【例】此例的主視窗是對話方塊,下面的程式碼是在另外一個CFileTreeCtrl 類(子窗)中相關函式實現在主對話方塊(主窗)中的幾個 靜態文字框(子窗)中顯示路徑:

             CWnd* m_pCWnd= AfxGetMainWnd(); //得到主視窗指標,通過主窗指標訪問其他子窗資源

             //方法一

             m_pCWnd->SetDlgItemText(IDC_STATIC_path,"CWnd* "+m_sCurPath); //在主窗中的子窗(ID:IDC_STATIC_path)中顯示字串

             m_pCWnd->SetDlgItemText(IDC_STATIC_who,"路徑顯示由FileTreeCtrl類完成:");

             //方法二

             m_pCWnd->SendMessage(STN_CLICKED); //向主視窗傳送一個訊息,顯示任務由主窗完成。

                                                //在主窗的.cpp中有:ON_MESSAGE(STN_CLICKED, OnSTATICpath3)相關描述 

            //有的函式必須通過視窗的 控制代碼 來訪問,我們可以使用下面的方法三

            //CWnd::GetSafeHwnd 

            //Returns the window handle for a window

            //HWND GetSafeHwnd( ) const;

            HWND m_hWnd_tree =GetSafeHwnd();//【注】此處得到的只是當前視窗(FileTree類)的控制代碼

            HWND m_hWnd = m_pCWnd->GetSafeHwnd();// 這裡才是主視窗的控制代碼(由主窗指標得到主窗的控制代碼)

            //BOOL SetWindowText( HWND hWnd, LPCTSTR lpString )

            ::SetWindowText(m_hWnd,"ok2222");//修改主視窗標題

            ::SetDlgItemText(m_hWnd,IDC_STATIC_path2,"HWND: "+m_sCurPath); 

   【另】AfxGetThread

       CWinThread* AfxGetThread( );

       Return Value:Pointer to the currently executing thread. 

3. 如何在程式中獲得其他程式的 圖示? AfxGetInstanceHandle() 

   HINSTANCE AfxGetInstanceHandle( );

    Return Value

      An HINSTANCE to the current instance of the application. If called from within a DLL linked with the USRDLL version of MFC, an HINSTANCE to the DLL is returned.

    Remarks

      This function allows you to retrieve the instance handle of the current application. AfxGetInstanceHandle always returns the HINSTANCE of your executable file (.EXE) unless it is called from within a DLL linked with the USRDLL version of MFC. In this case, it returns an HINSTANCE to the DLL.

      兩種方法:

         (1) SDK函式 SHGetFileInfo 或使用 ExtractIcon獲得圖示資源的 handle(控制代碼),

         (2) SDK函式 SHGetFileInfo獲得有關檔案的 很多資訊,如大小圖示,屬性,型別等.

           Example(1): 在程式視窗左上角顯示 NotePad圖示.

            void CSampleView: OnDraw(CDC * pDC)

              {

                 if( :: SHGetFileInfo(_T("c:\\pwin95\\notepad.exe"),0,

                      &stFileInfo,sizeof(stFileInfo),SHGFI_ICON))

                    {

                      pDC ->DrawIcon(10,10,stFileInfo.hIcon);

                    }

               }

          Example(2):同樣功能,Use ExtractIcon Function

           void CSampleView:: OnDraw(CDC *pDC)

               {

                 HICON hIcon=:: ExtractIcon(AfxGetInstanceHandle(),_T

                  ("NotePad.exe"),0);

                 if (hIcon &&hIcon!=(HICON)-1)

                    pDC->DrawIcon(10,10,hIcon);

               }

    【說明】關於如何得到系統檔案的正確路徑,象win.ini system32.ini等的路徑,各種系統中具體的路徑是不一樣的。如:

            獲得notepad.exe的路徑正規上來說用GetWindowsDirectory 函式得到;

            如果是呼叫 win95下的畫筆,應該用訪問登錄檔的方法獲得其路徑;

            要作成一個比較考究的程式,考慮應該全面點.

    【另】

                 HINSTANCE AfxGetResourceHandle( );

                 Return Value:An HINSTANCE handle where the default resources of the application are loaded. 

4.    有關取得桌面控制代碼 GetDesktopWindow() 

MSDN中的例子: 

// 靜態函式CWnd:: GetDesktopWindow 返回桌面視窗的指標。下例說明了MFC

void CFrameWnd::BeginModalState ()

{

   //first count all windows that need to be disabled

   UINT nCount=0;

   HWND hWnd=:: GetWindow (:: GetDesktopWindow (), GW_CHILD);

   while (hWnd!=NULL)

   {

     if (:: IsWindowEnabled (hwnd) &&

         CWnd::FromHandlePermanent (hWnd)!=NULL &&

         AfxIsDescendant (pParent->m_hWnd, hWnd) &&

         :: SendMessage (hWnd, WM_DISABLEMODAL, 0, 0) == 0)

     {

        ++nCount;

     }

     hWnd=:: GetWindow (hWnd, GW_HWNDNEXT);

   }

//使用者的問題:下面程式取的不是同一程式的控制代碼,但是GetModuleFileName返回的結果一樣請問為什莫 

HWND ChWnd;//子視窗控制代碼 

HWND hwDesktop=::GetDesktopWindow();//取得桌面控制代碼 

ChWnd=::GetWindow(hwDesktop,GW_CHILD);//取得桌面子控制代碼 

CString csTitle,csClass,csTm,mLookstring; 

char szBuffer[255]; 

while(ChWnd!=NULL)//迴圈取子控制代碼的同級控制代碼 

     if(::IsWindowVisible(ChWnd))//判斷是否為可顯示視窗 

     { 

          ::GetWindowText(ChWnd,csTitle.GetBuffer(255),254); 

          ::GetClassName(ChWnd,csClass.GetBuffer(255),254); 

          csTitle.ReleaseBuffer();//標題 

          csClass.ReleaseBuffer();//類名 

          csTm.Format("%08X:",ChWnd); 

          if(csTitle=="") 

          { 

                mLookstring=csTm+csClass; 

          }else 

          { 

                mLookstring=csTm+csTitle; 

          } 

          //這裡的視窗控制代碼不是同一個程式吧?(問題所在!)可是為什莫結果一樣 

          HINSTANCE hInstance = (HINSTANCE)::GetWindowLong(ChWnd,DWL_USER); 

          ::GetModuleFileName(hInstance, szBuffer, sizeof(szBuffer)); 

          MessageBox(szBuffer,mLookstring); 

     } 

     ChWnd=::GetWindow(ChWnd,GW_HWNDNEXT); 

回答: 

問題在於Win32下GetWindowLong(ChWnd,DWL_USER)總是返回當前程式執行的hInstance,所以你得到的檔名總是一個。所以你要用列舉所有"程序的程式名"來獲得程式名。 

=== 再談控制代碼與指標的區別 

許多開始學習VC的朋友,最多聽說的兩個詞莫過於指標和控制代碼了。 

但是,確經常搞不清他們之間的區別。 

首先,控制代碼是一個視窗的標誌,也就是所有從CWND類繼承下來的,多有控制代碼這個成員。 

他能做的,也就是唯一代表一個桌面上的視窗罷了。而指標是一個地址,如果它指向了一個記憶體中的物件,那麼就可以對它進行任意操作了,當然,並不侷限於自己的應用程式,你如果能夠獲得別的應用程式的某個物件的指標,也可以進行操作。然而,如果要獲得指標,首先,必須找到那個視窗的控制代碼,然後用函式FromHandle就可以得到他的指標了。 

===   問題1: 

如何在自定義的訊息中傳送一個字串?例如: 

SendMessage(MyWnd,WM_USERDEFINED, 0,0) 

如何將字串Buffer寫入wParam或lParam? 

你可以把字串的地址傳遞過去,因為地址正好是32位。如: 

char s[256]; 

SendMessage(MyWnd,WM_USERDEFINED, (WPARAM) s,0) 

接收方只需要將wParam賦給一個char*就可以了。但此方法只能使用於在一個程序內部傳遞資料。 

===   問題2: 

1.在VC應用程式框架中,如何加入自己做的類,如何定義這個類的物件,我想在滑鼠點選某個選單項的時候才生成這個物件,做得到嗎?(這個類的建構函式是帶引數的)。 

2.訊息傳送函式: 

   PostMessage(HWND handle,WM_MYMESSAGE, 

               WPARAM wParam,LPARAM lParam) 

   中: 

第一個引數如何獲得?

如果我的訊息是在自己的應用程式中生成的,想發給應用程式的視窗讓它顯示某些資料(用TextOut函式),能做到嗎?

(也可以說是這樣的問題:用Appwizard生成應用程式框架,在生成的類(如CView)中如何得到視窗的控制代碼,並放在PostMessage函式中。) 

3.wParam,lParam,在訊息響應函式中如何用?vc是怎樣保證這兩個數傳到函式中的?問題比較多,謝謝! 

水平: 剛入門 

回答: 

1、這個問題是肯定的。你可以使用ClassWizard定義類,也可以手工輸入。如果類定義已經在某個檔案中,只要使用Project|Add files將檔案加入工程就可以了。要想定義類的物件,只要在你的選單項的相應事件中就可以了。如: 

... 

MyClass myObject("Hello"); 

myObject.MyMethod(); 

... 

2、在你自己的程式中傳遞訊息當然沒有任何問題,只要你知道要呼叫的視窗類是從CWnd繼承來的,你就可以使用GetSafeHwnd函式獲得視窗控制代碼。不過一般在自己的同一個程式中有時不願意使用自定義訊息,因為太麻煩。你完全可以給要呼叫的類新增一個成員函式,只要想顯示資料,直接呼叫這個成員函式不就可以了?何必使用PostMessage呢?一般只有在程式間呼叫,才願意使用自定義訊息。這時,你通常可以使用FindWindow獲得視窗控制代碼(QA000251 "如何利用FindWindow()函式查詢程式")。 

3、對於MFC已經定義了訊息處理函式的訊息,MFC會自動把wParam和lParam對映為更容易使用的方式。如OnMouseMove( UINT nFlags, CPoint point )。對於MFC不能自動處理的函式,如你使用ON_MESSAGE定義訊息函式,則MFC會把wParam和lParam原原本本的傳遞給你的函式,不做任何處理。 

===   一個未公開的Win32 API函式:GetTaskmanWindow   () 

     下例中還用到: GetProcAddress     GetParent(hWnd)

                     HMODULE hUser32 = GetModuleHandle("user32"); 

download

// getaskmanwnd.cpp (Windows NT/2000)

//

// 利用一個未公開的Win32 API函式:GetTaskmanWindow,

// 對Windows的工作列進行操作(顯示/隱藏)。這個函式返回擁有工作列按鈕的視窗控制代碼。

//

// This example will show you how you can obtain a handle to the

// Windows Taskbar window.

//

// (c)1999 Ashot Oganesyan K, SmartLine, Inc

// mailto:[email protected], http://www.protect-me.com, http://www.codepile.com

#i nclude <windows.h>

#i nclude <stdio.h>

// User32!GetTaskmanWindow (NT specific!)

//

// This function returns a handle to the window that ownes the taskbar buttons

//

// HWND GetTaskmanWindow()

//

typedef HWND (WINAPI *PROCGETTASKMANWND)(void);

PROCGETTASKMANWND GetTaskmanWindow;

void main(int argc, char* argv[])

{

if (argc<2)

{

printf("Usage:\n\ngetaskmanwnd.exe S|H\n");

return;

}

HMODULE hUser32 = GetModuleHandle("user32");

if (!hUser32)

return;

GetTaskmanWindow = (PROCGETTASKMANWND)GetProcAddress(hUser32,"GetTaskmanWindow"); 

if (!GetTaskmanWindow)

return;

HWND hWnd = GetTaskmanWindow();

if (!hWnd)

return;

if (*argv[1]=="H" || *argv[1]=="h")

ShowWindow(GetParent(hWnd),SW_HIDE);

else

ShowWindow(GetParent(hWnd),SW_SHOW);

}

相關推薦

MFC常用函式總結

1、MFC編輯框、靜態文字框相關的常用函式 《1》GetDlgItemText(ID ,str) 作用:從對話方塊中獲取文字 第一個引數為要獲取的編輯框(或者靜態文字框、單選按鈕等可以顯示內容的控制元件)的ID,第二個引數為字串(Cstring 型別)的變數,獲取的文字

string常用函式總結四(append和assign)(C++11)

append(新增字元(串)) (1)basic_string& append(const basic_string& __str); //在字串末尾新增字串str (2) basic_string& append(const basic_st

mysql常用函式總結

1、interval函式select now()-INTERVAL '7 d'  獲取當前日期七天前的時間專案使用:order_time > now() - interval  '7 d' 用於獲

生產環境Oracle常用函式總結

1>to_char,將日期轉換為字元;add_months,在第一個引數的日期上加或者減第二個引數的值 select dkzh,jkhtbh,yhkrq,dkffrq,shqs,dqyqcs,to_char(add_months(dkffrq,shqs+dqyqcs+1),'yyyymm'

Pythonre(正則表示式)常用函式總結

1  re.match       #嘗試從字串的開始匹配一個模式     re.match的函式原型為:re.match(pattern, string, flags)     第一個引數是正則表示式,這裡為"(\w+)\s",如果匹配成功,則返回一個Match,否則返

JavaMath類常用函式總結

Java中比較常用的幾個數學公式的總結: //取整,返回小於目標函式的最大整數,如下將會返回-2 Math.floor(-1.8); //取整,返回發育目標數的最小整數 Math.ceil() //

【JavaMath類常用函式總結

Java中比較常用的幾個數學公式的總結: //取整,返回小於目標函式的最大整數,如下將會返回-2 Math.floor(-1.8); //取整,返回發育目標數的最小整數 Math.ceil() //四捨五入取整 Math.round() //計算平

PHP對陣列進行操作的常用函式總結

在PHP中,對陣列的操作是非常常見的,所以,掌握一些常用且重要的陣列操作函式尤其重要。現將一些本人認為較為重要的函式總結如下: 1.建立陣列使用的是array(),如: <?php $a = array("a","b");   //當然還有其他一些基礎的建立陣列的方法

Linux c一些常用函式總結(c語言中文網。。。)

fgets()函式 標頭檔案:include<stdio.h> fgets()函式 標頭檔案:include<stdio.h>fgets()函式用於從檔案流中讀取一行或指定個數的字元,其原型為:    char * fgets(char * 

自然語言處理爬過的坑:使用python遍歷所有的資料夾的所有文字.標準庫OS的常用函式總結大全

# -*- coding: utf-8 -*- import os import codecs def search(filepath): #遍歷filepath下所有檔案,包括子目錄 files = os.listdir(filepath) for fil

OpenGL在MFC的使用總結(一)——基本框架

palette 接受 white 要求 無效 結構 del 一次 是你 項目中要畫3D顯示的模型,於是要用到OpenGL,加上是在MFC中,並且是在MFC中的ActiveX中使用。再並且鑒於他們程序主框架的設定。常規的方法還不一定能實現。所以還是查過不少資料,在此一一總

JavaScript常用函式總結

 最近正在學習js語法,講到函式這一塊內容,感覺有些細節還是挺有用的,所以發文總結一下。      javascript這門語言本身就是一種弱型別語言,它不和像java, c ,c#等等這些語言一樣,在宣告變數和方法的時候不需要對齊進行指定資料型別的修飾,

【六】 makefile常用函式總結

函式的呼叫語法 函式使用“$”呼叫: $(function arguments) ${function arguments}  例如: $(subst .c, .o, test1.c test2.c) 還是來看一個示例: #$(comma)值是一個逗號

opencv常用函式總結

最近做影象處理專案,總結一下常用的函式: 1,converto :函式轉為任意想要的格式,以及可以新增歸一化係數,這個係數可能要用到mat的最大值和最小值,下面這個函式可以取出最大最小值 2,cv::minMaxLoc(mat,&minim,&maxim);,取出的最大最小值

常用函式--總結

<?php /** * @param $url * @param $data * @param $header * @return mixed */ function http_curl($url,$data,$header){ //初始化curl $ch = cu

Makefile常用函式

Makefile常用函式總結 1、realpath  返回一個絕對路徑 例:ROOT  = $(realpath ./)  返回當前路徑的絕對地址,賦值給ROOT 2、wildcard 萬用字元函式,類似於linux中的 “*” 命令格式: $(

關於MFCAfxGetApp函式是怎麼得到全域性物件的指標的簡要分析

#include <iostream> #include <assert.h> using namespace std; //宣告類名 class App; App* pThis = nullptr; class App { public: App() {

DB2資料庫常用函式總結

1、VALUE函式 語法:VALUE(EXPRESSION1,EXPRESSION2) VALUE函式是用返回一個非空的值,當其第一個引數非空,直接返回該引數的值,如果第一個引數為空,則返回第一個引數的值。 eg: –表示如果T1

MySQL常用函式總結及用法

1、字串函式ascii(str)   返回字串str的第一個字元的ascii值(str是空串時返回0)  mysql> select ascii('2');    -> 50  mysql> select ascii(2);&nbs

python常用函式總結~

python也算學了一段時間,有些函式很常用但用的時候還是會忘,現在總結記錄一下python裡面很實用的並經常用到的內建函式(不用匯入其他模組)。 help() 檢視線上幫助,可以是各種型別的資料結構或者它們的方法函式。 >>> help(li