从资源生成的C ++ / Win32对话框行为异常

山姆

我为(无模式)对话框编写了一个资源脚本,该脚本应包含一个编辑控件(用于显示非编辑日志报告):

IDD_LOG DIALOGEX 10, 10, 300, 200, 0
STYLE WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_BORDER | WS_SYSMENU | DS_CENTER
CAPTION "Last Log Report"
{
    EDITTEXT 301, 0, 0, 250, 180, WS_VISIBLE | WS_CHILD | WS_VSCROLL | ES_MULTILINE | ES_READONLY
}   

当我使用菜单通过菜单调用对话框时

hwndLogDlg = CreateDialog(NULL, MAKEINTRESOURCE(IDD_LOG), hwnd, (DLGPROC)LogDlgProc)

以下是不正确的事情:

  1. 对话框窗口包含一个编辑控件,但是在其上方还有另一个具有相同大小的编辑控件。该编辑控件似乎是一个非子窗口。另外,当我在调用的edit控件中设置文本时SetDlgItemText(hwndLogDlg, IDDE_LOGTXT, "<Could not load log data>");,都将同时设置它们。
    尽管设置了WS_CHILD,但我怀疑资源编译器会将脚本中的编辑控件既视为对话框的子级,又将其视为单独的窗口。
  2. 尽管对话框是无模式的,但是在创建对话框时主窗口将被阻止。
  3. 即使我调用DestroyWindow(hwndDlg);WM_QUIT和WM_DESTROY ,单击对话框窗口的关闭按钮也不会导致它关闭再加上主窗口被阻塞的问题,我关闭所有内容的唯一方法是从任务栏或任务管理器关闭窗口。

消息循环:

while(GetMessage(&Msg, NULL, 0, 0) > 0) {
    if (!IsDialogMessage(hwndDlg, &Msg)){
        TranslateMessage(&Msg); 
        DispatchMessage(&Msg);
    }
}

对话框窗口过程:

INT_PTR CALLBACK LogDlgProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam){
switch (message){
    case WM_INITDIALOG:{
        hwndLogTxt = GetDlgItem(hwndDlg, IDDE_LOGTXT);

        fileHandler fH;
        if (!fH.init("report.log")){
            SetDlgItemText(hwndLogTxt, IDDE_LOGTXT, "<Could not load log data>");
            err(ERR_CUSTOM,"Failed to extract log file!","Extraction Error!");
        }
        else SetDlgItemText(hwndLogTxt, IDDE_LOGTXT, fH.getStr());
        break;
    }
    case WM_DESTROY:{
        DestroyWindow(hwndDlg);
        break;
    }
}
return true;
}

因此,我最后想要得到的是一个无模式对话框,其中包含一个(只读)编辑控件(该对话框占据了对话框窗口的所有客户端区域)。这个问题与我的资源语法或我的调用方式有关吗?我什至可能在WM_INITDIALOG上缺少必要的步骤了吗?

爱德华·克莱门茨

一些评论:

a)我想您实际上LogDlgProc在打给CreateDialog()你还有ShowWindow(hwndDlg, SW_SHOW);追求CreateDialog()吗?

b)您的EDITTEXT控件在资源文件中以数字作为id声明,您的逻辑使用IDDE_TXT-更改对话框资源以具有EDITTEXT IDDE_TXT...

c)更改代码以将您的编辑控件设置为SetDlgItemText(hwndDlg, IDDE_TXT, ...);确保fH.getStr()返回正确的字符串值

d)fH如有必要,请在读取后关闭(取决于fileHandler实施方式)

e)返回FALSE未处理的消息

f)WM_DESTROY在您致电之前,您不会得到a DestroyWindow,我认为处理IDCANCEL应该足够了

您的对话程序应该看起来像

INT_PTR CALLBACK LogDlgProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam)
{   switch (message)
    {   case WM_INITDIALOG:
        {   fileHandler fH;
            if (fH.init("report.log"))
            {   SetDlgItemText(hwndDlg, IDDE_TXT, fH.getStr());
                // close fH
            }
            else
            {   SetDlgItemText(hwndDlg, IDDE_TXT, "<Could not load log data>");
                err(ERR_CUSTOM,"Failed to extract log file!","Extraction Error!");
            }
            return TRUE;
        }

        case WM_COMMAND: 
            if (LOWORD(wParam) == IDCANCEL) 
            {   DestroyWindow(hwndDlg);
                return TRUE;
            }
//EDIT start
            if (HIWORD(wParam) == EN_SETFOCUS && LOWORD(wParam) == IDDE_TXT)
            {   SendDlgItemMessage(hwndDlg, IDDE_TXT, EM_SETSEL, -1, -1);
                return TRUE;
            }
//EDIT end

    }
    return FALSE;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Win32 C ++资源对话框在其中更改字体

来自分类Dev

将Win32对话框中的图标设置为默认图标

来自分类Dev

基于Win32对话框的无边界窗口,具有位图背景和视觉样式

来自分类Dev

如何在任务栏上为简单的win32对话框添加图标?

来自分类Dev

基于Win32对话框的无边界窗口,具有位图背景和视觉样式

来自分类Dev

列表对话框片段-找不到资源异常

来自分类Dev

列表对话框片段-找不到资源异常

来自分类Dev

C ++ Win32 Api资源文件

来自分类Dev

C#应用程序中的Win32异常

来自分类Dev

使用来自资源的对话框

来自分类Dev

是否显示“公共项目对话框”或“ GetOpenFileName”?(Win32 API)

来自分类Dev

是否显示“公共项目对话框”或“ GetOpenFileName”?(Win32 API)

来自分类Dev

Win32 API:打开对话框窗口后,应用程序冻结

来自分类Dev

在win32下不能生成dlldata.c?

来自分类Dev

C ++,Win32错误

来自分类Dev

Visual Studio 2015 中的构建解决方案给出错误“生成 Win32 资源时出错:访问被拒绝”

来自分类Dev

使用Win32 / C ++ API更改Windows 7墙纸(未实现操作异常)

来自分类Dev

在Python / Win32中打开文档时如何关闭MS Word显示的对话框

来自分类Dev

Android对话框的高度和宽度行为异常

来自分类Dev

材质对话框按钮单击事件行为异常

来自分类Dev

在片段中显示带有进度对话框的资源

来自分类Dev

为什么单击编辑框关闭Win32窗口(C ++)?

来自分类Dev

C ++如何使用Win32 API通过线程从文本框中获取文本

来自分类Dev

C Win32 Api:完成编辑后,更新编辑框

来自分类Dev

C#显示对话框线程

来自分类Dev

C#显示对话框线程

来自分类Dev

C#预览打印对话框

来自分类Dev

MFC C ++中的对话框

来自分类Dev

win32可执行资源如何处理?

Related 相关文章

  1. 1

    Win32 C ++资源对话框在其中更改字体

  2. 2

    将Win32对话框中的图标设置为默认图标

  3. 3

    基于Win32对话框的无边界窗口,具有位图背景和视觉样式

  4. 4

    如何在任务栏上为简单的win32对话框添加图标?

  5. 5

    基于Win32对话框的无边界窗口,具有位图背景和视觉样式

  6. 6

    列表对话框片段-找不到资源异常

  7. 7

    列表对话框片段-找不到资源异常

  8. 8

    C ++ Win32 Api资源文件

  9. 9

    C#应用程序中的Win32异常

  10. 10

    使用来自资源的对话框

  11. 11

    是否显示“公共项目对话框”或“ GetOpenFileName”?(Win32 API)

  12. 12

    是否显示“公共项目对话框”或“ GetOpenFileName”?(Win32 API)

  13. 13

    Win32 API:打开对话框窗口后,应用程序冻结

  14. 14

    在win32下不能生成dlldata.c?

  15. 15

    C ++,Win32错误

  16. 16

    Visual Studio 2015 中的构建解决方案给出错误“生成 Win32 资源时出错:访问被拒绝”

  17. 17

    使用Win32 / C ++ API更改Windows 7墙纸(未实现操作异常)

  18. 18

    在Python / Win32中打开文档时如何关闭MS Word显示的对话框

  19. 19

    Android对话框的高度和宽度行为异常

  20. 20

    材质对话框按钮单击事件行为异常

  21. 21

    在片段中显示带有进度对话框的资源

  22. 22

    为什么单击编辑框关闭Win32窗口(C ++)?

  23. 23

    C ++如何使用Win32 API通过线程从文本框中获取文本

  24. 24

    C Win32 Api:完成编辑后,更新编辑框

  25. 25

    C#显示对话框线程

  26. 26

    C#显示对话框线程

  27. 27

    C#预览打印对话框

  28. 28

    MFC C ++中的对话框

  29. 29

    win32可执行资源如何处理?

热门标签

归档