属性表应用和使用

PropertySheet Application and Usage Win32

本文关键字:应用 属性      更新时间:2023-10-16

我试图在我的Win32对话框应用程序中使用属性表,以便我可以首先获得用户输入,使其应用于我的类,然后运行该用户输入规范的程序。

属性页似乎很好,但我不确定如果我错了。

无论如何,我正试图实现它,我遇到了一些麻烦。我读了文档,但还是不明白。

我已经设法使属性页(其中2个)第一页有一个编辑框和几个组合框OK,取消和一个禁用的应用按钮。我想做的是…

。当我添加一个int到编辑框

时,启用apply按钮

B。想办法把这些数据放到一个变量中。

我知道它是如何与我的对话框窗口工作的。我有WM_Command为我所有的IDC_的东西,我把它。但是属性页,我不知道它的IDC是什么或者如何调用我放进去的编辑框和列表框。或者如何让它识别它们已被用于启用应用按钮。

这是我的属性页设置方法

void propertyPages(HINSTANCE hInstance){
    memset(m_psp, 0, sizeof(m_psp));
    memset(&m_PropSheet, 0, sizeof(m_PropSheet));
    m_psp[0].dwSize = sizeof(PROPSHEETPAGE);
    m_psp[0].dwFlags = PSH_WIZARD;
    m_psp[0].hInstance = hInstance;
    m_psp[0].pszTemplate = (LPCWSTR) IDD_PROPPAGE_LARGE;
    m_psp[0].pszTitle = L"Champ 1 Scenario";
    m_psp[1].dwSize = sizeof(PROPSHEETPAGE);
    m_psp[1].dwFlags = PSP_USETITLE;
    m_psp[1].hInstance = hInstance;
    m_psp[1].pszTemplate = (LPCWSTR) IDD_PROPPAGE_LARGE1;
    m_psp[1].pszTitle = L"Champ 2 Scenario";
    m_PropSheet.dwSize = sizeof(PROPSHEETHEADER);
    m_PropSheet.dwFlags = PSH_PROPSHEETPAGE;
    m_PropSheet.hInstance = hInstance;
    m_PropSheet.pszCaption = L"Champion Level/Runes/Masteries";
    m_PropSheet.nPages = 2;
    m_PropSheet.nStartPage = 0;
    m_PropSheet.ppsp = (LPCPROPSHEETPAGE) m_psp;
    //SendMessage(GetParent(hDlg), PSM_CHANGED, IDD_PROPPAGE_LARGE, 0);
    //PropSheet_Changed(PROPSHEETPAGE,IDD_PROPPAGE_LARGE);
    PropertySheet(&m_PropSheet);
}

我首先在

中调用它
INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{

有什么提示、技巧、指示或建议吗?也许在主应用程序启动之前获取用户数据的最佳方式是什么?我发现由用户设置值很棘手。

您可以使用pfnDlgProc成员设置页面的对话过程:

m_psp[0].dwSize = sizeof(PROPSHEETPAGE);
m_psp[0].dwFlags = PSH_WIZARD;
m_psp[0].hInstance = hInstance;
m_psp[0].pszTemplate = (LPCWSTR) IDD_PROPPAGE_LARGE;
m_psp[0].pszTitle = L"Champ 1 Scenario";
m_psp[0].pfnDlgProc = MyDialogProc;

其中MyDialogProc只是一个正常的对话过程。

设置应用按钮的状态,使用PropSheet_Changed/PropSheet_UnChanged宏。

您需要为每个页面创建一个diagloproc:

LRESULT CALLBACK IntPage1DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    UNREFERENCED_PARAMETER(wParam);
    BOOL myCondition = 0;
    LPNMHDR lpnm;
    switch (uMsg) {
    case WM_INITDIALOG:
        break;
    case WM_NOTIFY:
        lpnm = (LPNMHDR)lParam;
        switch (lpnm->code) {
        case PSN_SETACTIVE:
            if (myCondition) {
                PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK | PSWIZB_NEXT);
            }
            else {
                PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK);
            }
            break;
        case PSN_WIZFINISH:
            break;
        case PSN_WIZBACK:
            break;
        case PSN_RESET:
            break;
        default:
            break;
        }
        break;
    }
    return 0;
}