C++ 如何检测属性页中的当前活动页(C+;+;/VS)
我使用VisualStudioC++ 2010,我需要检测当前属性页的活动页。我希望应该有发送一些消息,告诉用户何时激活该页面。但我并没有在对话过程中找到该消息以及将其放置在何处 在我使用的程序中,有以下主要对话框过程:C++ 如何检测属性页中的当前活动页(C+;+;/VS),c++,winapi,propertysheet,C++,Winapi,Propertysheet,我使用VisualStudioC++ 2010,我需要检测当前属性页的活动页。我希望应该有发送一些消息,告诉用户何时激活该页面。但我并没有在对话过程中找到该消息以及将其放置在何处 在我使用的程序中,有以下主要对话框过程: INT_PTR CALLBACK MainDlgProc(HWND hSheet, UINT msg, WPARAM wParam, LPARAM lParam) { INT_PTR ret = FALSE; switch (msg) { //
INT_PTR CALLBACK MainDlgProc(HWND hSheet, UINT msg, WPARAM wParam, LPARAM lParam)
{
INT_PTR ret = FALSE;
switch (msg)
{
// bla bla
case WM_COMMAND:
ret = 0; //processing message
if (!Sheet_HandleCommand(hSheet, HIWORD(wParam), LOWORD(wParam), (HWND)lParam))
CALLPROC();
break;
case WM_DESTROY:
// bla bla
return CALLPROC();
default:
return CALLPROC();
}
return ret;
}
我知道如何获得句柄,但我不知道在代码中“安装”到哪里。要将其包含到MainDlgProc中的消息的名称是什么?使用(或PropSheet\u GetTabControl
宏)获取选项卡控件的句柄,然后使用消息(或TabCtrl\u GetCurSel
宏)查询当前选定的选项卡索引
注意:如果使用Aero向导样式(
PSH\u AEROWIZARD
),这是不起作用的,可能是因为在这种情况下没有选项卡控件。我应该在哪里使用此消息?我可以在主对话框处理功能中使用它吗?还是应该转到属性页的对话框过程?我应该把它放在case WM_COMMAND:或case WM_NOTIFY:下吗?@user1141649我不明白这个问题。无论何时何地需要确定当前选项卡,都可以使用它。如果失败,“test”变量的结果为0。但是我点击了第5个标签(#4):INT#PTR CALLBACK MainDlgProc(HWND hSheet,UINT msg,WPARAM WPARAM,LPARAM LPARAM){INT#PTR ret=FALSE;HWND test;switch(msg){case WM#u NOTIFY:test=PropSheet\u GetTabControl(hSheet);propdata.activePropSheetPage=TabCtrl\u GetCurSel(PropSheet\u GetTabControl(hSheet));break;}return ret;}
@user1141649您将消息发送给您自己(hSheet
),而不是属性页。PSM_GETTABCONTROL
消息是一条属性页消息;将其发送到属性页。(另外,不清楚为什么调用主对话框hSheet
。您不是属性表。)@RaymondChen:hSheet是在int-WINAPI WinMain()下定义的:hSheet=(HWND)PropertySheet(&header)代码>还有:pproc=(DLGPROC)SetWindowLong(hSheet,DWL_DLGPROC,(LONG)和MainDlgProc)代码>。所以它是属性表的句柄。