2010-09-28 76 views
1

我在设置对话框中的Tab键顺序时遇到问题。要设置Tab键顺序,我使用了函数SetWindowPos()。设置对话框中项目的Tab键顺序

最初它会聚焦到其中一个对话框项目,但如果按下tab键,它将不会将焦点更改为对话框上的其他项目。

请帮他解决问题。 波纹管是代码...

HWND hBtn1 = GetDlgItem(hWnd, IDC_BTN_OPEN); 

HWND hBtn2 = GetDlgItem(hWnd, IDC_BTN_CLOSE); 
HWND hBtn3 = GetDlgItem(hWnd, IDC_BTN_SAVE); 

bool result = ::SetWindowPos(hBtn1, hBtn2, 0, 0, 0, 0,SWP_NOSIZE|SWP_NOMOVE); 
result = ::SetWindowPos(hBtn2, hBtn3, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE); 

回答

3

你真的有设置由代码选项卡顺序? 只需在对话框设计器中按Ctrl + D!

更新: 使用SetWindowPos不会帮助你。您认为它将定义taborder的参数只设置z顺序,意味着如果控件重叠,控件的绘制顺序。我不确定,但我认为tab顺序是由控件的创建顺序定义的。

下一次更新: 可能的解决方法是观察Tab键的键盘事件,然后获取主动控件并将焦点设置到下一个应该出现的控件上。

+0

不,我想以编程方式设置它。 – 2010-09-28 13:00:45

+0

我在网上搜索设置标签顺序,但大多数人告诉使用SetWindowPos()。我以他们的任何方式设置选项卡顺序编程。 – 2010-09-28 13:13:20

+0

IsDialogMessage实现制表符。它的逻辑是调用hwnd = GetWindow(hwnd,GW_NEXT);从当前的焦点控制HWND开始,直到找到具有WS_TABSTOP样式的子窗口。 – 2010-09-28 15:50:42