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


Автор: OlgaKor 17.1.2003, 08:22
Появился еще один вопрос:

В диалоговом приложении, во время выполнения какой-либо длительной операции очень хочется вывести на экран для пользователя что-то типа : "Подождите...Данная операция займет какое-то время."  Причем, желательно, чтобы это было в отдельном окне.

Я вижу два явных выхода:

1. Просто, в заранее созданном EditBox-е, изменять свойство Vsible на true, а по окончании операции - на false. (для пользователя тем самым на экране будет появляться и исчезать когда нужно окошечко). Выход не самый прямой, но скажите где оно, это свойство Visible у контрола, это пригодится не только здесь?

2. Прямой Путь : наверное, существует специально для таких вещей что-то типа MessageBox-а.  Я знаю точно, что такие есть в Fox-e, ты просто обрамляешь какой-то кусок кода командами:
  WAIT 'Подождите... ' WINDOW AT X, Y NOWAIT NOCLEAR
  <код>
  WAIT CLEAR
и сообщение: "Подождите...", появляется в начале выполнения кода и исчезает только после его завершения.
   
В VC я нашла только стандартные модальные сообщения, для прохождение сквозь которые надо нажать что-нибудь  -  это не подходит.

3. Может есть третий, четвертый, ... пути

Буду рада их узнать.

Помогите, пожалуйста.

Ой, да, еще маленький вопросик, а как сделать так, чтобы приложение запускалось в развернутом виде, а?  Куда вписать WS_MAXIMIZE?

Автор: Vaulter 17.1.2003, 14:18
WS_MAXIMIZE делаем так
ShowWindow(hwnd,WS_MAXIMIZE);

1. да бога ради: св-ва visible как такого нет.
опять же:

ShowWindow(hstatic,WS_SHOW);
бла бла бла
ShowWindow(hstatic,WS_HIDE);

2.
HWND hwait=CreateDialog(бла бла бал);
бла бла бла
EndDialog(hwait,0);

Автор: Baa 17.1.2003, 18:43
2 vaulter: ты чего народ путаешь?  :D  :D  :D  WS_SHOW %) на пожар чтоли торопился?
з.ы. 2 OlgaKor: все константы начинаются на SW, а не на WS (т.е. SW_SHOW и т.д.).

Автор: Vaulter 17.1.2003, 21:01
Baa ага, точно. млин. запутала она меня, чертовка =))))

Автор: OlgaKor 20.1.2003, 01:17
В любой другом месте спутала бы, не сомневайтесь, но не здесь. Я же от чистого сердца. Если бы знала где что писать, то и не спрашивала бы.
WS_MAXIMIZE взяла не с потолка, это Window Style для dwStyle. Думала, что именно он сюда и относится. Из MSDN:

HWND CreateWindowEx(
...
  DWORD       dwExStyle,       //Extended style parameter
...
  DWORD       dwStyle,         //Style parameter

или

virtual BOOL Create( LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);

поэтому и писала WS_.

Автор: HexoGenus 20.1.2003, 07:00
WS_MAXIMIZE - это один из стилей окна который означает что окно должно быть изначально максимизировано...
Так что ты абсолютно правильно спросила...
если ты создаешь окно сама то этот стиль указывается в функции создающей окно CreateWindow...
Я в билдере на кнопочку прописал код создающий окно попробуй у себя...
Код

//---------------------------------------------------------------------------
long WINAPI MainEventManager(HWND hw, UINT Code,WPARAM wParam,LPARAM lParam);
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   HWND hw;
   char Name[]="DemoWinClass";
static WNDCLASS rc;
   //rc.style=WS_MAXIMIZE | CS;
rc.lpfnWndProc =MainEventManager;// Функция окна
rc.hInstance =HInstance; // Handle приложения которому принадлежит окно
   rc.hIcon = LoadIcon(NULL, IDI_EXCLAMATION ); // иконка  //
   rc.hCursor = LoadCursor( NULL, IDC_ARROW ); // курсор  //
   rc.hbrBackground = CreateSolidBrush( RGB( 255,255,255 ) );//фон
rc.lpszClassName = Name; // идентификатор класса окна
RegisterClass( &rc ); // регистрация класса окна
hw= CreateWindow(Name,Name,   //Создание окна
       WS_MINIMIZEBOX|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_MAXIMIZE|WS_CAPTION|WS_BORDER|WS_SYSMENU|WS_THICKFRAME,
       CW_USEDEFAULT,0,CW_USEDEFAULT,0, NULL,
       NULL,
       HInstance,
       NULL);
   ShowWindow(hw, SW_SHOW);
   UpdateWindow(hw);
}
//---------------------------------------------------------------------------
long WINAPI MainEventManager(HWND hw, UINT Code,WPARAM wParam,LPARAM lParam)
{
switch (Code)
  {
    case WM_COMMAND:
break;
    case WM_DESTROY:
  PostQuitMessage(0);
break;
    default:
        return DefWindowProc(hw,Code,wParam,lParam);
  }
return 0;
}
//---------------------------------------------------------------------------


Я не хочу бить себя в грудь крыльями и кричать что я лучше всех все знаю :cool  (это совсем не так) но ооооочень советую тебе прикупить книжечку
"Азбука программирования Win32 API" П.В.Румянцева (не для ч...)
(я и сам знаю что на форумах желательно давать ссылки на электронные издания)
книжечка недорогая, тоненькая но несмотря на то что она тонкая я на ней целый месяц засыпал потому что по нескольку раз перечитывал куски кода ...
и знаешь вроде помогает...  :lookaround

Автор: HexoGenus 20.1.2003, 07:11
Кстати это было бы невероятно но если ты все таки программируешь в Билдере а не в Визуале то для того что бы приложение запускалось сразу развернутым достаточно у основного окна у параметре WindowState в инспекторе объектов выбрать значение wsMaximized

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