Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: GetDlgItem()  (Прочитано 17212 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« : 26-08-2004 05:21 » 

перед вопросом сначала пример: есть в некотором классе процедура

void class1::proc1(CWnd* form, int ID)
{
    CWnd *ctrl = form->GetDlgItem(ID);
}

то есть извне в класс передаётся указатель на некую форму (CDialog или CView или любую производную от них)

class1 sss;
sss.proc1(this, ID_1);

корректно ли без преобразования типа CWnd к типу формы делать вызов GetDlgItem(ID) ?
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 26-08-2004 07:31 » 

GetDlgItem есть мембер CWnd  так что всё хокей.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 26-08-2004 09:03 » 

а если он перегружен - всё равно полезет?
Записан

Serega
Гость
« Ответ #3 : 26-08-2004 09:36 » 

GetDlgItem не виртуальный, перегрузить не выдет
Кто и куда полезет ? Отлично
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 26-08-2004 10:36 » 

Serega, забей Улыбаюсь , лучше подскажи - как определить, свёрнуто в данный помент окно или развёрнуто?
Записан

Pu
Большой босс

ru
Offline Offline
78


« Ответ #5 : 26-08-2004 11:45 » 

Алексей1153,  есть такая функция
Код:
BOOL GetWindowInfo( HWND hwnd,  PWINDOWINFO pwi);
получаешь указатель на структуру
Код:
typedef struct {
    DWORD cbSize;
    RECT rcWindow;
    RECT rcClient;
    DWORD dwStyle;
    DWORD dwExStyle;
    DWORD dwWindowStatus;
    UINT cxWindowBorders;
    UINT cyWindowBorders;
    ATOM atomWindowType;
    WORD wCreatorVersion;
} WINDOWINFO, *PWINDOWINFO, *LPWINDOWINFO;
в ней есть dwStyle
так вот в ней и должна содержаться инфа. То же самое как при CreateWindowEx
« Последнее редактирование: 30-11-2007 23:21 от Алексей1153++ » Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #6 : 26-08-2004 13:39 » 

Алексей1153,  А IsWindowVisible() не пробовал?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 26-08-2004 18:33 » 

Pu, студия ругается на то, что идентификатор PWINDOWINFO неопределён, хотя в списке по Ctrl+Space он есть...

Джон, неа, это просто выдаёт то, что мы устанавливаем by ShowWindow(BOOL)
Записан

SOS
Гость
« Ответ #8 : 26-08-2004 19:30 » 

Бывает  Отлично
Записан
Pu
Большой босс

ru
Offline Offline
78


« Ответ #9 : 27-08-2004 05:37 » 

Алексей1153, попробуй определить так, в функцию надо передать ссылку а не пустой указатель.
Код:
WINDOWINFO wi;
::GetWindowInfo( hwnd,  &wi);
if( wi.dwStyle | WS_MAXIMIZE)
  //bla1
else if( wi.dwStyle | WS_MINIMIZE)
 //bla2
else
 //bla3
ругаться цомпилятор может еще и потому что какая либо фигня не отдифайнена. А обявление структуры находится в конструкции
Код:
#ifdef
#endif
« Последнее редактирование: 30-11-2007 23:23 от Алексей1153++ » Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
Pu
Большой босс

ru
Offline Offline
78


« Ответ #10 : 27-08-2004 05:44 » 

и еще не забуть включить
#include "Windows.h"
 Ага
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #11 : 27-08-2004 09:03 » 

Цитата: Алексей1153
свёрнуто в данный помент окно или развёрнуто?


Тогда, что ты понимаешь под этим?

Есть ещё IsIconic, например.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #12 : 27-08-2004 10:47 » 

Pu, #include "Windows.h" не лечит заболевание...

пишет
error C2065: 'WINDOWINFO' : undeclared identifier
error C2039: 'GetWindowInfo' : is not a member of '`global namespace''

ну и соответственно

error C2065: 'GetWindowInfo' : undeclared identifier

Джон, имеется в виду вот что:

свёрнута - когда прога показана только т панели задач (её свернули, нажав "_" в системном меню)

развёрнута или уменьшена - это всё остальное, то есть когда окно проги выводится на экран, неважно при этом, заслонено оно или нет другими окнами

Мне надо в случае, когда окно НЕ свёрнуто, свернуть его и тут же вернуть бывшее состояние обратно

Не знаю, что делает IsIconic(), но то что я хотел позволяет сделать:
когда окно развёрнуто, выполняется условие

FALSE == IsIconic()

*****************
вот так я вроде поборол :

Код:
if(FALSE == IsIconic())
{
     WINDOWPLACEMENT W;
     DWORD sc;

     GetParentFrame()->GetWindowPlacement(&W);
     sc=W.showCmd;

     W.showCmd=WS_MINIMIZE;
     GetParentFrame()->SetWindowPlacement(&W);

     W.showCmd=sc;//восстанавливаем
     GetParentFrame()->SetWindowPlacement(&W);
}

кстати - если последние две строки убрать, то любопытный спецэффект: ни окна программы не видно, ни кнопки на панели задач Улыбаюсь
Какая-то замута с флагами
« Последнее редактирование: 30-11-2007 23:29 от Алексей1153++ » Записан

SOS
Гость
« Ответ #13 : 27-08-2004 16:34 » 

Алексей1153,
Цитата

Не знаю, что делает IsIconic(),

IsIconic() это кода окно свёрнуто ( нажав "_" в системном меню ) и теперь представленно в видеде иконки на панели задач.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #14 : 27-08-2004 17:36 » 

SOS, ну, я так примерно и понял

Вот ещё вопрос: где у контрола ComboBox хранится высота выпадающего списка - ведь в редакторе ресурсов её мона задавать
Записан

SOS
Гость
« Ответ #15 : 27-08-2004 18:53 » 

Кажется
Код:
int CComboBox::SetDroppedWidth(   UINT nWidth );
« Последнее редактирование: 30-11-2007 23:29 от Алексей1153++ » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines