Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Аналог Align и Ahcors в VC++

2.3K
26 июня 2003 года
dvp
11 / / 24.01.2003
Что нужно сделать чтобы при изменении размера окна элементы меняли свои размеры или положение?
2.3K
27 июня 2003 года
dvp
11 / / 24.01.2003
Ну что неужто никто не подскажет такую фигню?
426
27 июня 2003 года
Krivonos
112 / / 20.01.2000
Цитата:
Originally posted by dvp
Ну что неужто никто не подскажет такую фигню?


Фигня довольно простая - отлавливаешь сообщение WM_SIZE этого окна, и в обработчике этого сообщения соотв. меняешь размеры и позиции всех элементов как душа пожелает.

2.3K
27 июня 2003 года
dvp
11 / / 24.01.2003
Цитата:
Originally posted by Krivonos

Фигня довольно простая - отлавливаешь сообщение WM_SIZE этого окна, и в обработчике этого сообщения соотв. меняешь размеры и позиции всех элементов как душа пожелает.


Этого я и боялся. А попроше чего нить нет, ну типа стиль какой нибудь у контрола выставить...

426
27 июня 2003 года
Krivonos
112 / / 20.01.2000
Цитата:
Originally posted by dvp

Этого я и боялся. А попроше чего нить нет, ну типа стиль какой нибудь у контрола выставить...


Во всяком случае я не знаю, может и есть. Мои знакомые тоже так делают :-). Не нужно бояться, ничего страшного в этом нет.

2.3K
27 июня 2003 года
dvp
11 / / 24.01.2003
ну и кто скажет после этого что разработка приложений с сложным пользовательским интерфейсом в Borlande намного проще и быстрее ......
3.6K
30 июня 2003 года
void_123
11 / / 30.06.2003
Цитата:
Originally posted by dvp
ну и кто скажет после этого что разработка приложений с сложным пользовательским интерфейсом в Borlande намного проще и быстрее ......



to dvp.
Да на Borlande, похоже, быстрее. Не отвлекаешься на такую фигню.

to Krivonos.
А как быть, если у Вас на панели CFrameView размещён объект CTabCtrl c 5-ю закладками, и на каждой из них по 5 контролов? Для каждого диалога (для каждой пейджи) переопределять OnSize(.....)?

2.3K
30 июня 2003 года
dvp
11 / / 24.01.2003
Да что уж там говорить по поводу создания контролов с динамически меняющими размеры относительно друг друга ...
3.6K
30 июня 2003 года
void_123
11 / / 30.06.2003
Цитата:
Originally posted by dvp
Да что уж там говорить по поводу создания контролов с динамически меняющими размеры относительно друг друга ...


Что да?
Ред. Смущает CFramtView а не FormView?

426
01 июля 2003 года
Krivonos
112 / / 20.01.2000
Так что, никто не предлагает никакого решения?
На счет "на панели CFrameView размещён объект CTabCtrl c 5-ю закладками, и на каждой из них по 5 контролов" - как одно из решений вижу разрешение ресайза до размеров табконтрола. Или создать свой класс окна, в котором прописать алгоритм смены положения всех контролов на сообщение WM_SIZE.
3.6K
01 июля 2003 года
void_123
11 / / 30.06.2003
Цитата:
Originally posted by Krivonos
Так что, никто не предлагает никакого решения?
На счет "на панели CFrameView размещён объект CTabCtrl c 5-ю закладками, и на каждой из них по 5 контролов" - как одно из решений вижу разрешение ресайза до размеров табконтрола. Или создать свой класс окна, в котором прописать алгоритм смены положения всех контролов на сообщение WM_SIZE.



to ДВП.
Я посмотрел, как люди делают. Вот тебе совет - программируй на Borlande или .NET, но только последний релиз 2003 года(рание релизы 2002 и 2003 не поддерживают визуального дизайнера Windows Forms для проектов C++; только для С# и VB). В указанном дотнете ты сможешь почти также комфортно визуально!!! работать с пропертями контролов. Там появилось проперти Anchor. Вообщем там клёво должно быть. Наконец мелкософт дорос немного до Borland!
Если ты упрямый, и хочешь MFC, то либо используй классы других, например, либо делай, как говорит товарищ Кривонос с Украины, см.выше.
Можешь сделать сам, приблизительно, так:

// dialDlg.h : header file
#define MAXCTRL 100
#define A_TOP 2
#define A_BOTTOM 4
#define A_LEFT 8
#define A_RIGHT 16

typedef struct listctrl
{
unsigned long idc;
unsigned char ank_type;
CRect rct_client;
} LISTCTRL;


// CdialDlg dialog
class CdialDlg : public CDialog
{
...
...
public:
LISTCTRL ctr_list[MAXCTRL];
int cnt_list;
CPoint ptBottomRight;
void AddAnchor(int IDC,unsigned char type )
{
ctr_list[cnt_list].idc = IDC;
ctr_list[cnt_list].ank_type = type;
GetDlgItem(IDC)->GetWindowRect(ctr_list[cnt_list].rct_client);
ScreenToClient(ctr_list[cnt_list].rct_client);
cnt_list ++;
};
void SaveFormRect(void)
{
CRect rc;
GetClientRect( rc );
ptBottomRight = rc.BottomRight();

}
...
...
public:
afx_msg void OnSize(UINT nType, int cx, int cy);
};

//----------------------------------------------
// dialDlg.cpp : implementation file
//
BOOL CdialDlg::OnInitDialog()
{
...
...
// TODO: Add extra initialization here
SaveFormRect();
AddAnchor(IDC_STATIC, A_TOP | A_LEFT);
AddAnchor(IDC_EDIT1, A_TOP | A_LEFT);
AddAnchor(IDOK, A_BOTTOM | A_RIGHT);
AddAnchor(IDCANCEL, A_BOTTOM | A_RIGHT);
return TRUE; // return TRUE unless you set the focus to a control
}
//------------------------------------------------------------------------------
void CdialDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);

// TODO: Add your message handler code here
CRect rc;
GetClientRect( rc );
CPoint offset = rc.BottomRight() - ptBottomRight;
for (int i = 0; i < cnt_list; i++)
{
unsigned char ank = ctr_list.ank_type;
int j;
CRect rct_item = ctr_list.rct_client;

if (ank & A_TOP) {
Делай чегото с ректанглом
}
if (ank & A_LEFT) {
Делай чегото с ректанглом
}
}
if (ank & A_BOTTOM) {
Например,
rct_item.MoveToXY(rct_item.TopLeft().x,rct_item.TopLeft().y + offset.y);
}
if (ank & A_RIGHT) {
Например,
rct_item.MoveToXY(rct_item.TopLeft().x + offset.x,rct_item.TopLeft().y);
}

CWnd* item = (CWnd* ) GetDlgItem(ctr_list.idc);
item->MoveWindow(rct_item);
item->RedrawWindow();
}
}

to Krivonos.
Вы правы. Лучше руками. Я посмотрел, как люди пытаются прикрутить чужие классы - жуть. Лучше руками. Прокоментируйте мой код. Программирую давно, но в MFC - новенький.

Редакц. ДВП, я забыл кинуть ссылку с форума bugtraq.ru -
"
Заодно там есть и всякие функции AddAnchor.
http://www.codeproject.com/dialog/resizabledialog.asp"

2.3K
01 июля 2003 года
dvp
11 / / 24.01.2003
Ну насчет обработки WM_SIZE, то тут я тоже слабал что-то похожее, но вот если нужны разделители (SPLIT) между контролами. Мож есть у кого примерные наработки. Че отлавливать надо wm_nchittest?
426
01 июля 2003 года
Krivonos
112 / / 20.01.2000
void_123:
Прокоментируйте мой код.

Пойдет!
________________
товарищ Кривонос с Украины :-)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог