Здравствуйте. Пытаюсь отрисовать красивый попап в котором есть collapsible_list. Когда я открываю свой html в HTML Browse, то он отображает его прекрасно и сворачивание и разворачивание работает быстро и хорошо. Однако в моём приложении сворачивание/разворачивание работает в разы медленее и тормозит.
Цикл сообщений такой
while( GetMessage( &msg, NULL, 0, 0 ) ) {
htmlayout::queue::execute();
TranslateMessage(&msg);
DispatchMessageW(&msg);
}
Окно создаётся со стилями
hwnd_ = CreateWindowExW( WS_EX_LAYERED, CLASSNAME, NULL, WS_POPUP,
rc.right-500, 0, 500, rc.bottom, NULL, NULL, NULL, NULL);
Сам html приводить не буду он достаточно большой
Смотрел сообщения которые получает окно с HTML в браузере и в моём приложении и обратил внимание на следующее. Когда список сворачивается/разворачивается
В браузере
<02945> 00051794 S message:0x04AE [User-defined:WM_USER+174] wParam:00000000 lParam:00000000
<02946> 00051794 S WM_NCHITTEST xPos:850 yPos:571
<02947> 00051794 R WM_NCHITTEST nHittest:HTCLIENT
<02948> 00051794 S WM_PAINT hdc:00000000
<02949> 00051794 R WM_PAINT
<02950> 00051794 R message:0x04AE [User-defined:WM_USER+174] lResult:00000000
<02951> 00051794 P WM_TIMER wTimerID:-84 tmprc:1000819C
<02952> 00051794 S message:0x04AE [User-defined:WM_USER+174] wParam:00000000 lParam:00000000
<02953> 00051794 S WM_PAINT hdc:00000000
<02954> 00051794 R WM_PAINT
<02955> 00051794 R message:0x04AE [User-defined:WM_USER+174] lResult:00000000
<02956> 00051794 S message:0x04AE [User-defined:WM_USER+174] wParam:00000000 lParam:00000000
<02957> 00051794 S WM_PAINT hdc:00000000
В моём приложении
<00244> 001718B2 S WM_PAINT hdc:00000000
<00245> 001718B2 R WM_PAINT
<00246> 001718B2 S WM_PAINT hdc:00000000
<00247> 001718B2 R WM_PAINT
<00248> 001718B2 R message:0x04AE [User-defined:WM_USER+174] lResult:00000000
<00249> 001718B2 S message:0x04AE [User-defined:WM_USER+174] wParam:00000000 lParam:00000000
<00250> 001718B2 S WM_PAINT hdc:00000000
<00251> 001718B2 R WM_PAINT
<00252> 001718B2 R message:0x04AE [User-defined:WM_USER+174] lResult:00000000
<00253> 001718B2 P message:0x04AD [User-defined:WM_USER+173] wParam:00000000 lParam:00000000
<00254> 001718B2 P message:0x04AD [User-defined:WM_USER+173] wParam:00000000 lParam:00000000
<00255> 001718B2 P message:0x04AD [User-defined:WM_USER+173] wParam:00000000 lParam:00000000
<00256> 001718B2 S message:0x04AE [User-defined:WM_USER+174] wParam:00000000 lParam:00000000
<00257> 001718B2 S WM_PAINT hdc:00000000
<00258> 001718B2 R WM_PAINT
<00259> 001718B2 R message:0x04AE [User-defined:WM_USER+174] lResult:00000000
<00260> 001718B2 P message:0x04AD [User-defined:WM_USER+173] wParam:00000000 lParam:00000000
<00261> 001718B2 S message:0x04AE [User-defined:WM_USER+174] wParam:00000000 lParam:00000000
<00262> 001718B2 S WM_PAINT hdc:00000000
<00263> 001718B2 R WM_PAINT
<00264> 001718B2 R message:0x04AE [User-defined:WM_USER+174] lResult:00000000
<00265> 001718B2 P message:0x04AD [User-defined:WM_USER+173] wParam:00000000 lParam:00000000
<00266> 001718B2 S message:0x04AE [User-defined:WM_USER+174] wParam:00000000 lParam:00000000
<00267> 001718B2 S WM_PAINT hdc:00000000
<00268> 001718B2 R WM_PAINT
Разница в том что в моё приложении постоянно прилетает и обрабатывается WM_USER+173. Что это за сообщение и как от него можно избавиться? И в чём может быть причина если не в нём?
Здравствуйте, c-smile!
CS>Архитектура WS_EX_LAYERED окон в Windows не предусматривает partial update (как минимум на XP) поотму на любой чих перерисовывается окно полностью.
А на Win7 есть возможность такое осуществить (с partial update )?
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, c-smile!
CS>>Архитектура WS_EX_LAYERED окон в Windows не предусматривает partial update (как минимум на XP) поотму на любой чих перерисовывается окно полностью.
А>А на Win7 есть возможность такое осуществить (с partial update )?
Да. На Win7 будет partial update. Правда не полностью. Но будет быстрее это точно.
Здравствуйте, c-smile, Вы писали:
CS>Здравствуйте, Аноним, Вы писали:
А>>Да. На Win7 будет partial update. Правда не полностью. Но будет быстрее это точно.
CS>Что такое нонче будет "partial update не полностью" ?
Не помню уже подробностей, то ли htmlayout целиком рендерит всю страницу и потом кусок выбрасывает на экран, то ли наоборот — рендерит кусок а выбрасывает на экран весь буфер. Может ты окажешься более удачным, у меня не получилось
Дима.