關於對話框的一些知識點

如何修改基於對話框模式下的對話框標題?

在每個對話框類的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);
 }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章