我在这里遇到了问题。 我想从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