C++ 如何检测属性页中的当前活动页(C+;+;/VS)

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) { //

我使用VisualStudioC++ 2010,我需要检测当前属性页的活动页。我希望应该有发送一些消息,告诉用户何时激活该页面。但我并没有在对话过程中找到该消息以及将其放置在何处

在我使用的程序中,有以下主要对话框过程:

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)。所以它是属性表的句柄。