繁体   English   中英

PropertySheet应用程序和用法Win32

[英]PropertySheet Application and Usage Win32

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

属性页看起来不错,但是我不确定是否记错了。

无论如何,我正在尝试实施它,但遇到了一些麻烦。 我阅读了文档,但仍然听不懂。

我设法使属性页(其中2个)的第一页上有一个编辑框和一些组合框,分别单击“确定”,“取消”和一个禁用的“应用”按钮。 我想做的是..

答:当我在编辑框中添加一个int时,启用Apply按钮

B.弄清楚如何将数据放入变量中。

我知道它如何与“对话框”窗口一起使用。 我在其中放入的所有IDC_东西都有WM_Command。 但是,在属性页中,我不知道IDC是什么用途,也不知道如何调用我放入其中的EDIT框和列表框。 或如何识别它们已被用来启用“应用”按钮。

这是我的属性页面设置方法

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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM