ここで問題が発生しました。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);
メッセージボックス(冗長ウィンドウ)を使用したくないので、何が間違っているのか、テキストを静的に表示する方法を教えてください。ありがとうございました