imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 30.03.2005, 23:00     # 1
Merlyel
Junior Member
 
Регистрация: 10.08.2003
Сообщения: 189

Merlyel Реально крут(а)Merlyel Реально крут(а)Merlyel Реально крут(а)Merlyel Реально крут(а)
Определить расстояние между значками на раб столе?

Как определить расстояние между значками на рабочем столе (по вертикали и по горизонтали)?
+Может еще кто знает, как сделать обновление рабочего стола (т.е действие, которое происходит по нажатию: Правая клавиша мыши на раб столе -> Refresh, оно же просто F5 на раб столе
Merlyel вне форума  
Старый 31.03.2005, 11:11     # 2
AleXXXSoft
Guest
 
Сообщения: n/a

послать этому окну событие WM_REFRESH или что-то такое WM_REDRAW
 
Старый 31.03.2005, 17:01     # 3
alexey_ma
Member
 
Регистрация: 10.03.2002
Адрес: Israel
Сообщения: 245

alexey_ma Нимб уже пробиваетсяalexey_ma Нимб уже пробивается
Цитата:
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) в чужом процессе. Если интересуют подробности то могу написать.
Возможно что есть способ попроще. Нужно подумать.
__________________
Best Regards
alexey_ma вне форума  
Старый 31.03.2005, 17:40     # 4
/7y3uK
Advanced Member
 
Аватар для /7y3uK
 
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498

/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)
Добавлю, что у десктопа хендл всегда = 0...
кстати, а зачем аллочить память в другом процессе? это тут причем? ты когда с OpenGL работаешь, тебе для вывода графики на десктоп ничего не нать кроме контекста DC и хэндла HWND десктопа... нормально работается и делается все что угодно... тут процессы ни при чем...
/7y3uK вне форума  
Старый 31.03.2005, 17:57     # 5
Merlyel
Junior Member
 
Регистрация: 10.08.2003
Сообщения: 189

Merlyel Реально крут(а)Merlyel Реально крут(а)Merlyel Реально крут(а)Merlyel Реально крут(а)
Цитата:
alexey_ma:
ListView_GetItemRect
От балда я... почти все для ListView просмотрел, а вот эту команду заюзать не додумался попробуем...
Цитата:
/7y3uK:
а зачем аллочить память в другом процессе?
тут процессы как раз причем - простым способом не получиться преодолеть границы процессов... поэтому либо так, либо запихивать свою DLL, например, в область этого процесса (как у Рихтера в книжке )
Merlyel вне форума  
Старый 31.03.2005, 18:32     # 6
alexey_ma
Member
 
Регистрация: 10.03.2002
Адрес: Israel
Сообщения: 245

alexey_ma Нимб уже пробиваетсяalexey_ma Нимб уже пробивается
Цитата:
/7y3uK:
Добавлю, что у десктопа хендл всегда = 0...
кстати, а зачем аллочить память в другом процессе? это тут причем? ты когда с OpenGL работаешь, тебе для вывода графики на десктоп ничего не нать кроме контекста DC и хэндла HWND десктопа... нормально работается и делается все что угодно... тут процессы ни при чем...
На самом деле не 0. Можешь спаем посмотреть.
или вызови функцию GetDesktopWindow() .
А аллокация пямяти в другом процессе нужна потому-что в фукции которую мы тут дружно пытаемся вызвать, в параметрах нужно передать указатель на структуру RECT, поскольку память для этой структуры выделена в нашем процессе то указатель на неё в десктопном процессе не имеет никакого смысла. Что бы все правильно отработало нужно аллокировать память под RECT в процессе десктопа передать его в функцию прочитать результат и удалить.
__________________
Best Regards
alexey_ma вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 18:12.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.