如何修改基于对话框模式下的对话框标题?
在每个对话框类的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);
}