模态与非模态对话框的创建
CTestNew dlg1
dlg1.DoModal()
CTestNew *pDlg1 = new CTestNew();
pDlg1->Create(IDD_DIALOG1,this);
pDlg1->ShowWindow(SW_SHOW);
对话框数据获取和显示(计算器为例)
GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);
GetDlgItem(IDC_EDIT2)->GetWindowText(ch2,10);
num1 = atoi(ch1);
num2 = atoi(ch2);
num3 = num1 + num2;
itoa(num3,ch3,10);
GetDlgItem(IDC_EDIT3)->SetWindowText(ch3);
GetDlgItemText(IDC_EDIT1,ch1,10);
GetDlgItemText(IDC_EDIT2,ch2,10);
num1 = atoi(ch1);
num2 = atoi(ch2);
num3 = num1 + num2;
itoa(num3,ch3,10);
SetDlgItemText(IDC_EDIT3,ch3);
num1 = GetDlgItemInt(IDC_EDIT1);
num2 = GetDlgItemInt(IDC_EDIT2);
num3 = num1 + num2;
SetDlgItemInt(IDC_EDIT3);
UpdateData();
m_num3 = m_num1 + m_num2;
UpdateDate(FALSE);
m_edit1.GetWindowText(ch1,10)
m_edit2.GetWindowText(ch2,10)
num1 = atoi(ch1)
num2 = atoi(ch2)
num3 = num1 + num2
itoa(num3,ch3,10)
m_edit3.SetWindowText(ch3,10)
::SendMessage(GetDlgItem(IDC_EDIT1)->m_hwnd,WM_GETTEXT,10,(LPARAM)ch1);
窗口的扩展和收缩
- Z-order
窗口的z次序表明了重叠窗口堆中窗口的位置,这个窗口堆是按一个假象的轴定位的,这个轴就是从屏幕向外伸展的Z轴。Z次序最上面的窗口覆盖所有其它的窗口,Z次序最底层的窗口被所有其它的窗口覆盖。应用程序设置窗口在Z次序中的位置是通过把它放在一个给定窗口的后面,或是放在窗口堆的顶部或底部。
Windows系统管理三个独立的Z次序——一个用于顶层窗口、一个用于兄弟窗口,还有一个是用于最顶层窗口。最顶层窗口覆盖所有其它非最顶层窗口,而不管它是不是活动窗口或是前台窗口。应用程序通过设置WS_WX_TOPMOST风格创建最顶层窗口。 - 兄弟窗口
共享同一个父窗口的多个子窗口叫兄弟窗口。 - 前台窗口和后台窗口
在Windows系统中,每一个进程可运行多个线程,每个线程都能创建窗口。
创建正在使用窗口的线程称为前台线程,这个窗口就称之为前台窗口。所有其它的线程都是后台线程,由后台线程所创建的窗口叫后台窗口。
代码实现
static CRect rectLarge
static CRect rectSmall
if(rectLarge.IsRectNull())
{
CRect rectSeparator
GetWindowRect(&rectLarge)
GetDlgItem(IDC_SEPARATOR)->GetWindowRect(&rectSeparator)
rectSmall.left = rectLarge.left
rectSmall.top = rectLarge.top
rectSmall.right = rectLarge.right
rectSmall.bottom = rectSparator.bottom
}
if("收缩<<" == str)
{
SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Weight(),
SWP_NOMOVE|SWP_NOZORDER)
}
else
{
SetWindowPos(NULL,0,0,rectLarge.Width(),rectLarge.Weight(),
SWP_NOMOVE|SWP_NOZORDER)
}
WNDPROC prewProc;
LRESULT CALLBACK FlamingProc( //WndProc名称可自由定义
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
if(uMsg == WM_CHAR && wPARAM = 0x0d)
{
//::SetFocus(::GetNextWindow(hwnd,GW_HWNDNEXT));
//SetFocus(::GetWindow(hwnd,GW_HWNDNEXT));
//SetFocus(::GetNextDlgTabItem(::GetParent(hwnd),hwnd,FALSE));
return 1;
}
else
{
return prewProc(hwnd,uMsg,wParam,mParam);
}
}
BOOL CTestDlg::OnInitDialog()
{
preProc = (WNDPROC)SetWindowLong(GetDlgItem(IDC_EDIT1)
->m_hWnd,GWL_WNDPROC,(LONG)FlamingProc);
}