首先,這個函數被調用很多次。應該指出,wString []確實包含字符常量'\ n'。lParam或WCHAR有問題[]
void D2DResources::PutToLog(WCHAR wString[])
{
int strLen=wcslen(wString);
int logLen=wcslen(log);
if(strLen+logLen>=MaxLogSize)
wcsncpy(log, log, logLen-strLen);
wcscat (log, wString);
int nLines=0;
for(int x=0; x<wcslen(log); x++)
{
if(log[x]=='\n')
{
nLines++;
if(nLines>5)
{
log[x]='\0';
}
}
}
SendMessage (m_hWnd, WM_PAINT, NULL, (LPARAM)nLines);
}
最後,發送WM_PAINT消息,而nLines應該爲非零,因爲日誌包含倍數'\ n'。我的WndProc收到消息並處理它。
case WM_PAINT:
{
pD2DResources->OnRender((int)lParam);
ValidateRect(hWnd, NULL);
}
break;
之後,OnRender與一個(推測)非零int作爲lParam調用。
void D2DResources::OnRender(int nLogLines)
{
D2D1_SIZE_F screenSize = pCurrentScreen->GetSize();
D2D1_SIZE_F rTSize = pRT->GetSize();
pRT->BeginDraw();
pRT->DrawBitmap(
pCurrentScreen,
D2D1::RectF(0.0f, 0.0f, screenSize.width, screenSize.height)
);
pRT->DrawText(
log,
ARRAYSIZE(log) - 1,
pTextFormat,
D2D1::RectF(0, rTSize.height - ((nLogLines*textSize)+textSize) , rTSize.width, rTSize.height),
pWhiteBrush
);
pRT->EndDraw();
}
由於某種原因,在OnRender函數中,nLogLines的值爲0.什麼是錯誤的?
發送或發佈WM_PAINT不是一個好主意。無論你的窗口需要重繪的部分。那麼當您下次訪問消息隊列時,會生成WM_PAINT * *。 – 2013-03-14 00:24:56
我現在使用了WCHAR *並且nLines確實獲得了它應有的價值。但是,我indead有另一個問題,可能與WM_PAINT正在發送的消息有關。我將使用invalidateRect來代替。謝謝。 – 2013-03-14 00:33:32
\ n對不起。我的意思是\ n – 2013-03-14 00:37:02