【问题标题】:Sending text to static control将文本发送到静态控件
【发布时间】:2011-06-07 15:49:58
【问题描述】:

我这里有问题。 我想从 AVI 文件中获取信息,然后询问用户他想用它做什么。为此,我有对话框,并且(除其他外)我有静态文本控件,我希望在其中显示信息文本。代码:

BOOL GetAviInfo(LPSTR szFileName)
    {
        AVIFileInit();

        PAVIFILE avi;
        int res=AVIFileOpen(&avi, szFileName, OF_READ, NULL);

        //some testing code

        AVIFILEINFO avi_info;
        AVIFileInfo(avi, &avi_info, sizeof(AVIFILEINFO));

        CString szFileInfo;
        szFileInfo.Format(  "Information about the AVI file: \n"
                "Dimention: %dx%d\n"
                "Max bytes per second: %d\n"
                "Samples per second: %d\n"
                "Streams: %d\n"
                "File Type: %d"
                "Length: %d frames\n\n"
                "What do you want to do?",
                                avi_info.dwWidth,
                                avi_info.dwHeight,
                                avi_info.dwLength,
                                avi_info.dwMaxBytesPerSec,
                                (DWORD) (avi_info.dwRate / avi_info.dwScale),
                                avi_info.dwStreams,
                                avi_info.szFileType
                            );
        MessageBox(NULL, szFileInfo, "Info", MB_OK); //this works
        int ret = DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_AVIINF_DIALOG), aviinfhwnd, AviInfDlgProc);
        SetDlgItemText(aviinfhwnd, AVIINF_STATIC_INFO, szFileInfo); //this doesnt work

        AVIFileExit();
        return TRUE;
    }

所以我很困惑为什么将 Cstring 发送到消息框可以正常工作,而将文本发送到静态控件则不行。两个函数(MessageBox 和 SetDlgItemText)都需要相同的文本数据类型 (LPCTSTR)。我也试图通过 WM_SETTEXT 消息发送文本,但它也不起作用:

LPSTR lpstrChar=  szFileInfo.GetBuffer(0);
SendMessage(GetDlgItem(aviinfhwnd, AVIINF_STATIC_INFO), aviinfMsg, NULL, lpstrChar);

请告诉我我做错了什么以及如何使文本出现在静态中,因为我不想使用消息框(冗余窗口)。 谢谢

【问题讨论】:

  • 一个问题是您传递的是 type 的名称,而不是 variable 的名称。最后一行应该是这样的:SendMessage(GetDlgItem(aviinfhwnd, AVIINF_STATIC_INFO), aviinfMsg, NULL, lpstrChar);
  • 哦,当然,这是一个错字。在我有你写的代码中

标签: c++ winapi static cstring settext


【解决方案1】:

DialogBox 仅在对话框结束后返回。 DialogBox 返回一个 hwnd,这是您应该发送消息的位置。

【讨论】:

  • 啊,解决了,我必须在对话框的消息循环中设置文本,这也意味着我必须全局使用 Cstring。感谢您的建议,迈克
  • 如果你改变对 DialogBoxParam 的调用,你可以在那里传递一个指针,然后它将是 WM_INITDIALOG 的 lParam
猜你喜欢
  • 2010-12-23
  • 1970-01-01
  • 2016-05-26
  • 1970-01-01
  • 1970-01-01
  • 2019-01-21
  • 2012-02-26
  • 2013-10-24
相关资源
最近更新 更多