2010-04-23 22 views
2

我在製作記事本克隆。現在我的文本加載正常,但是它們是換行符,它們不會在文本字段中換行。在文本字段中添加換行符(Win32)

我加載它是這樣的:

void LoadText(HWND ctrl,HWND parent) 
{ 

    int leng; 
    char buf[330000]; 

    char FileBuffer[500]; 
    memset(FileBuffer,0,500); 

    FileBuffer[0] = '*'; 
    FileBuffer[1] = '.'; 
    FileBuffer[2] = 't'; 
    FileBuffer[3] = 'x'; 
    FileBuffer[4] = 't'; 

    OPENFILENAMEA ofn; 
    memset(&ofn, 0, sizeof(OPENFILENAMEA)); 
    ofn.lStructSize = sizeof(OPENFILENAMEA); 
    ofn.hwndOwner = parent; 
    ofn.lpstrFile = FileBuffer; 
    ofn.nMaxFile = 500; 
    ofn.lpstrFilter = "Filetype (*.txt)\0\0"; 
    ofn.lpstrDefExt = "txt"; 
    ofn.Flags = OFN_EXPLORER; 

    if(!GetOpenFileNameA(&ofn)) 
    { 
     return; 
    } 
    ifstream *file; 
    file = new ifstream(FileBuffer,ios::in); 

    int lenn; 
    lenn = 0; 

    while (!file->eof()) 
    { 

     buf[lenn] = file->get(); 
     lenn += 1; 

    } 
    buf[lenn - 1] = 0; 

    file->read(buf,lenn); 
    SetWindowTextA(ctrl,buf); 
    file->close(); 
} 

我怎樣可以把它做新行字符?

感謝

(固定它,原來流沒有給我CR的,所以我不得不將它們插入。

回答

5

確保您有ES_MULTILINE|ES_WANTRETURN集。

多行編輯控件使用「軟爲了表示一個「軟換行符」,使用CRCRLF(source),所以我想你需要用CRCRLF來替換你所有的CRLF(或者你的文件使用的任何eol字符)。已經逐字讀取你的文件,所以你可以在緩衝區中插入一個額外的CR。

作爲一個方面說明,你最終會想在一個單獨的線程上執行文件IO(即,而不是UI線程),以便在閱讀文件時不會掛起UI。如果UI顯示某種加載動畫或進度條,那會很好。

+0

是的,我有這兩個,但仍然沒有運氣。它會使換行符,如果我按Enter鍵,但我的負載似乎並沒有加載它們。*編輯生病嘗試你說的crcrlf – jmasterx 2010-04-23 21:00:20

+0

@ user146780:看看我更新的編輯。 – 2010-04-23 21:01:23

+0

+1表示不要阻止UI線程,+1表示活動/進度指示符。 – 2013-07-23 11:06:40

相關問題