这里的目的是为了实现 多行编辑框之间的焦点循环,
这里其实我以前是弄懂了,但是现在想做的时候突然又记不起来咋做了;
HWND SetFocus(HWND hWnd);
这里是设置焦点来实现;
还有一个就是HWND GetNextWindow(HWND hWnd,UINT wCmd);
wCmd可以设置为 GW_HWNDNEXT;
这个函数是得到下一个窗口的句柄;
CWnd::GetWindow
CWnd* GetWindow( UINT nCmd ) const;
返回值:
返回要求的窗口指针;如果没有,则返回NULL。
返回的指针可能是临时的,不应保存以供将来使用。
参数:
nCmd | 指定了CWnd和返回的窗口之间的关系。可以取下列值之一:
|
CWnd::SetWindowPos
BOOL SetWindowPos(
const CWnd* pWndInsertAfter,
int x, int y,
int cx, int cy,
UINT nFlags
);
返回值:如果函数成功,则返回非零值;否则返回0。
参数:
pWndInsertAfter | 标识了在Z轴次序上位于这个CWnd对象之前的CWnd对象。这个参数可以是指向CWnd对象的指针,也可以是指向下列值的指针:
|
x | 指定了窗口左边的新位置。 | ||||||||||||||||||||||||||
y | 指定了窗口顶部的新位置。 | ||||||||||||||||||||||||||
cx | 指定了窗口的新宽度。 | ||||||||||||||||||||||||||
cy | 指定了窗口的新高度。 | ||||||||||||||||||||||||||
nFlags | 指定了大小和位置选项。这个参数可以是下列值的组合:
|
说明:
调用这个成员函数以改变子窗口、弹出窗口和顶层窗口的大小、位置和Z轴次序。
窗口在屏幕上按照它们的Z轴次序排序。在Z轴次序上处于顶端的窗口将程序在所有其它窗口的顶部。
子窗口的所有坐标都是客户坐标(相对于父窗口客户区的左上角)。
窗口可以被移动到Z轴次序的顶部,既可以通过将pWndInsertAfter参数设为&wndTopMost,并确保没有设置SWP_NOZORDER标志,也可以通过设置窗口的Z轴次序使它位于所有现存的顶层窗口上方。当一个非顶层窗口被设为顶层窗口时,它拥有的窗口也被设为顶层的。它的拥有者不发生变化。
如果顶层窗口被重新定位到Z轴次序的底部(&wndBottom)或任何非顶层窗口之后,则它将不再是顶层窗口。当顶层窗口被变为非顶层窗口时,它所有的拥有者和它拥有的所有窗口都被变为非顶层窗口。
如果既没有指定SWP_NOACTIVE标志也没有指定SWP_NOZORDER标志(这意味着应用程序要求窗口被同时激活并放入指定的Z轴次序),则pWndInsertAfter参数中指定的值将只在下列环境下适用:
· | 在pWndInsertAfter参数中既没有指定&wndTopMost也没有指定&wndNoTopMost。 |
· | 这个窗口不是活动窗口。 |
非顶层窗口可能拥有一个顶层窗口,但是反之则不成立。任何被顶层窗口拥有的窗口(例如对话框)都将自己变为顶层窗口,以确保所有被拥有的窗口位于它们的拥有者上方。
在Windows 3.1或更新的版本中,可以将窗口移动到Z轴次序的顶部,并通过设置它们的WS_EX_TOPMOST风格而将之锁定在那里。这种顶层窗口即使在失去活动状态以后也会保持顶层位置。例如,选择WinHelp的Always On Top命令会使帮助窗口变为顶层,并且在你返回应用程序之后它还保持可见。
要创建一个顶层窗口,应在调用SetWindowPos的时候将pWndInsertAfter参数设为&wndTopMost,或者在创建窗口的时候设置WS_EX_TOPMOST风格。
如果Z轴次序中包含了任何具有WS_EX_TOPMOST风格的窗口,则用&wndTopMost移动的窗口将被放到所有非顶层窗口的顶部,但是位于任何顶层窗口的下面。当应用程序激活一个不具有WS_EX_TOPMOST风格的非活动窗口时,该窗口将被移动到所有非顶层窗口的上方,但是位于所有顶层窗口的下方。
如果在调用SetWindowPos的时候pWndInsertAfter参数被设为&wndBottom,并且CWnd是一个顶层窗口,则该窗口失去顶层状态(WS_EX_BOTTOM风格被清除),并且
然后最终使用
SetFocus(GetNextWindows(hwnd,GW_HWNDNEXT);
这里就可以设置hWnd的窗口的下一个焦点
这里说一下tab属性
tab属性就是在按下tab之后自动编辑框可以接收此消息;
还有个函数就是HWND GetNextDlgTabItem(HWND hDlg,HWND hCtl,BOOL bPrevious);
HDlg 指定被搜索的对话框;
HCtl 指定用来作为搜索的开始点的控件
bPrevious
指定的搜索方向。如果此参数设置为TRUE;则该函数将寻找对话框中的一个控件,此参数为FALSE 则该函数将搜索对话框的下一个控件;
SetFocus(::GetNextDlgTabItem(::GetParent(hwnd),hwnd,FALSE));
还有一个函数这样也可以达到目的;
GetDlgItem(IDC_EDIT)->GetNextWindow()->SetFocus();
CWnd* GetNextWindow(UNIT nFlag = GW_HWNDNEXT)const
GetNextDlgTabItem(GetFocus()->SetFocus());
输入焦点就可以转移到此控件上来;
还有在Dlg及其子控件创建完成,将要显示一个消息,
WM_INITDIALOG因此,再次消息的响应函数中修改编辑框控件的窗口比较合适