SetWindowPos setWindowspos



文章插圖
SetWindowPos setWindowspos

文章插圖
MFC控件:
Windows標準控件:
windows標準控件由Windows 操作系統提供,在Windows 95中還提供了一些新增的控件 。所有這些控件對象都是可編程的,我們可以使用Visual C++提供的對話框編輯器把它們添加到對話框中 。Microsoft基礎類庫(MFC)提供了封裝這些控件的類,它們列于表6.1 。
在MFC 中,類CWnd是所有窗口類的基類,很自然的,它也是所控件類的基類 。
Windows標準控件在以下環境下提供:
windows 95
Windows NT 3.51及以后版本
win32s 1.3
注意:visual C++4.2及以后版本不再支持Win32s.
MFC基本常用控件基本用法
VC++控件工具箱:
按鈕(Button)
用來接收用戶的命令,應用程序在接收到用戶命令后,通常需要進行一些后臺工作 。按鈕可以響應單擊或雙擊動作,在按鈕接收到鼠標動作后,向其父窗口發送相應的控件通知,用戶可以對這些控件通知進行消息映射,從而進行相應的處理 。
在一個對話框中,可以定義一個默認按鈕,這只要選中按鈕屬性中的“Default”選項 。如果在對話框活動的時候按下了Enter鍵,則等同于單擊了默認按鈕 。MFC提供了CButton類支持按鈕控件 。
復選框(Check Box)
用來顯示某種可能的選擇,該項選擇是獨立的,用戶可以選中或取消該選項 。在選項被選中的時候核選標記出現,選項被取消時核選標記消失 。MFC中由CButton類對核選框進行支持,用戶可以通過SetCheck()函數和GetCheck()函數設置或獲取核選框當前的狀態 。
BST_UNCHECKED==((CButton*)GetDlgItem(IDC_CHECK_RES1))->GetCheck()【SetWindowPos setWindowspos】((CButton*)GetDlgItem(IDC_CHECK_RES1))->SetCheck(true);編輯框(Edit Control)
用來接收用戶輸入的字符串 。通過選擇編輯框的選項,編輯框可以接收字符串、數字、密碼等;編輯框還可以設置成接收多行字符串的模式;可以自動進行大小寫轉換 。編輯框可能向父窗口發送多種控件通知,如果用戶需要,可以對這些控件通知進行處理 。MFC提供了CEdit類支持編輯框控件 。
GetDlgItem(IDC_***)->SetWindowText(Cstring); GetDlgItem(IDC_***)->GetWindowText(Cstring);組合框(Combo Box)
列表框和編輯框的組合,用戶除了可以在列表中對已經存在的選項進行選擇外,還可以輸入新的選擇 。MFC提供了CComboBox類對組合框控件進行支持 。
CComboBox * AAA = (CComboBox*)(GetDlgItem(IDC_***)); AAA->AddString(_T("***")); AAA->SelectString(0, _T("***")); AAA->SetCurSel(0);int nSel = AAA->GetCurSel(); AAA->GetLBText(nSel, Cstring); if(strType.Trim() == _T("***"))列表框(List Box)
用來選擇一系列的可能選擇,用戶通過滾動條可以在這些選擇中瀏覽 。在列表框中,可以進行單項選擇,也可以進行多項選擇,這取決于用戶在控件屬性對話框中的設置 。MFC提供了CListBox類對列表框控件進行支持 。
組成框(Group Box)
用來包圍具有邏輯關系的一組控件,在這些控件的周圍加上邊界和標題 。需注意的是,組成框僅僅是在視覺效果上對控件進行“成組”,真正的“成組”工作還需要另外一些工作 。僅僅在視覺上展現出一組的邏輯關系,并不添加任何代碼
單選按鈕(Radio Button)
用來選擇某種可能的選擇,與 (Check Box)復選框不同,該選項不是獨立的 。
一般是幾個單選按鈕組成一組,同組中的單選按鈕僅有一個按鈕被選中 。
MFC同樣使用CButton類對單選按鈕控件進行支持,
SetCheck()函數和GetCheck()函數對單選按鈕也是適用的 。
靜態文本(Static Text)
用來在指定的位置顯示特定的字符串,一般用來標識附近另一個控件的內容 。顯示在靜態文本控件中的字符串一般不再改變,但是在需要的時候,必須為其指定一個不同食物ID號,通過調用相應的函數來進行設置 。MFC提供了CStatic類支持靜態控件 。
圖形控件(Picture Control)
顯示位圖(Bitmap)和圖標(Icon),圖形繪制與顯示,主要是其方形的區域適合顯示,同樣方形區域也可利用(Static Text)靜態文本框 。
滾動條(Scroll Bar)
這包括水平滾動條和垂直滾動條,除了在視覺效果上的方向不同外,水平滾動條在被滾動時發生WM_HSCROLL消息,而垂直滾動條在被滾動時發送WM_VSCROLL消息 。MFC提供了CScrollBar進行支持 。
滑塊控件(Slider Control)
通常用來在程序中接受一系列離散的數值 。
用戶可以設置滑塊控件的取值范圍,并可以為控件加上刻度標記以顯示特定位置的含義 。
MFC提供了CSliderCtrl類進行支持 。
微調按鈕(Spin Button)
包括一對緊靠在一起的上下箭頭,使用微調按鈕可以增大或者縮小某個特定的數值 。
微調按鈕往往都需要一個“伙伴”控件,這通常都是一個編輯框 。
當微調按鈕的向上箭頭被單擊時,編輯框中的數字就增大;反之則減小 。MFC提供了CPinButtonCtrl類進行支持 。
進度條(Progress Control)
在進行一項需要較長時間的操作時來反應當前的進度 。
當操作的進度不斷前進時,進度條就用特色顏色填充進度條框 。用戶可以設定進度條的范圍和當前位置 。
MFC提供了CProgressCtrl類進行支持 。
CProgressCtrl* progressbar = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS_1); progressbar->SetRange(0, 4); progressbar->SetPos(0);
熱鍵控制(Hot Key)
熱鍵控件看起來就像一個編輯框,但是在熱鍵控件中能夠立刻反應用戶剛剛按下的鍵組合,這在設置程序的熱鍵時特別有用 。
熱鍵控件只是在“視覺”上顯示了按鍵組合,設置熱鍵的工作還需要用戶添加代碼完成 。
MFC提供了CHotKey類進行支持 。
列表控制(List Control)
按一定的排列順序顯示一系列帶圖標的字符串 。
列表控件提供了四種顯示模式:大圖標(Icon)、小圖標(Small Icon)、列表(List)和報表(Report) 。
用戶可以向列表控件中添加新的項,也可以控制列表控件的顯示模式 。
MFC提供了CListCtrl類進行支持 。
初始化:
struct INFO { int id; CString time; CString type; }info; CString id; int nRow=0; id.Format(_T("%d"), info.id); m_ListCtrl.InsertItem(nRow,id); m_ListCtrl.SetItemText(nRow, 1, info.time); m_ListCtrl.SetItemText(nRow, 2, info.type); nRow ++;添加記錄:
struct INFO { int id; CString time; CString type; }info; CString id; int nRow=0; id.Format(_T("%d"), info.id); m_ListCtrl.InsertItem(nRow,id); m_ListCtrl.SetItemText(nRow, 1, info.time); m_ListCtrl.SetItemText(nRow, 2, info.type); nRow ++;樹形控件(Tree Control)
顯示一系列項目的層次關系,最典型的例子是顯示磁盤上的文件與文件夾 。
如果有子項目的話,單擊樹形控件中的項目可以展開或者收縮其子項目 。
MFC提供了CTreeCtrl類進行支持 。
初始化
void CConfigDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); // TODO: 在此處添加消息處理程序代碼CRect rcWnd; GetClientRect(&rcWnd);CRect rcChild = rcWnd; rcChild.top = rcWnd.top+10; rcChild.bottom -=10; rcChild.left += 160; rcChild.right -= 10; CRect laneRect = rcChild;if(::IsWindow(m_1Dlg)) m_1Dlg.MoveWindow(rcChild);if(::IsWindow(m_2Dlg)) m_2Dlg.MoveWindow(rcChild);if ( ::IsWindow( pTree.GetSafeHwnd() ) ) { pTree.MoveWindow(rcWnd.left+10,rcWnd.top+30,130,350,1); } }樹節點切換
void CConfigDlg::OnTvnSelchangedTree(NMHDR *pNMHDR, LRESULT *pResult) { LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR); // TODO: 在此添加控件通知處理程序代碼 HTREEITEM hSelected=pNMTreeView->itemNew.hItem; if(hSelected!=NULL) { pTree.SelectItem(hSelected); int nDat = pTree.GetItemData(hSelected);switch(nDat) { case 1: /*MessageBox(_T("YNAME"));*/ if(m_pPreWnd) m_pPreWnd->ShowWindow(SW_HIDE);m_1Dlg.ShowWindow(SW_SHOW); m_pPreWnd = &m_1Dlg; break; case 3: /*MessageBox(_T("XNAME"));*/ if(m_pPreWnd) m_pPreWnd->ShowWindow(SW_HIDE);m_2Dlg.ShowWindow(SW_SHOW); m_pPreWnd = &m_2Dlg; break;default: break; } } *pResult = 0; }改變位置
void CConfigDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); // TODO: 在此處添加消息處理程序代碼CRect rcWnd; GetClientRect(&rcWnd);CRect rcChild = rcWnd; rcChild.top = rcWnd.top+10; rcChild.bottom -=10; rcChild.left += 160; rcChild.right -= 10; CRect laneRect = rcChild;if(::IsWindow(m_1Dlg)) m_1Dlg.MoveWindow(rcChild);if(::IsWindow(m_2Dlg)) m_2Dlg.MoveWindow(rcChild);if ( ::IsWindow( pTree.GetSafeHwnd() ) ) { pTree.MoveWindow(rcWnd.left+10,rcWnd.top+30,130,350,1); } }屬性表控件(Tab Control)
包含大量的控件,可以滿足用戶顯示或者獲取大量數據分類顯示的要求,典型例子是Windows任務欄每個程序標簽 。
每個屬性表又分為好幾個屬性頁,這些屬性頁由各自的標簽進行區分,這些屬性頁中都可以包容其他控件 。
在顯示屬性表的時候,一次只能夠顯示一個屬性頁的全部內容,同時顯示其他屬性頁的標簽,用戶通過單擊標簽打開相應的屬性頁 。
MFC提供了CTabCtrl類進行支持 。
初始化綁定變量
m_tab_Light.DeleteAllItems(); m_LightParkingDlg.DestroyWindow(); m_LightStatusDlg.DestroyWindow(); m_tab_Light.InsertItem(0, _T("0001")); // 插入第一個標簽 m_tab_Light.InsertItem(1, _T("0002")); // 插入第二個標簽CRect tabRect; // 標簽控件客戶區的位置和大小 m_tab_Light.GetClientRect(&tabRect); // 獲取標簽控件客戶區Rect // 調整tabRect,使其覆蓋范圍適合放置標簽頁 tabRect.left += 2; tabRect.right -= 1; tabRect.top += 21; tabRect.bottom -= 2; m_LightParkingDlg.Create(IDD_DIALOG_LIGHT_PARKING, &m_tab_Light); // 創建第一個標簽頁 m_LightStatusDlg.Create(IDD_DIALOG_LIGHT_STATUS, &m_tab_Light); // 創建第二個標簽頁 //m_LightParkingDlg.InitData(); m_LightParkingDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(),SWP_SHOWWINDOW);控件頁面切換
CRect tabRect; // 標簽控件客戶區的位置和大小 m_tab_Light.GetClientRect(&tabRect); // 獲取標簽控件客戶區Rect // 調整tabRect,使其覆蓋范圍適合放置標簽頁 tabRect.left += 2; tabRect.right -= 1; tabRect.top += 21; tabRect.bottom -= 2; switch (m_tab_Light.GetCurSel()) {case 0: m_LightStatusDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); m_LightParkingDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW); break; case 1: m_LightParkingDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); m_LightStatusDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW); break;}動畫控件(Animation):
用來播放一段AVI格式的視頻剪輯 。用戶可以控制視頻剪輯的播放、停止和定位,但也僅限于這些功能 。動畫控件設置不能播放音頻剪輯,如果用戶需要更高層次的視頻或者音頻的支持,請選用MCIWnd控件 。
MFC提供了CAnimateCtrl類對動畫控件進行支持 。
高級編輯框(Rich Edit)
編輯控件(Edit Control)功能的擴展 。在高級編輯框中,除了簡單的輸入和編輯字符串外,用戶還可以為字符或段落指定特定的格式,用戶甚至還可以向高級編輯框中插入OLE項 。
高級編輯框基本上實現了一個帶格式的文本編輯器功能,而只需要用戶添加少量的接口 。
MFC提供了CRichEditCtrl類進行支持 。
日期/時間選擇器(Date Time Picker)
向用戶提供了一種直觀的選擇日期和時間的方法、日期/時間選擇器在外觀上類似于一個組合框,但是當用戶單擊下拉箭頭時就會展開一個日歷控件供用戶選擇,而一旦用戶做出了選擇,日期/時間選擇器會自動顯示新的日期/時間 。MFC提供了CDateTimeCtrl類進行支持 。
SYSTEMTIME times_1; //開始時間日期 SYSTEMTIME timee_1; //結束時間日期CDateTimeCtrl* dtPickctrs_1 = (CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKER_START1); //獲取時間控件句柄 CDateTimeCtrl* dtPickctre_1 = (CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKER_END1);memset(×_1,0,sizeof(times_1)); //時鐘初始化 memset(&timee_1,0,sizeof(timee_1));dtPickctrs_1->GetTime(×_1); //獲取控件所選時間,保存至變量 dtPickctre_1->GetTime(&timee_1);CString strTimeStart; //將時間轉換為字符串 strTimeStart.Format(_T("%04d-%02d-%02d %02d:%02d:%02d"), times_1.wYear,times_1.wMonth,times_1.wDay,times_2.wHour,times_2.wMinute,times_2.wSecond); CString strTimeEnd; strTimeEnd.Format(_T("%04d-%02d-%02d %02d:%02d:%02d"), timee_1.wYear,timee_1.wMonth,timee_1.wDay,timee_2.wHour,timee_2.wMinute,timee_2.wSecond); 獲取系統時間
SYSTEMTIME time; ::GetLocalTime(&time);日歷控件(Month Calender)
如下圖,看似與真正的日歷類似,操作也類似,直觀的為用戶提供了觀察和顯示當前日期的途徑 。MFC提供了CMonthCalCtrl類進行支持 。
IP地址控件(IP Adress)
IP地址控件用來輸入和編輯IP地址,MFC提供了CIPAddressCtrl類進行支持 。
該控件外觀類似于一個編輯框,但是可以自動對輸入的字符按3個一組進行區分和加間隔圓點 。IP地址控件為開發支持Internet技術的程序提供了方便 。
擴展組合框(Extended Combo Box)
在普通組合框(Combo Box)的基礎上還支持圖像列表 。
可以在組合框中顯示特定的圖標表示相應的選擇,而不僅僅是顯示文本 。
MFC提供了CComboBoxEx類進行支持 。
用戶自定義控件(Custom Control)
控件使用的時候,它的Class必須有一個類的支持這個窗口類可以VC的類,例如:Button、Edit.在頭文件增加一個CEdit類的成員變量:CEdit m_Text(即點擊右鍵添加變量),然后按照Edit控件使用即可 。
超鏈接控件(SysLink Control ):
1.用于在 MFC 應用程序上添加超鏈接,就像html中的超鏈接一樣 。你點下可以鏈接到一個網頁上去 。拖控件到頁面上,并綁定一個變量(m_linkCtrl),里面的內容全部是按照標準的html中href的用法寫的 。寫錯了自然鏈接不了的 。
可以去瞧下html里面的href屬性是怎/么設置的.另外要注意的是字符串中雙引號的處理(記得加個轉義符),添加單擊響應消息
m_linkCtrl.SetWindowTextW(_T("<a s Note</a>")); PNMLINK pNMLink = (PNMLINK) pNMHDR; ShellExecuteW(NULL, L"open", pNMLink->item.szUrl, NULL, NULL, SW_SHOWNORMAL); //在瀏覽器中打開2.同按鈕(Button)控件一樣,響應相應的消息
多按鈕組合控件(Split Button Control )
如下圖,實現多選按鈕選擇功能,使用時添加相應菜單
網絡IP地址輸入輸出控件(Network Address Control):
可以直接作為inet_addr(ip)的輸入,分隔符為逗號(,)
指令按鈕控件(command button control)
不僅可以為按鈕添加相應命令還可以對命令做出注解
所有控件的公共屬性:
ID:控件的資源標識 。
Visiable:控件是否可見 。
Disabled:控件是否被禁止、被禁止的控件無法接受鍵盤和鼠標輸入 。
Group:是否從這個空間開始一個新組 。
Tab stop:在程序中是否可以用【Tab】鍵切換到這個控件 。
Help ID:是否給控件分配一個幫助標識,幫助標識基于控件本身的資源標識 。
Client edge:給控件增加一個凹陷的邊界,使整個控件看起來像是凹下去的一樣 。
Static edge:給控件增加一個邊界 。
Modal frame:給控件增加一個3維的框架,與Client edge相反,它是凸出來的 。
Transparent:擁有此屬性的窗口是透明的,它下面的窗口不會被它遮掩住 。
Accept files:擁有此屬性的窗口可以接收拖放文件,如果一個文件被拖動到這個控件上面,控件會收到WM_DROPFILES消息 。
No parent notify:表示控件不向其父窗口發送WM_PARENTNOTIFY消息 。
Right aligned text:表示文本右對齊 。
以上屬性可通過控件的屬性對話框進行設置,在屬性對話框中按【F1】鍵可以查看屬性的幫助信息 。
每一種控件都由一個MFC控件類來管理,當通過資源編輯器在對話框上添加一個控件時,visualC++會自動為控件類生成一個實例,即對象,并調用構造函數,當對話框關閉時,其各個子控件對象被自動銷毀 。
也可以不使用資源編輯器,自己在程序中寫代碼創建、顯示控件并設置控件的屬性 。
所有的控件類都來自CWnd,控件的某些操作和屬性設置需要用到CWnd本身的成員函數,CWnd某些函數經常用來操縱控件和設置控件屬性 。
SetWindowText:設置控件上要顯示的標題文本,即用來設置控件的caption屬性
GetWindowText:得到控件的標題文本
EnableWindow:設置控件的Disabled屬性,即社會自控件是否可以接收鍵盤和鼠標的輸入
SetWindowPos:改變窗口的大小、位置和Z軸次序 。
MoveWindow:改變窗口的大小和位置
GetWindowRec:得到窗口的大小、位置(信息存放在一個矩形結構中) 。
GetClientRect:得到窗口客戶區的大小(信息存放在一個矩形結構中 )
ShowWindow:設置窗口的可見性(即窗口是否可見)
SetWindowText/GetWindowText還可以用來設置/得到對話框的標題文本 。