Как получить размер, и положение кнопок подписи окна (минимизируйте, восстановите, близко),

Самый простой способ проверить, работает ли ваш код - вы можете синхронно обрабатывать его в контроллере после успешного сохранения модели (в действии create).

Для большинства реальных сценариев, где файлы могут быть большими и требовать времени для обработки - лучший способ - асинхронная обработка в фоновых заданиях, поскольку рельсы имеют среду ActiveJob

5
задан Mark Ingram 26 January 2009 в 10:47
поделиться

4 ответа

Я нашел функцию требуемой получить положение кнопок в перспективе: WM_GETTITLEBARINFOEX

Эта ссылка также показывает метрики системы, требуемые получить весь корректный интервал (позор, это не полное диалоговое изображение хотя). Это работает отлично в Vista, и главным образом в XP (в XP существует немного слишком много разрыва между кнопками).

From http://shellrevealed.com/photos/blog_images/images/4538/original.aspx

6
ответ дан 13 December 2019 в 22:18
поделиться

Функция GetSystemMetrics должна помочь Вам с размером (SM_CYSIZE и параметры SM_CXSIZE).

Править

Я не уверен, что можно найти положения с этой функцией, но Вы могли бы смотреть на emule исходный код, им удалось добавить кнопку к подписи окна.

0
ответ дан 13 December 2019 в 22:18
поделиться

GetSystemMetrics дает всю эту информацию. Для рисования в рамках художественного оформления окна используйте GetWindowDC.

3
ответ дан 13 December 2019 в 22:18
поделиться

Следующий код адаптирован из примера «Global Titlebar Hook», который я нашел на http://www.catch22.net/content/snippets . Я изменил пример, чтобы сделать его дружественным к MFC. Он возвращает координату X самой левой кнопки заголовка, но ее можно легко изменить, чтобы найти положение любой из кнопок.

#define B_EDGE 2

int CMyWindow::CalcRightEdge()
{
 if(GetStyle() & WS_THICKFRAME)
  return GetSystemMetrics(SM_CXSIZEFRAME);
 else
  return GetSystemMetrics(SM_CXFIXEDFRAME);
}


int CMyWindow::findNewButtonPosition()
{
 int   nButSize  = 0;
 DWORD dwStyle   = GetStyle();
 DWORD dwExStyle = GetExStyle();

 if(dwExStyle & WS_EX_TOOLWINDOW)
 {
  int nSysButSize = GetSystemMetrics(SM_CXSMSIZE) - B_EDGE;

  if(GetStyle() & WS_SYSMENU) 
   nButSize += nSysButSize + B_EDGE;

  return nButSize + CalcRightEdge();
 }
 else
 {
  int nSysButSize = GetSystemMetrics(SM_CXSIZE) - B_EDGE;

 // Window has Close [X] button. This button has a 2-pixel
 // border on either size
  if(dwStyle & WS_SYSMENU) 
   nButSize += nSysButSize + B_EDGE;

 // If either of the minimize or maximize buttons are shown,
 // Then both will appear (but may be disabled)
 // This button pair has a 2 pixel border on the left
  if(dwStyle & (WS_MINIMIZEBOX | WS_MAXIMIZEBOX) )
   nButSize += B_EDGE + nSysButSize * 2;

 // A window can have a question-mark button, but only
 // if it doesn't have any min/max buttons
  else if(dwExStyle & WS_EX_CONTEXTHELP)
   nButSize += B_EDGE + nSysButSize;

 // Now calculate the size of the border...aggghh!
  return nButSize + CalcRightEdge();
 }
}
1
ответ дан 13 December 2019 в 22:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: