Что-то не так с lParam или с WCHAR []

Во-первых, эта функция вызывается много раз. Следует отметить, что wString [] содержит символьную константу ‘\ n’.

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. Что не так?

0

Решение

«Что случилось?»

скорее всего, обрабатываемый вами WM_PAINT не был получен из вашего SendMessage

общий совет: не отправляйте и не публикуйте WM_PAINT, позвольте системе сгенерировать это сообщение (что происходит при извлечении сообщения из очереди сообщений потока и необходимости перерисовки окна)

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]