有時候我們可能想在win32程序上實時打印我們想要的一些信息,不是以覆蓋的形式而是以追加的形式。
以前我常常採用比較笨的方式,首先調用GetDlgItemText獲取原先字符串,保存在一個字符數組裏面,然後將字符數組追加一個字符串,再調用SetDlgItemText函數達到自己的目的了,這種方式如果要打印的文字短還比較好處理,但是當文字量達到一定程度時,我們勢必就要分配一個特別大的存儲區域來存儲原先的字符串,而且會反覆malloc和free造成內存的碎片,當然這種方式效率也特別低下。
最近因爲要打印比較大的數據量,所以上網查找了下如何在Edit控件上append內容,實現如下:
void AppendEdit( HWND hWnd, const char * strOutputString,... )
{
#ifdef SR_DEBUG
HWND hEdit = GetDlgItem(hWnd, IDC_EDIT_SHOW);
char strBuffer[4096]={0};
va_list vlArgs;
va_start(vlArgs,strOutputString);
_vsnprintf_s(strBuffer,sizeof(strBuffer)-1,strOutputString,vlArgs);
va_end(vlArgs);
strcat_s(strBuffer, "\r\n");
/* 以下兩條語句爲在edit中追加字符串 */
SendMessageA(hEdit, EM_SETSEL, -2, -1);
SendMessageA(hEdit, EM_REPLACESEL, true, (long)strBuffer );
/* 設置滾輪到末尾,這樣就可以看到最新信息 */
SendMessageA( hEdit, WM_VSCROLL, SB_BOTTOM,0);
#endif
}