2014-07-16 23 views
1

在我正在使用的一個程序中(僅使用Win32 API),我試圖使用打開的文件對話框來選擇一個文件,其路徑將出現在編輯框或列表框中該程序。我有打開的文件對話框工作(使用OpenFileName),但我不知道如何將選定的文件路徑顯示到編輯框中。如何將文件的路徑(或任何文本)顯示/追加到編輯框中? (C++ Win32 API)

我嘗試使用SendMessage函數來做到這一點,但沒有提出什麼。

這裏是我使用的打開文件對話框的代碼(在那裏我會的路徑發送到編輯框):

int OpenDialog(HWND hWnd) 
    { 
    OPENFILENAME ofn; 
    TCHAR szFile[MAX_PATH]; 
    ZeroMemory(&ofn, sizeof(ofn)); 
    ofn.lStructSize = sizeof(ofn); 
    ofn.lpstrFile = szFile; 
    ofn.lpstrFile[0] = '\0'; 
    ofn.hwndOwner = hWnd; 
    ofn.nMaxFile = sizeof(szFile); 
    ofn.lpstrFilter = TEXT("txt Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0"); 
    ofn.nFilterIndex = 1; 
    ofn.lpstrInitialDir = NULL; 
    ofn.lpstrFileTitle = NULL; 
    ofn.lpstrDefExt = "txt"; 
    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; 

    if(GetOpenFileName(&ofn)) 
    { 
     // the function to send the path name to the edit box would be here 
    } 
    } 

這裏是我用於編輯框代碼:

CreateWindow(TEXT("Edit"), TEXT(""), 
    WS_CHILD | WS_VISIBLE | WS_BORDER | ES_MULTILINE, 
    20, 20, 380, 20, hWnd, NULL, hInstance, NULL); 

有沒有關於如何做到這一點的功能或技巧?有什麼方法需要編輯編輯框,所以這是可能的嗎?

(我使用的碼塊13.12上視窗8)事先

感謝(實施例的代碼,將不勝感激:))。

+0

是win32 API您需要使用還是學習?我會說,不要讓自己簡單地嘗試使用這個系統,只是因爲它看起來像「哦,這就是方式」。因爲它不是。在現代的時代(1999年後我們說),Win32 API(甚至更多的MFC)正在儲藏在酒窖中,爲了人類的更好的利益,爲了Qt,Gtk和其他許多人的利益。做接口也很好,但在C#中它更好,我建議你嘗試C#,並使用C++作爲無窗口代碼。 –

+1

@ v.oddou 9%的Windows開發人員仍在編寫本機Windows應用程序(Windows API,MFC,WTL)。這9%仍然產生大部分收入。瞭解Windows API既不神祕也不無用處的知識。它被廣泛使用,即使你發現自己編寫Qt代碼,知道Windows API將使你成爲一個更好的開發人員。 – IInspectable

+0

@IInspectable:這是你所做的絕對值得讚美的評論。我不會說相反的。但是,我的第一個評論仍然是真實的。現在關於我自己,我從來沒有用Qt編碼,我只做了一點Gtk,而且我在工作中使用Devexpress。當我還年輕時,我也經歷了與sg185相同的事情,花了我幾年的時間才真正掌握了我正在做的事情的全部深度,也許你從中獲得了更好的工程師;但肯定「因爲企業正在這樣做」是一個超級錯誤的藉口腐蝕到這個領域。相反,該行業需要新鮮血液...... –

回答

0

首先,您需要按住編輯框的句柄,以便稍後重用。您需要使用要在編輯框中調用SetWindowText的函數訪問句柄。所以可能是HWND可以是類或全局變量的成員變量。你設計的是什麼。

HWND hEditBox = CreateWindow(TEXT("Edit"), TEXT(""), 
    WS_CHILD | WS_VISIBLE | WS_BORDER | ES_MULTILINE, 
    20, 20, 380, 20, hWnd, NULL, hInstance, NULL); 

在GetOpenFileName之後調用SetWindowText。

if(GetOpenFileName(&ofn)) 
{ 
    SetWindowText(hEditBox, ofn.lpstrFile); 
} 
+0

感謝Ben和@goths的回答。 SetWindowText函數正是我所需要的!程序現在可以在保存的句柄和SetWindowText下順利運行。 再次感謝! – sg185

0

或者:

  • 傳遞一個對話項目ID到CreateWindow並使用SetDlgItemText

  • 保存HWNDCreateWindow返回並使用SetWindowText

+0

我該如何編碼? (我查了MSDN,並沒有覺得它非常有用) – sg185

+0

['SetWindowText'](http://msdn.microsoft.com/en-us/library/windows/desktop/ms633546%28v=vs.85%29。 aspx)只需要兩個參數。我提供了一個獲取HWND的提示。你已經擁有的字符串,'szFile'。 –

相關問題