亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 孫鑫vc++視頻教程筆記之---lesson 7 對話框.txt

?? VC++技術內幕精講
?? TXT
字號:
類的繼承圖表

CObject CCmdTarget CWnd //由CWnd派生,是一個窗口類 CDialog 

對話框分為模態對話框和非模態的對話框

CDialog::DoModal //virtual int DoModal() 調用DoModal()創建一個模態的對話框 它的返回值是做為CDialog::EndDailog成員函數的參數,這個參數用來關閉對話框 CDialog::EndDailog //用來關閉模態的對話框 CDialog::Create //創建非模態的對話框 //初始化一個CDialog對象,創建一個非模態的對話框(modeless dialog box) //把它將一個CDialog對象關聯起來 //BOOL Create( LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL); //BOOL Create( UINT nIDTemplate, CWnd* pParentWnd = NULL); //lpszTemplateName: 對話框模板的名字 //nIDTemplate: 對話框模板的ID號 //pParentWnd: 對話框父窗口的指針,如果為NULL,則對話框的父窗口將被設置為主應用程序窗口

模態對話框的顯示不用調用ShowWindow而非模態的對話框在調用Create創建完對話框之后,需要調用ShowWindow顯示對話框//ShowWindow(SW_SHOW)

CAUTION: 對于模態的對話框,在模態的對話框顯示時,應用程序是暫停執行的,所以模態的對話框對象可以 是局部對象,不會在模態的對話框顯示之前析構。 而對于非模態的對話框,應用程序不會暫停執行,所以非模態對話框的對象不能是局部對象,非模態的 對話框對象有兩種定義方法: 1:定義對話框成員變量 2:在堆上分配內存,在堆上分配的內存和我們整個應用程序的生命周期是一樣的,可以如下定義: CTestDlg *pDlg=new CTestDlg(); //注意內存看見的回收,防止memory leak CAUTION: 對于模態的對話框,當我們點擊OK或者Cancel按鈕時這個對話框窗口是被銷毀了的 對于非模態的對話框,這個對話框窗口并沒有被銷毀,只不過是隱藏了,當我們點擊OK時,由基類的 虛函數OnOK()響應 CDialog::OnOK //virtual void OnOK(); //如果你在一個非模態的對話框中實現了一個OK Button,你必須重載OnOK成員函數,在它內部調用 //DestroyWindow,不要調用基類的成員函數,因為它調用的是EndDialog,which makes the dialog //box invisible but does not destroy it. CButton::Create //BOOL Create(LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID) //創建Button //按鈕也是子窗口,如果dwstyle中不包含WS_VISIBLE,則在創建完Button后,繼續調用ShowWindow()顯示 //按鈕 

CWnd和任何由CWnd類派生出來的窗口類對象,內部都有一個成員變量m_hWnd保存和這個對象相關聯的窗口的句柄,沒有窗口和它關聯時,m_hWnd的值為NULL

靜態的文本框也是一個窗口,要獲取靜態文本框的文本,可以使用函數 CWnd::GetWindowText設置文本使用 CWnd::SetWindowText CWnd::GetWindowText //int GetWindowText( LPTSTR lpszStringBuf, int nMaxCount )const; //void GetWindowText( CString& rString ) const; CWnd::SetWindowText // void SetWindowText( LPTSTR lpszString) 對于靜態的文本框是不能接收通告消息的,如果讓它接收通告消息,需要把它的屬性的style的"Notify"項選上

atoi函數 int atoi( const char *string) //將數值字符,轉化為整形數值 char* _itoa( int value, char *string, int radix); //Convert an integer to a string //string 指向結果 //radix 2-36數值的*進制

訪問控件的方式 1、獲取對話框上控件的指針 CWnd::GetDlgItem CWnd* GetDlgItem( int nID ) const; void CWnd::GetDlgItem( int nID,HWND* phWnd ) const; 2、CWnd::GetDlgItemText //int GetDlgItemText( int nID, LPTSTR lpStr, int nMaxCount ) const; //int GetDlgItemText( int nID, CString& rString ) const;CWnd::SetDlgItemText //void SetDlgItemText( int nID, LPCTSTR lpszString); 3、CWnd::GetDlgItemInt //UINT GetDlgItemInt( int nID, BOOL* lpTrans = NULL, BOOL bSigned = TRUE ) const; //可以獲取控件的文本,并把它轉化為無符號整形 //如果遇到非數值字符,或者數值超過所能表示的最大值,將會發生錯誤。此時lpTrans指向0,如果沒有錯誤 //lpTrans接收一個非零的值,如果lpTrans為NULL,GetDlgItemInt不會對錯誤產生警告 //bSigned指示接收的數值字符是否是有符號的CWnd::SetDlgItemInt //void SetDlgItemInt( int nID, UINT nValue, BOOL bSigned = TRUE );

4、控件與成員變量的關聯,在DoDataExchange函數中void CTestDlg::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CTestDlg) DDX_Text(pDX, IDC_EDIT1, m_num1); //將控件IDC_EDIT1與成員變量m_num1相關聯 DDX_Text(pDX, IDC_EDIT2, m_num2); DDX_Text(pDX, IDC_EDIT3, m_num3); //}}AFX_DATA_MAP} DDX_函數有很多種,關聯不同的控件,需要選擇不同的DDX_函數,如DDX_Scroll,DDX_Radio等 DoDataExchange的調用時間: //Called by the framework to exchange an validate dialog data //由框架調用,來交換和調用對話框的數據 //Never call this function directly.It is called by the UpdateData member function. //我們重來不會直接調用這個函數,它由UpdateData成員函數調用 //Call UpdateData to initialize a dialog box's control or retrive data from a dialog box //調用UpdateData來初始化一個對話框控件,或者從對話框獲得數據

CWnd::UpdateData //BOOL UpdatData( BOOL bSaveAndValidate = TRUE ) //Call the member function to initialize data in a dialog box, or to retrieve and validate //dialog data //Flag that indicates whether dialog box is being initialized (FALSE) or data is being retrieve //(TRUE) //The framework automatically calls UpdateData with bSaveAndValidate set to FALSE when a modal //dialog box is created in the default implementation of CDialog::OnInitDialog

在控件關聯的成員變量設置最大最小值后,DoDataExchange函數中會增加如下幾條語句

void CTestDlg::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CTestDlg) DDX_Text(pDX, IDC_EDIT1, m_num1); //DDX : Dialog Data Exchange1 DDV_MinMaxInt(pDX, m_num1, 0, 100); //DDV : Dialog Data Validate DDX_Text(pDX, IDC_EDIT2, m_num2);2 DDV_MinMaxInt(pDX, m_num2, 0, 100); //DDV_函數也有很多,同DDX_函數一樣 DDX_Text(pDX, IDC_EDIT3, m_num3); //}}AFX_DATA_MAP}

獲取文本的消息:WM_GETTEXT An application sends a WM_GETTEXT message to copy the text that corresponds to a window into a buffer provided by the caller. To send this message,call the SendMessage function with the following parameters. SendMessage{ (HWND) hWnd, //handle to destination window WM_GETTEXT, //message to send (WPARAM) wParam, //number of the character to copy (LPARAM) lParam //text buffer } 設置文本的時候使用消息 WM_SETTEXT 

SendMessage{ (HWND) hWnd, //handle to destination window WM_SETTEXT, //message to send (WPARAM) wParam, //not used;must be zero (LPARAM) lParam //window-text string (LPCTSTR) }

給對話框的子控件發送消息CWnd::SendDlgMessage LRESULT SendDlgItemMessage( int nID, UINT message, WPARAM wParam=0, LPARAM lParam = 0) //等價于我們現調用GetDlgItem再調用SendMessage 編輯框消息 EM_GETSEL //The EM_GETSEL message retrieves the starting and ending character positions of the current //selection in an edit control. You can send this message to either an edit control or a rich //edit control SendMessage{ (HWND) hWnd, //handle to destination window WM_GETTEXT, //message to send (WPARAM) wParam, //starting position (LPDWORD) (LPARAM) lParam //ending position (LPDWORD) } EM_SETSEL設置復選的開始位置和結束位置 SendMessage{ (HWND) hWnd, //handle to destination window WM_SETTEXT, //message to send (WPARAM) wParam, //starting position (LPARAM) lParam //ending position } //If the start is 0 and the end is -1, all the text in the edit control is selected. //If the start is -1,any current selection is deselected 設置窗口的焦點 CWnd::SetFocus CWnd* SetFocus();

總結: 對話框控件訪問七種方式 1、GetDlgItem()->Get(Set)WindowText() //常用 2、GetDlgItemText()/SetDlgItemText() 3、GetDlgItemInt()/SetDlgItemInt() 4、將控件和整型變量相關聯 //常用 5、將控件和控件變量相關聯 //常用 6、SendMessage() //不常用 7、SendDlgItemMessage() //不常用 對話框的收縮與擴展 CRect::IsRectEmpty //Determines whether CRect is empty.CRect is empty if the width and/or height are 0; CRect::IsRectNull //Determines whether the top, bottom, left,and right member variables are all equal to 0. CWnd::GetWindowRect void GetWindowRect( LPRECT lpRect) const; //獲取窗口矩形區域的大小 CWnd::SetWindowPos //BOOL SetWindowPos( const CWnd* pWndInsertAfter, int x,int y, int cx, int cy, UINT nFlags); SetWindowPos和DeferWindowPos用來重排Z-order //應用程序通過設置WS_EX_TOPMOST風格創建最頂層窗口。 //應用程序可用函數BringWindowToTop把一個窗口放置到Z次序的頂部。兄弟窗口 共享同一個父窗口的多個子窗口叫兄弟窗口。活動窗口 活動窗口是應用程序的頂層窗口 應用程序則調用函數SetActiveWindow來激活一個頂層窗口

前臺窗口和后臺窗口 在Windows系統中,每一個進程可運行多個線程,每個線程都能創建窗口。創建正在使用窗口的線程 稱之為前臺線程,這個窗口就稱之為前臺窗口。所有其它的線程都是后臺線程,由后臺線程所創建的 窗口叫后臺窗口。 用戶通過單擊一個窗口、使用ALT+TAB或ALT+ESC組合鍵來設置前臺窗口,應用程序則用函數 SetForegroundWindow設置前臺窗口。如果新的前臺窗口是一個頂層窗口,那么Windows系統就激活它, 換句話說,Windows系統激活相應的頂層窗口。 SetWindowPos???

SetWindowLong函數 //The SetWindowLong function changes an attribute of the specified window //SetWindowLong函數可以改變指定窗口的屬性 long SetWindowLong { HWND hWnd, // handle to window int nIndex, // offset of value to set long dwNewLong // new value } 當 nIndex=GWL_WNDPROC 可以Sets a new address for the window procedure 此時可以把dwNewLong設置成新的窗口過程的地址。

函數的返回值: If the function succeeds, the return value is the previous value of the specified 32-bit integer If the function fails , the return value is zero 當 nIndex=GWL_WNDPROC ,它的返回值就是以前的窗口過程的地址 當對話框上的子控件全部創建完畢,對話框將要顯示時發送消息:WM_INITDIALOG //Sent to a dialog box before the dialog box is displayed 

子控件的創建時間在對話框創建之后,對話框將要顯示之前

窗口過程函數的寫法: LRESULT CALLBACK WindowProc{ HWND hwnd, //handle to window UINT uMsg, //message identifier WPARAM wParam, //first message parameter LPARAM lParam //second message parameter } 當處理的是WM_CHAR消息時,wParam表示字符的ASCII碼

CAUTION! 窗口過程函數是一個全局函數

全局的SetFocus函數 HWND SetFocus( HWND hwnd //handle to window ); 全局的GetNextWindow函數: HWND GetNextWindow( HWND hWnd, //handle to current window UINT uCmd // direction ); //當 uCmd=GW_HWNDNEXT 當前窗口的下一個窗口 //當 uCmd=GW_HWNDPREV 當前窗口的上一個窗口 編輯框的Style如果如果沒有復選Multiline屬性,則編輯框無法接受回車符發送的消息取消Multiline屬性是在 02:29:10 寫OnOK函數時

獲取窗口句柄的GetWindow全局函數 HWND GetWindow( HWND hWnd, // handle to original window UINT uCmd // relationship GetNextDlgTabItem函數 //The GetNextDlgTabItem function retrieves a handle to the first control that has the //WS_TABSTOP style that precedes(前面)( or follows)the specified control. HWND GetNextDlgTabItem( HWND hDlg, //handle to dialog box HWND hCtrl, //handle to known control 已知控件的句柄 bool bPrevious //direction flag 方向。If this parameter is TRUE, the function searches //for the previous control in the dialog box.If this parameter is FALSE, //the function searches for the next control in the dialog box );CWnd::GetNextWindow CWnd* GetNextWindow( UINT nFlag = GW_HWNDNEXT )const;//具有缺省的方向GW_HWNDNEXT

獲取當前具有輸入焦點的窗口的指針的函數: CWnd::GetFocus CWnd::GetWindow CWnd* GetWindow( UINT nCmd) const;

CWnd::GetNextDlgTabItem CWnd* GetNextDlgTabItem( CWnd* pWndCtrl, bool bPrevious = FALSE) const; //函數尋找具有WS_TABSTOP style的control,循環依次調用 菜單項 Layout->TabOrder顯示順序

void CTestDlg::OnOK() 什么時候調用????????

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产黑色紧身裤美女| 一区二区三区资源| 亚洲三级在线看| 蜜桃传媒麻豆第一区在线观看| 国产成人午夜高潮毛片| 欧洲在线/亚洲| 国产精品网站导航| 久久er99精品| 欧美日韩国产成人在线91| 亚洲欧美影音先锋| 精品一区二区三区香蕉蜜桃 | 欧美精品久久99久久在免费线 | 国产精品初高中害羞小美女文| 日本中文字幕一区二区有限公司| 97国产一区二区| 欧美激情综合五月色丁香小说| 青娱乐精品视频| 3d动漫精品啪啪一区二区竹菊| 亚洲日本丝袜连裤袜办公室| 成人综合婷婷国产精品久久蜜臀| 精品国产乱码久久久久久牛牛 | 国产精品一级在线| 欧美成人一区二区三区| 日韩中文字幕亚洲一区二区va在线 | 97国产一区二区| 欧美激情一区在线观看| 国产主播一区二区三区| 欧美日韩国产美女| 亚洲成av人综合在线观看| 91搞黄在线观看| 一区二区三区四区不卡在线| 成人av影院在线| 中文字幕一区二区三区视频| 成人午夜激情视频| 亚洲视频在线观看三级| 成人动漫av在线| 亚洲色图欧洲色图婷婷| 欧洲一区二区三区在线| 五月激情六月综合| 777久久久精品| 美国一区二区三区在线播放| 日韩精品一区在线| 国产剧情av麻豆香蕉精品| 中文字幕巨乱亚洲| 91丝袜呻吟高潮美腿白嫩在线观看| 国产精品全国免费观看高清| 9色porny自拍视频一区二区| 一区精品在线播放| 欧美日韩国产片| 日产国产欧美视频一区精品| 精品久久久久久无| 不卡一区二区三区四区| 亚洲综合清纯丝袜自拍| 91精品久久久久久蜜臀| 久久精品999| 欧美国产视频在线| 欧美性一二三区| 狠狠色综合日日| 亚洲色图欧美在线| 91精品久久久久久久久99蜜臂| 国产综合久久久久影院| 亚洲男人的天堂网| 日韩免费福利电影在线观看| 国产91在线|亚洲| 亚洲3atv精品一区二区三区| 日韩欧美的一区二区| 粉嫩av一区二区三区粉嫩| 亚洲精品欧美综合四区| 欧美不卡一二三| 91免费在线视频观看| 蜜臀久久99精品久久久久宅男| 久久九九久久九九| 欧美精品色综合| av激情综合网| 九九热在线视频观看这里只有精品| 国产精品灌醉下药二区| 91精品国产免费久久综合| 成人教育av在线| 日韩成人精品视频| 一区二区三区成人在线视频| 久久精品人人做人人爽人人| 欧美日韩在线精品一区二区三区激情 | 欧美日韩第一区日日骚| 成人网在线免费视频| 蜜臀va亚洲va欧美va天堂| 国产精品久久久久久久久搜平片| 日韩欧美一二区| 在线精品国精品国产尤物884a| 国产91精品在线观看| 日韩成人免费电影| 亚洲国产中文字幕| 中文字幕日本不卡| 久久久久9999亚洲精品| 欧美一区二区三区影视| 在线欧美日韩精品| 不卡电影一区二区三区| 国产麻豆成人传媒免费观看| 日韩激情一区二区| 亚洲曰韩产成在线| 亚洲免费观看高清| 亚洲日本免费电影| 国产精品午夜免费| 国产精品乱人伦| 久久精品免视看| 久久蜜桃av一区二区天堂| 日韩欧美高清dvd碟片| 欧美浪妇xxxx高跟鞋交| 欧美无乱码久久久免费午夜一区 | 久久99在线观看| 日韩有码一区二区三区| 夜夜亚洲天天久久| 亚洲免费在线播放| 樱桃视频在线观看一区| 亚洲精品一二三| 亚洲激情图片qvod| 日韩高清不卡一区二区| 日韩中文字幕麻豆| 蜜臀99久久精品久久久久久软件| 日韩不卡一区二区三区 | 久久av中文字幕片| 国产一区二区三区高清播放| 极品少妇xxxx偷拍精品少妇| 久久99久久久欧美国产| 久久国产精品第一页| 九九九久久久精品| 国产精品影视在线| av欧美精品.com| 欧美最猛黑人xxxxx猛交| 欧美另类一区二区三区| 日韩无一区二区| 欧美国产丝袜视频| 亚洲一二三专区| 激情综合五月天| 97aⅴ精品视频一二三区| 欧美特级限制片免费在线观看| 宅男在线国产精品| 国产午夜精品一区二区| 亚洲免费大片在线观看| 日韩va亚洲va欧美va久久| 国内外精品视频| 色综合久久中文字幕综合网| 欧美视频日韩视频| 精品国产一区二区在线观看| 日本一区二区三区免费乱视频| 亚洲视频精选在线| 男人的天堂亚洲一区| 国产成人免费9x9x人网站视频| 99精品久久只有精品| 欧美日本视频在线| 久久九九久久九九| 伊人夜夜躁av伊人久久| 伦理电影国产精品| 91天堂素人约啪| 精品久久久久久综合日本欧美| 经典三级在线一区| 91在线视频官网| 日韩一区二区免费在线电影 | 亚洲久本草在线中文字幕| 蜜臀91精品一区二区三区| 国产成人av一区二区三区在线观看| 91蜜桃网址入口| 久久一日本道色综合| 亚洲自拍偷拍欧美| 丁香婷婷综合五月| 欧美一区二区三区视频在线| 国产精品免费久久久久| 免费久久精品视频| 91久久香蕉国产日韩欧美9色| 久久久久99精品国产片| 丝袜美腿高跟呻吟高潮一区| 99久免费精品视频在线观看| 日韩欧美综合在线| 亚洲v中文字幕| 91在线观看地址| 日本一区二区电影| 国模一区二区三区白浆| 欧美精品乱码久久久久久| 亚洲视频精选在线| 成人黄色电影在线 | 亚洲一区二三区| 99视频一区二区三区| 2014亚洲片线观看视频免费| 日韩不卡一二三区| 欧美日韩午夜在线| 一区二区三区免费看视频| 国产91精品久久久久久久网曝门| 日韩亚洲国产中文字幕欧美| 亚洲一区在线播放| 日本高清无吗v一区| 亚洲少妇最新在线视频| 不卡一区二区三区四区| 中文字幕不卡在线观看| 国产真实乱子伦精品视频| 337p日本欧洲亚洲大胆精品| 天天av天天翘天天综合网| 中文字幕亚洲一区二区va在线| 国产在线一区二区| 久久久精品国产99久久精品芒果| 麻豆国产欧美日韩综合精品二区| 欧美一区二区三区视频|