Отправка текста в статический контроль - PullRequest
1 голос
/ 07 июня 2011

У меня проблема здесь. Я хочу получить информацию из файла 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 в почтовый ящик работает нормально, а отправка текста в static control - нет. Обе функции (MessageBox и SetDlgItemText) требуют одинакового типа данных для текста (LPCTSTR). Я также пытался отправить текст через сообщение WM_SETTEXT, и он тоже не работал:

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

Пожалуйста, скажите мне, что я делаю неправильно и как сделать так, чтобы текст отображался в статике, поскольку я не хочу использовать окно сообщения (избыточное окно) Спасибо

1 Ответ

2 голосов
/ 07 июня 2011

DialogBox возвращается только после окончания диалога. DialogBox возвращает hwnd, куда вы должны отправлять сообщения.

...