Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > как заставить двигаться кнопку при изм. размера


Автор: ENTiTY 29.5.2003, 13:08
Пробую с помощью SetWindowPos так:

m_ToolBar - панелька SDI приложения,

CWnd *pWnd=m_ToolBar.GetDlgItem(IDC_BUTTON);

RECT rect;
m_ToolBar.GetWindowRect(&rect); // координаты этой панельки
int nMargin=73; // отступ от правого края панельки

int nButtonWidth=75; // ширина кнопки

если написать:
pWnd->SetWindowPos(NULL, rect.right-nMargin-nButtonWidth, rect.top+3, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
кнопка вообще не видна

если написать:
pWnd->SetWindowPos(&CWnd::wndTopMost, rect.right-nMargin-nButtonWidth, rect.top+3, 0, 0, SWP_NOSIZE);
кнопка видна, но ни фига не двигается куда положено, а остается на месте

Автор: DENNN 29.5.2003, 15:51
Попробуй так
Код

m_ToolBar - панелька SDI приложения,

CWnd *pWnd=m_ToolBar.GetDlgItem(IDC_BUTTON);

СRECT rect;
m_ToolBar.GetWindowRect(&rect); // координаты этой панельки
int nMargin=73; // отступ от правого края панельки

int nButtonWidth=75; // ширина кнопки

rect.right-=nMargin; rect.left=rect.right-nButtonWidth;
rect.DeflateRect(0,3);
m_ToolBar.ScreenToClient(&rect);
pWnd->MoveWindow(&rect,TRUE);

Автор: DENNN 29.5.2003, 15:54
На будущее, читай MSDN до конца. Вот что написано в справке по SetWindowPos
Цитата

Remarks

...........................

All coordinates for child windows are client coordinates (relative to the upper-left corner of the parent window’s client area).


Автор: ENTiTY 29.5.2003, 16:35
Большой Thanks! Я совсем забыл про эти дурацкие системы координат.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)