如何修改基於對話框模式下的對話框標題?
在每個對話框類的OnInitDialog方法裏添加 SetWindowText("ok");
創建一個模態(modal)對話框
Virtual int DoModal()
在CView類基礎上建立一個CDilog類
CTest sd;//CTest爲新建立的對話框建立的類名稱
sd.DoModal();
創建一個非模態(modeless)對話框
CDialog::Create(LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL )
BOOL Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );
第一個參數爲對話框的模板ID或者是模板名稱 第二個參數設置爲null的時候,父級自動爲框架類
CTestDLG *p=new CTestDLG();
p->Create (IDD_DIALOG1,this);
p->ShowWindow(SW_SHOW);
如何動態添加一個按鈕
BOOL Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
if(!myButton1.m_hWnd)//每個按鈕自己都有一個關聯句柄
{
myButton1.Create(_T("My button"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
CRect(10,10,100,30), this, 1);
}else
{
DestroyWindow();//自動清楚按鈕的句柄,爲空
}
_T,CString 等的區別
Windows NT的所有與字符有關的函數都提供兩種方式的版本,而Windows 9x只支持ANSI方式。
如果你編譯一個程序爲ANSI方式,
_T實際不起任何作用。
而如果編譯一個程序爲UNICODE方式,則編譯器會把"Hello"字符串以UNICODE方式保存。_T和_L的區別在於,_L不管你是以什麼方式編譯,一律以UNICODE方式保存。
LPSTR:32bit指針指向一個字符串,每個字符佔1字節
LPCSTR:32-bit指針指向一個常字符串,每個字符佔1字節
LPCTSTR:32-bit指針指向一個常字符串,每字符可能佔1字節或2字節,取決於Unicode是否定義
LPTSTR:32-bit指針每字符可能佔1字節或2字節,取決於Unicode是否定義
如何獲得DLG上的控件顯示的文本
CWnd::GetDlgItem
CString str;
if (GetDlgItem(IDC_NUMBER1)->GetWidowText(str),str=="NUMBER1:")
{
GetDlgItem(IDC_NUMBER1)->SetWidowText("lalal");
}
else
{
GetDlgItem(IDC_NUMBER1)->SetWidowText("dfd");
}
如何複選輸入框或rich edit control 內的文本?
SendMessage(
(HWND) hWnd, // handle to destination window
EM_SETSEL, // message to send
(WPARAM) wParam, // starting position
(LPARAM) lParam // ending position
);
或者
LRESULT SendDlgItemMessage(
int nID,
UINT message,
WPARAM wParam = 0,
LPARAM lParam = 0 );
GetDlgItem()->Get(Set)WindowText();
GetDlgItemText()/SetDlgItemText()
GetDlgItemInt()/SetDlgItemInt();
將控件和整型變量關聯
將控件和控件變量關聯
SendMessage()
SendDlgItemMessage()
CWnd* SetFocus( );//讓控件獲取焦點,否則設置了複選消息,不能複選文本
例子:
SendDlgItemMessage(IDC_SPIN1, EM_SETSEL, 1, 3); 第三個參數指要複選文本的開始位置,第四個參數指要複選文本的結束位置,
m_edit3.SetFocus();
什麼叫兄弟窗口?
共享同一個父窗口的多個子窗口叫兄弟窗口
什麼叫前臺窗口,什麼叫後臺窗口
在windows系統中,每一個進程可創建多個線程,每個線程都能創建窗口。創建正在使用窗口的線程稱之爲前臺線程,而這個窗口就叫前臺窗口;
所有其他的線程牀都叫後臺線程,由後臺線程創建的窗口就叫後臺窗口
應用程序則用函數SetForegroundWindow設置前臺窗口
static CRect rectLarge;
static CRect rectSmall;
if(rectLarge.IsRectNull ())
{
CRect crSeporate;
GetWindowRect(&rectLarge);
GetDlgItem(IDC_Separ)->GetWindowRect(&crSeporate);
rectSmall.top =rectLarge.top ;
rectSmall.left =rectLarge.left ;
rectSmall.right =rectLarge.right ;
rectSmall.bottom =crSeporate.bottom ;
}
if (str=="擴展<<")
{
SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height (),SWP_NOMOVE|SWP_NOZORDER);
}
else
{
SetWindowPos(NULL,0,0,rectLarge.Width(),rectLarge.Height (),SWP_NOMOVE|SWP_NOZORDER);
}