【问题标题】:Call of Dialog.DoModal with ATL does not work on Windows CE 6.0使用 ATL 调用 Dialog.DoModal 在 Windows CE 6.0 上不起作用
【发布时间】:2014-09-26 12:29:44
【问题描述】:

我们有一个适用于 Windows CE 和 Windows Mobile 的应用程序。如果按下工具栏中的按钮,则在此应用程序内应显示一个对话框。 这在 Windows CE 7 和 Windows Mobile 6.5.3 上运行良好,但由于某种原因,它在 Windows CE 6.0 上无法运行。我们正在使用 ATL- 和 WTL-Library 来实现。

这是调用的代码

LRESULT CMainWindow::OnSettings(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL      &bHandled) {    
    this->settingsWnd.DoModal(this->m_hWnd);
return S_OK;
}

我已经在发生错误的地方对其进行了调试。

它来自

ATL::CAxDialogImpl:DoModal(HWND hWndParent, LPARAM dwInitParam)

结束

ATLINLINE ATLAPI_(INT_PTR) AtlAxDialogBoxW(HINSTANCE hInstance, LPCWSTR lpTemplateName, HWND hWndParent, DLGPROC lpDialogProc, LPARAM dwInitParam)

typename Helper::ReturnType AtlAxDialogCreateT(HINSTANCE hInstance, StringType lpTemplateName, HWND hWndParent, DLGPROC lpDialogProc, LPARAM dwInitParam)

这里接电话

nRet = (*pFunc)(hInstance, lpDialogTemplate, hWndParent, lpDialogProc, dwInitParam);

结果返回 -1 并且调用被取消。在其他操作系统上不会发生这种情况。

有谁知道导致这种行为的原因是什么?

编辑 10.10.14:这是我们在 CE 7 和 ME 6.5.3 上工作的资源脚本中的一个例外

IDD_SETTINGS DIALOG  0, 0, 156, 169
STYLE DS_SETFONT | WS_POPUP | WS_CAPTION
CAPTION "Einstellungen"
FONT 8, "MS Sans Serif"
BEGIN
    CONTROL         "",IDC_TAB1,"SysTabControl32",0x0,7,7,142,137
    PUSHBUTTON      "Cancel",IDCANCEL,93,148,56,16
    DEFPUSHBUTTON   "OK",IDOK,7,148,56,16
END

IDD_SETTINGS_HP DIALOG  0, 0, 128, 119
STYLE DS_SETFONT | WS_CHILD
FONT 8, "Tahoma"
BEGIN
    EDITTEXT        IDC_HOMEPAGE,7,16,115,13,ES_AUTOHSCROLL
    EDITTEXT        IDC_TIMEOUT,88,33,34,13,ES_AUTOHSCROLL
    EDITTEXT        IDC_TRYTIMES,103,50,19,12,ES_AUTOHSCROLL | ES_NUMBER
    EDITTEXT        IDC_HOMEPAGE2,7,76,115,13,ES_AUTOHSCROLL
    EDITTEXT        IDC_HOMEPAGE3,7,102,115,13,ES_AUTOHSCROLL
    LTEXT           "Homepage (Main Server)",IDC_STATIC,7,6,80,8
    LTEXT           "Homepage (Backup Server 1)",IDC_STATIC,7,66,94,8
    LTEXT           "Homepage (Backup Server 2)",IDC_STATIC,7,92,94,8
    LTEXT           "Times to try before switching",IDC_STATIC,7,51,93,8
    LTEXT           "Connection Timeout (ms)",IDC_STATIC,7,35,80,8
END

【问题讨论】:

  • GetLastError() 返回什么?
  • 最后一个错误返回 87。这意味着 ERROR_INVALID_PARAMETER。但是我们不知道哪个参数可能是错误的。初始 this->m_hWnd 有效。
  • 我们更进一步。事实证明,该错误是由该对话框上的 TabControl 引起的。我觉得这很奇怪。 CE 6 SDK 不支持 TabControl 吗?
  • 选项卡控件在 CE6 SDK 上应该可以正常工作。尝试使用NULL 作为对话框的父窗口。
  • 嗨,我们已经尝试过使用 NULL。这没用。在“Programming Windows Embedded CE 6.0”一书中的示例中,他们似乎使用属性表而不是 TabControl。

标签: c++ dialog windows-ce atl


【解决方案1】:

使用InitCommonControlsEx(ICC_TAB_CLASSES) 来初始化选项卡控件。

【讨论】:

  • 非常感谢,这就是解决方案!我仍然想知道为什么它在没有调用 InitCommonControlsEx 的情况下一直在 CE 7 和 Windows 6.5.3 上运行。如果调用丢失,我本来希望它在其他平台上也会失败。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 1970-01-01
  • 2011-01-12
  • 1970-01-01
相关资源
最近更新 更多