D'abord, cette fonction est appelée plusieurs fois. Il est à noter que wString [] contient la constante de caractère '\ n'.Quelque chose ne va pas avec lParam ou avec 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);
}
A la fin, un message WM_PAINT est envoyé en NLINES devrait être non nulle puisque log contient des multiples de \ n ". Mon WndProc reçoit le message et le traite.
case WM_PAINT:
{
pD2DResources->OnRender((int)lParam);
ValidateRect(hWnd, NULL);
}
break;
Après quoi OnRender est appelée avec un (soi-disant) non nul int comme 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();
}
Pour une raison quelconque, dans la fonction OnRender, la valeur de nLogLines est 0. Qu'est-ce qui ne va pas?
Ce n'est pas une bonne idée d'envoyer ou de poster un WM_PAINT. invalider la partie de votre fenêtre qui doit être repeinte. alors WM_PAINT est * généré * lorsque vous accédez à la file d'attente des messages. –
J'ai utilisé un WCHAR * maintenant et nLines gagne la valeur qu'il était supposé avoir. Cependant, j'ai un autre problème qui peut être lié au message WM_PAINT envoyé. Je vais utiliser invalidateRect à la place. Merci. –
\ n désolé. Je voulais dire \ n –