2011-06-07 50 views
1

我在這裏遇到了問題。 我想從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); 

請告訴我什麼即時做錯了,如何使文本出現在靜態的,因爲我不想使用該消息框(冗餘窗口)。 謝謝

+0

一個問題是您傳遞的是**類型**的名稱,而不是**變量**的名稱。最後一行應該如下所示:'SendMessage(GetDlgItem(aviinfhwnd,AVIINF_STATIC_INFO),aviinfMsg,NULL,lpstrChar);' – 2011-06-07 16:07:55

+0

哦,當然,這是一個錯字。在代碼中我有你寫的東西 – Smejki 2011-06-07 16:15:30

回答

2

DialogBox僅在對話結束後纔會返回。 DialogBox返回一個hwnd,這是你應該發送消息的地方。

+0

啊,解決了,我不得不在對話框的消息循環中設置文本,這也意味着我必須全局使用Cstring。感謝您的建議,Mike – Smejki 2011-06-07 16:57:59

+0

如果您將調用更改爲DialogBoxParam,則可以在其中傳遞一個指針,然後它將成爲WM_INITDIALOG的lParam – 2011-06-07 17:02:48