Цитата:
AleXXXSoft:
послать этому окну событие WM_REFRESH или что-то такое WM_REDRAW
|
Пурга. Нет таких сообщений.
Для любого окна можно сделать InvalidateRect
MSDN :
Код:
InvalidateRect
The InvalidateRect function adds a rectangle to the specified window's update region. The update region represents the portion of the window's client area that must be redrawn.
BOOL InvalidateRect(
HWND hWnd, // handle to window
CONST RECT* lpRect, // rectangle coordinates
BOOL bErase // erase state
);
Да, насчет растояний.
Я бы навскидку сделал бы примерно так:
Поскольку десктопное окно это обичный SysListView32 то можно получить прямоугольник для каждого его элемента с помошью функции
BOOL ListView_GetItemRect(
HWND hwnd,
int i,
RECT *prc,
int code
);
или засылкой сообщения LVM_GETITEMRECT.
Только не забывай что десктопное окно находиться в чужом процессе. Поэтому придется аллокировать память под возвращяемое значение(*prc) в чужом процессе. Если интересуют подробности то могу написать.
Возможно что есть способ попроще. Нужно подумать.