Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Диалог или Окно? 
:(
    Опции темы
Leksey
Дата 12.12.2004, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 12.12.2004

Репутация: 1
Всего: 1



Простите за нескромный вопрос:
В каком случае лучше использовать диалог, а когда окно?
Что дает регистрация класса окна?
И вообще с диалогами бысрее и легче работать, но используются окна.
PM MAIL   Вверх
Coocky
Дата 12.12.2004, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: нет
Всего: 62



Цитата
В каком случае лучше использовать диалог, а когда окно?

Диалог и есть окно...
Диалог для того и предназначен-вести диалог с пользователем.Он не имеет халявного ресайза,поэтому в нормальных прогах не используется как основное окно,а как впомогательное.
Насчет быстроты-не согласен.Вообще такое понятие к окнам недопустимо.Насчет легкости-согласен.


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
zhgutov
Дата 14.12.2004, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 14.12.2004

Репутация: 1
Всего: 2



Цитата
Он не имеет халявного ресайза


«Халявный» ресайз, например, при описании в файле ресурсов (стиль окна WS_THICKFRAME):
Код

IDD_DIALOGX DIALOGEX 0, 0, 143, 170
STYLE /* ... | */ WS_THICKFRAME
CAPTION "Sample"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
// ...
END


Кстати, есть резон использовать диалоговое окно в качестве основного в случае, если на нем требуется разместить элементы управления, зависимые от «разрешения» экрана.

Под разрешением здесь подразумевается значение pixels/distance, устанавливаемое в настройках экрана Windows (Display->Settings->Advanced->General).
--------------------
Приполз. Увидел. Укусил.
PM MAIL   Вверх
Leksey
Дата 14.12.2004, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 12.12.2004

Репутация: 1
Всего: 1



А если я буду использовать диологовое окно как основное у простенького текстового редактора в чем будут его недостатки?
PM MAIL   Вверх
zhgutov
Дата 14.12.2004, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 14.12.2004

Репутация: 1
Всего: 2



Не ясно, что представляет собой программа. Какие у нее возможности? Что еще, кроме окна редактирования лежит в клиентской области окна?
--------------------
Приполз. Увидел. Укусил.
PM MAIL   Вверх
Leksey
Дата 15.12.2004, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 12.12.2004

Репутация: 1
Всего: 1



В принципе больше ничего и не лежит в клиентской области окна?(А что например еще может лежать в клиентской области окна текстового редактора?)
PM MAIL   Вверх
zhgutov
Дата 15.12.2004, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 14.12.2004

Репутация: 1
Всего: 2



Для простой программы разницы особой нет, что использовать. Особенно, если для всего этого написан шаблон.

Цитата
А что например еще может лежать в клиентской области окна текстового редактора?

Другие элементы управления, для конкретной задачи.
--------------------
Приполз. Увидел. Укусил.
PM MAIL   Вверх
Leksey
Дата 15.12.2004, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 12.12.2004

Репутация: 1
Всего: 1



Цитата
Особенно, если для всего этого написан шаблон.

Можно поподробнее о шаблонах или где о них можно почитать?
PM MAIL   Вверх
zhgutov
Дата 15.12.2004, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 14.12.2004

Репутация: 1
Всего: 2



Говоря о шаблоне я имею в виду что-то вроде:
Код

#include <tchar.h>
#include <windows.h>
#include <windowsx.h>

int _tWinMain (HINSTANCE, HINSTANCE, PTSTR, int)
{
       // ...
}

Метод copy/paste в действии.

Может быть нужен пример?
--------------------
Приполз. Увидел. Укусил.
PM MAIL   Вверх
Coocky
Дата 15.12.2004, 01:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: нет
Всего: 62



Цитата
Халявный» ресайз, например, при описании в файле ресурсов (стиль окна WS_THICKFRAME):

А элементы на нем? smile


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
zhgutov
Дата 15.12.2004, 01:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 14.12.2004

Репутация: 1
Всего: 2



Цитата
А элементы на нем?

А это вопрос второй.
--------------------
Приполз. Увидел. Укусил.
PM MAIL   Вверх
Coocky
Дата 15.12.2004, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: нет
Всего: 62



Цитата
А это вопрос второй.

Ну так я это и имел,кстати в QT есть... smile А если про стиль,так и ежу понятно smile


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
zhgutov
Дата 15.12.2004, 02:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 14.12.2004

Репутация: 1
Всего: 2



Цитата
А если про стиль,так и ежу понятно

Если б автору темы было все понятно, то она не появилась бы smile

Это сообщение отредактировал(а) zhgutov - 15.12.2004, 02:52
--------------------
Приполз. Увидел. Укусил.
PM MAIL   Вверх
Leksey
Дата 15.12.2004, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 12.12.2004

Репутация: 1
Всего: 1



Цитата
Может быть нужен пример?

Я бы был очень благодарен за пример.
PM MAIL   Вверх
zhgutov
Дата 15.12.2004, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 14.12.2004

Репутация: 1
Всего: 2



Вот, например, шаблон программы, создающей главное окно приложения, использующего двойную буферизацию для прорисовки клиентской области:
Код

#include <tchar.h>
#include <windows.h>
#include <windowsx.h>

const TCHAR* CLASS_NAME = _T ("Win32API_template");
const TCHAR* PROGRAM_NAME = _T ("Win32 API (GDI) program template");

HWND h_wnd_main = NULL;

LRESULT CALLBACK wnd_fun (HWND h_wnd, UINT u_msg, WPARAM w_param, LPARAM l_param)
{
switch (u_msg) {
case WM_PAINT: // Прорисовка с двойной буферизацией
{
 PAINTSTRUCT ps;
 HDC h_dc = BeginPaint (h_wnd, &ps);
 HDC h_comp_dc = CreateCompatibleDC (h_dc);

 HBITMAP h_back_buffer = CreateCompatibleBitmap (h_dc, ps.rcPaint.right, ps.rcPaint.bottom);
 HBITMAP h_old_bitmap = SelectBitmap (h_comp_dc, h_back_buffer);

 HBRUSH h_solid_brush = CreateSolidBrush (GetSysColor (COLOR_WINDOW));
 FillRect (h_comp_dc, &ps.rcPaint, h_solid_brush);
 DeleteObject (h_solid_brush);

 // Здесь - код, рисующий в клиентской области на совместимом контексте устройства

 BitBlt (h_dc, ps.rcPaint.left, ps.rcPaint.top, ps.rcPaint.right, ps.rcPaint.bottom,
   h_comp_dc, ps.rcPaint.left, ps.rcPaint.top, SRCCOPY);
 SelectBitmap (h_comp_dc, h_old_bitmap), DeleteObject (h_back_buffer);

 DeleteDC (h_comp_dc);
 EndPaint (h_wnd, &ps);
}
 return 0;
case WM_GETMINMAXINFO:
 reinterpret_cast <PMINMAXINFO>(l_param)->ptMinTrackSize.x = GetSystemMetrics (SM_CXSCREEN) >> 1;
 reinterpret_cast <PMINMAXINFO>(l_param)->ptMinTrackSize.y = GetSystemMetrics (SM_CYSCREEN) >> 1;
 break;
case WM_DESTROY:
 PostQuitMessage (0);
 return 0;
}
return DefWindowProc (h_wnd, u_msg, w_param, l_param);
}

int WINAPI _tWinMain (HINSTANCE h_instance, HINSTANCE, PTSTR, int cmd_show)
{
WNDCLASS wc = {
 CS_HREDRAW | CS_VREDRAW | CS_OWNDC, wnd_fun, 0, 0, h_instance,
 LoadIcon (NULL, IDI_APPLICATION), LoadCursor (NULL, IDC_ARROW), NULL, NULL, CLASS_NAME
};
if (!RegisterClass (&wc) || !(h_wnd_main = CreateWindowEx (WS_EX_CLIENTEDGE, CLASS_NAME,
  PROGRAM_NAME, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
  CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, h_instance, NULL))) {
 MessageBox (NULL, _T ("Ошибка при создании главного окна; программа будет завершена"),
   PROGRAM_NAME, MB_OK | MB_ICONERROR);
 return 1;
}

ShowWindow (h_wnd_main, cmd_show);
UpdateWindow (h_wnd_main);

MSG msg;
while (GetMessage (&msg, NULL, 0, 0)) {
 TranslateMessage (&msg);
 DispatchMessage (&msg);
}

return 0;
}

Добавлено @ 16:30
А регистрация класса окна — это примерно то же, что создание класса в C++. Регистрируя класс окна, пользователь получает возможность создания множества однотипных окон, в т.ч. с одной и той же оконной функцией.

Аналогия — создание какого-либо элемента управления. Скажем, банальная кнопка имеет класс «button».
--------------------
Приполз. Увидел. Укусил.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0863 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.