![]() |
Определить расстояние между значками на раб столе?
Как определить расстояние между значками на рабочем столе (по вертикали и по горизонтали)?
+Может еще кто знает, как сделать обновление рабочего стола (т.е действие, которое происходит по нажатию: Правая клавиша мыши на раб столе -> Refresh, оно же просто F5 на раб столе :) |
послать этому окну событие WM_REFRESH или что-то такое WM_REDRAW
|
Цитата:
Для любого окна можно сделать InvalidateRect MSDN : Код:
InvalidateRectЯ бы навскидку сделал бы примерно так: Поскольку десктопное окно это обичный SysListView32 то можно получить прямоугольник для каждого его элемента с помошью функции BOOL ListView_GetItemRect( HWND hwnd, int i, RECT *prc, int code ); или засылкой сообщения LVM_GETITEMRECT. Только не забывай что десктопное окно находиться в чужом процессе. Поэтому придется аллокировать память под возвращяемое значение(*prc) в чужом процессе. Если интересуют подробности то могу написать. Возможно что есть способ попроще. Нужно подумать. |
Добавлю, что у десктопа хендл всегда = 0...
кстати, а зачем аллочить память в другом процессе? это тут причем? ты когда с OpenGL работаешь, тебе для вывода графики на десктоп ничего не нать кроме контекста DC и хэндла HWND десктопа... нормально работается и делается все что угодно... тут процессы ни при чем... |
Цитата:
Цитата:
|
Цитата:
или вызови функцию GetDesktopWindow() . А аллокация пямяти в другом процессе нужна потому-что в фукции которую мы тут дружно пытаемся вызвать, в параметрах нужно передать указатель на структуру RECT, поскольку память для этой структуры выделена в нашем процессе то указатель на неё в десктопном процессе не имеет никакого смысла. Что бы все правильно отработало нужно аллокировать память под RECT в процессе десктопа передать его в функцию прочитать результат и удалить. |
| Часовой пояс GMT +4, время: 18:12. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.