我在這裏遇到了問題。 我想從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工作正常,而發送文本到靜態控制doesnt。這兩個函數(MessageBox和SetDlgItemText)都要求文本的相同數據類型(LPCTSTR)。我也試圖通過WM_SETTEXT消息發送的文本,它沒有工作,要麼:
LPSTR lpstrChar= szFileInfo.GetBuffer(0);
SendMessage(GetDlgItem(aviinfhwnd, AVIINF_STATIC_INFO), aviinfMsg, NULL, lpstrChar);
請告訴我什麼即時做錯了,如何使文本出現在靜態的,因爲我不想使用該消息框(冗餘窗口)。 謝謝
一個問題是您傳遞的是**類型**的名稱,而不是**變量**的名稱。最後一行應該如下所示:'SendMessage(GetDlgItem(aviinfhwnd,AVIINF_STATIC_INFO),aviinfMsg,NULL,lpstrChar);' – 2011-06-07 16:07:55
哦,當然,這是一個錯字。在代碼中我有你寫的東西 – Smejki 2011-06-07 16:15:30