07- 对话框一(2)

2019-06-02 16:46

CWnd::GetWindowRect

void GetWindowRect(LPRECT lpRect) const;

CRect rect;

GetWindowRect(&rect);

GetDlgItem(IDC_****)->GetWindowRect(&rect);

23、设置一个窗口的大小 CWnd::SetWiondowPos

BOOL SetWindowPos(const CWnd* pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags);

z次序 改变后的坐标 宽高 改变类型

改变类型:SWP_NOMOVE 保留当前位置不移动,会把x,y忽略掉

SWP_NOZORDER 保留当前的z顺序,会把第一个参数忽略掉

SetWindowPos(NULL,0,0,rectsmall.Width(),rectsmall.Height(),SWP_NOMOVE|SWP_NOZORDER);

SetWindowPos(NULL,0,0,rectlarge.Width(),rectlarge.Height(),SWP_NOMOVE|SWP_NOZORDER);

设置了rect的四个点后,直接用rect的width()\\height()即可获取宽高

设置WS_EX_TOPMOST风格创建最顶层窗口

BringWindowToTop() 把一个窗口放置在z次序的顶部 SetWindowPos()和DeferWindowPos()可以重排z次序

兄弟窗口:共享同一个父窗口的多个子窗口叫兄弟窗口。

活动窗口:活动窗口是应用程序的顶层窗口,也就是当前使用的窗口。只有一个顶层窗口可以是活动窗口,如果用户使用的是一个子窗口,Windows系统就激活与这个子窗口相应的顶层窗口。

任何时候系统中只能有一个顶层窗口是活动的。用户通过单击窗口(或其中的一个子窗口)、使用ALT+TAB或ALT+ESC组合键来激活一个顶层窗口,应用程序则调用函数SetActiveWindow来激活一个顶层窗口。

前台窗口和后台窗口:在Windows系统中,每一个进程可运行多个线程,每个线程都能创建窗口。创建正在使用窗口的线程称之为前台线程,这个窗口就称之为前台窗口。所有其它的线程都是后台线程,由后台线程所创建的窗口叫后台窗口。

用户通过单击一个窗口、使用ALT+TAB或ALT+ESC组合键来设置前台窗口,应用程序则用函数SetForegroundWindow设置前台窗口。如果新的前台窗口是一个顶层窗口,那么Windows系统就激活它,换句话说,Windows系统激活相应的顶层窗口。

24、改变窗口过程,这个太有用了

LONG SetWindowLong(HWND hWnd,int nIndex,LONG dwNewLong); //sdk函数,改变指

定窗口的属性

要改变的窗口的句柄 你要改变的属性 新的值

通过设置改变的属性为GWL_WNDPROC,并给出一个新的窗口过程,可以改变默认的窗口过程

返回的先前的指定的32位的整型值,也就是,如果改变的是窗口过程,则返回原先的窗口过程地址

窗口内的控件是在OnCreate()之后,OnInitDialog()之前创建的,对控件操作,应在OnInitDialog()中

sdk平台的焦点设置函数,可以不通过cwnd对象的SetFocus()函数设置窗口焦点 HWND SetFocus(HWND hWnd); //参数为你要设置的窗口的句柄

sdk平台的获取当前窗口的下一个窗口句柄

HWND GetNextWindow(HWND hWnd,UINT wCmd); //当前焦点窗口的句柄,移动方向 //GWL_HWNDNEXT向下,GWL_HWNDPREV向上

有cwnd的获取当前窗口的下一个窗口句柄函数

CWnd* GetNextWindow(UINT nFlag=GW_HWNDNEXT)const; //默认获取下一个

editBox控件默认属性不接受多行,要把stylec-Multiline勾上才能接受按键消息

sdk平台获取窗口句柄的另一个函数

HWND GetWindow(HWND hWnd,UINT wCmd); //开始查找的窗口句柄,查找方向、位置

//GW_HWNDNEXT下一个 有cwnd的获取窗口句柄的另一个函数 CWnd::GetWindow

CWnd* GetWindow(UINT nCmd)const; //参数为查找方向标志

查找具有tab stop属性的控件函数,按照tab顺序查找

HWND GetNextDlgTabItem(HWND hDlg,HWND hCtl,BOOL hPrevious);

所在对话框即父窗口 从哪个控件开始查找 方向标记,TRUE前,FALSE下一个 CWnd::GetNextDlgTabItem(CWnd* pWndCtl,BOOL hPrevious=FALSE)const; 开始控件 查找方向

删了窗口中的ok按钮,但窗口仍然可以响应ok函数,手动建立一个ok按钮只需要把id改为idok

void CTestDlg::OnOK() {

//GetDlgItem(IDC_EDIT1)->GetNextWindow()->SetFocus();//老是从第一个编辑框开始

//GetFocus()->GetNextWindow()->SetFocus(); //先获取当前焦点,下个完了会传回空指针错误 //GetFocus()->GetWindow(GW_HWNDNEXT)->SetFocus(); //同样会出现空指针错误

GetNextDlgTabItem(GetFocus())->SetFocus(); //从焦点控件开始,避免了空指针错误 //CDialog::OnOK(); }

WNDPROC prevProc; //自定义的窗口过程 LRESULT CALLBACK WinSunProc(

HWND hwnd, // handle to window UINT uMsg, // message identifier

WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ) {

if(uMsg==WM_CHAR && wParam==0x0d) {

//::SetFocus(::GetNextWindow(hwnd,GW_HWNDNEXT));//调用sdk函数 //SetFocus(::GetWindow(hwnd,GW_HWNDNEXT));

SetFocus(::GetNextDlgTabItem(::GetParent(hwnd),hwnd,FALSE)); return 1; } else {

return prevProc(hwnd,uMsg,wParam,lParam); } }

BOOL CTestDlg::OnInitDialog() {

CDialog::OnInitDialog();

prevProc=(WNDPROC)SetWindowLong(GetDlgItem(IDC_EDIT1)->m_hWnd,GWL_WNDPROC,

(LONG)WinSunProc); //改变IDC_EDIT1的窗口过程为自定义窗口过程,保存原先窗口过程

return TRUE; }


07- 对话框一(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:浅析检察机关对公安派出所监督机制的探索思考

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: