
[英]Positioning wizard at the centre of the screen win32 application using propertysheet
[英]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.