首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PropertySheet应用和使用Win32

PropertySheet应用和使用Win32
EN

Stack Overflow用户
提问于 2014-05-05 11:47:51
回答 2查看 786关注 0票数 0

我尝试在我的Win32 DialogBox应用程序中使用属性表,这样我就可以首先获得用户输入,将其应用于我的类,然后使用用户输入的规范运行程序。

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

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

我已经设法使属性页面(其中2个)的第一个页面有一个编辑框和几个组合框,其中包括OK、Cancel和一个禁用的应用按钮。我想要做的是..

A.当我向编辑框添加一个int时,启用apply按钮

找出如何将数据放入变量中。

我知道它是如何在我的DialogBox窗口中工作的。我放入的所有IDC_内容都有WM_Command。但是属性页,我不知道IDC是用来做什么的,也不知道如何调用我放在其中的编辑框和列表框。或者如何让它识别它们已被用来启用apply按钮。

下面是我的properypage设置方法

代码语言:javascript
复制
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);
}

我把它称为第一个

代码语言:javascript
复制
INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{

有什么小贴士、小窍门、点子或建议吗?也许是在主应用程序启动之前获取用户数据的最佳方式?我发现由用户设置值很棘手。

EN

回答 2

Stack Overflow用户

发布于 2014-05-05 19:36:08

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

代码语言:javascript
复制
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只是一个普通的对话过程。

要设置apply按钮的状态,请使用PropSheet_Changed/PropSheet_UnChanged宏。

票数 1
EN

Stack Overflow用户

发布于 2017-06-11 02:09:46

对于每个页面,您需要创建一个diagloproc:

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23464475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档