| imho.ws |
![]() |
|
|
|||||||
|
Сообщения:
Перейти к новому /
Последнее
|
Опции темы |
|
|
# 1 |
|
Junior Member
Регистрация: 10.08.2003
Сообщения: 189
![]() ![]() ![]() ![]() |
Определить расстояние между значками на раб столе?
Как определить расстояние между значками на рабочем столе (по вертикали и по горизонтали)?
+Может еще кто знает, как сделать обновление рабочего стола (т.е действие, которое происходит по нажатию: Правая клавиша мыши на раб столе -> Refresh, оно же просто F5 на раб столе
|
|
|
|
|
# 3 | |
|
Member
Регистрация: 10.03.2002
Адрес: Israel
Сообщения: 245
![]() ![]() |
Цитата:
Для любого окна можно сделать 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) в чужом процессе. Если интересуют подробности то могу написать. Возможно что есть способ попроще. Нужно подумать.
__________________
Best Regards |
|
|
|
|
|
# 4 |
|
Advanced Member
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498
![]() ![]() ![]() ![]() |
Добавлю, что у десктопа хендл всегда = 0...
кстати, а зачем аллочить память в другом процессе? это тут причем? ты когда с OpenGL работаешь, тебе для вывода графики на десктоп ничего не нать кроме контекста DC и хэндла HWND десктопа... нормально работается и делается все что угодно... тут процессы ни при чем... |
|
|
|
|
# 5 | ||
|
Junior Member
Регистрация: 10.08.2003
Сообщения: 189
![]() ![]() ![]() ![]() |
Цитата:
почти все для ListView просмотрел, а вот эту команду заюзать не додумался попробуем...Цитата:
(как у Рихтера в книжке )
|
||
|
|
|
|
# 6 | |
|
Member
Регистрация: 10.03.2002
Адрес: Israel
Сообщения: 245
![]() ![]() |
Цитата:
или вызови функцию GetDesktopWindow() . А аллокация пямяти в другом процессе нужна потому-что в фукции которую мы тут дружно пытаемся вызвать, в параметрах нужно передать указатель на структуру RECT, поскольку память для этой структуры выделена в нашем процессе то указатель на неё в десктопном процессе не имеет никакого смысла. Что бы все правильно отработало нужно аллокировать память под RECT в процессе десктопа передать его в функцию прочитать результат и удалить.
__________________
Best Regards |
|
|
|