正在将文本发送到静态控件

Sending text to static control

本文关键字:静态控件 文本      更新时间:2023-10-16

这里有问题。我想从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%dn"
                "Max bytes per second: %dn"
                "Samples per second: %dn"
                "Streams: %dn"
                "File Type: %d"
                "Length: %d framesnn"
                "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可以很好地工作,而将文本发送到静态控件却不能。两个函数(MessageBox和SetDlgItemText)都需要相同的文本数据类型(LPCTSTR)。我还试图通过WM_SETTEXT消息发送文本,但也不起作用:

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

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

对话框只有在对话框结束后才会返回。DialogBox返回一个hwnd,它是您应该发送消息的地方。