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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Window _ [] X, Стиль окна 
:(
    Опции темы
Гость_Alex
Дата 22.8.2005, 11:45 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Всем привет!


Пытаюсь освоить основы WinAPI. И никак не могу догнать, как сделать свой стиль окна.

Мне надо что бы оно не позволяло изменять размер и кнопочка навесь экран была неактивна.
И где вообще можно почитать про это?

Спасибо smile
  Вверх
Denn
Дата 22.8.2005, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Петзольд. Программирование для Windows 95.
PM MAIL ICQ   Вверх
Гость_Alex
Дата 22.8.2005, 15:53 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Другими словами это не возможно?

Или ты пытаешься мне сказать, что это WinAPI первобытный век. Если так то твоё мнение меня не интересует, хочу просто узнать ответ на свой вопрос smile
  Вверх
Denn
Дата 22.8.2005, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я ответил на вопрос где можно почитать. Для главного окна стили выставляются в WinMain при инициализации структуры WNDCLASS(EX), а для дочерних в Create(Ex), либо при наследовании дочерних окон.

Кстати книжка чудная хоть и старая конечно.

Это сообщение отредактировал(а) Denn - 22.8.2005, 16:05
PM MAIL ICQ   Вверх
Гость_Alex
Дата 22.8.2005, 19:57 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А можешь примерчик скинуть? smile
  Вверх
Denn
Дата 22.8.2005, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



У меня нету таковых - сам давно MFC юзаю.
Можешь посмотреть на http://www.sources.ru/cpp/winapi/index.html, http://www.codeproject.com.
И здесь можно http://softboard.ru/lofiversion/index.php/t18436.html.

PM MAIL ICQ   Вверх
Гость_Alex
Дата 23.8.2005, 00:28 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо smile

А то куда не обратишься, все трыднят, что это старая тема и ничего не знают.

Классный у вас тут форум! smile
  Вверх
rsm
Дата 23.8.2005, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спокойствие, нетерпеливый пришелец! smile Тут народ простой, работящий, свободным временем, чтобы писать примеры, не сильно располагает smile

Код

#include <windows.h>

#define WINDOW_CLASS "SimpleWindowClass"

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

void start()
{
    WNDCLASS wc = { 0 };
    HWND hwnd;
    MSG msg;
    HINSTANCE hInst;

    hInst = GetModuleHandle(NULL);

    wc.lpszClassName = WINDOW_CLASS;
    wc.lpfnWndProc = WndProc;
    wc.hInstance = hInst;
    wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH) COLOR_WINDOW;

    if (!RegisterClass(&wc))
        ExitProcess(0);

    hwnd = CreateWindow(WINDOW_CLASS, "Window",
        WS_POPUP| WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_VISIBLE,
        300, 300, 200, 100,  NULL, NULL, hInst, NULL);

    if(!hwnd)
        ExitProcess(0);

    ShowWindow(hwnd, SW_SHOW);
    UpdateWindow(hwnd);

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

    ExitProcess(0);
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
        case WM_CLOSE:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
    }
}


Это сообщение отредактировал(а) rsm - 23.8.2005, 09:42

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  window.zip 1,97 Kb
PM MAIL   Вверх
srd
Дата 23.8.2005, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

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



Небольшое замечание: функция ExitProcess() приводит к завершению приложения. Это API функция, которая ничего не знает о таких фичах языка Си++, как деструкторы и т.д.
Вот пример:
Код

#include <windows.h>

class A
{
public:
    ~A( void )
    {
        MessageBox( NULL, "A::~A()", NULL, MB_OK );
    }
};

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPTSTR,int)
{
    A a;
//    ExitProcess(0);
}

Если расскоментировать строчку с вызовом ExitProcess(), то мы никогда не увидем message box.

Вывод: НИКОГДА НЕ ИСПОЛЬЗУЙТЕ ЭТУ ФУНКЦИЮ В СВОЁМ КОДЕ.



--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
rsm
Дата 23.8.2005, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(srd @ 23.8.2005, 12:01)
которая ничего не знает о таких фичах языка Си++

А кто сказал, что я пишу на С++? smile Это Си.

Цитата(srd @ 23.8.2005, 12:01)
НИКОГДА НЕ ИСПОЛЬЗУЙТЕ ЭТУ ФУНКЦИЮ В СВОЁМ КОДЕ

Теоретически, можно было бы написать и return, чтобы просто выйти из функции обратно в дерби ОСи. Это вполне корректно работает в Вин2000. Но где гарантия, что оно же будет нормально работать в других Виндах?
PM MAIL   Вверх
Leksey
Дата 23.8.2005, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



rsm что-то я стобой не совсем согласен.
Как раз return в main штука более универсальная и безопасная и работает не только в Windows любых версий, но и в Unix,Linux...
PM MAIL   Вверх
srd
Дата 23.8.2005, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

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



Цитата(rsm @ 23.8.2005, 22:06)
А кто сказал, что я пишу на С++?  Это Си.

Очень часто код на Си и Си++ смешивается, и такое поведение Си-части сломает Си++ - часть. Собственно, это я и имел в виду.

Цитата(rsm @ 23.8.2005, 22:06)
Теоретически, можно было бы написать и return, чтобы просто выйти из функции обратно в дерби ОСи. Это вполне корректно работает в Вин2000. Но где гарантия, что оно же будет нормально работать в других Виндах?

Если имеется в виду return из точки входа (main()/WinMain()), то это будет работать на любой версии Винды. А гарантия - то, что твой компилятор а) является компилятором языка Си/Си++, для которого смысл инструкции return вполне определён б) предназначен для разработки Win32-приложений, вот и всё.




--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
rsm
Дата 23.8.2005, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Leksey @ 23.8.2005, 16:19)
Как раз return в main штука более универсальная и безопасная

Цитата(srd @ 23.8.2005, 16:20)
Если имеется в виду return из точки входа (main()/WinMain()), то это будет работать на любой версии Винды.

В моей программе точка входа изменена, сделано это с целью экономии ресурсов - 2 Кб это лучше 9,5 Кб при использовании WinMain.

В общем и целом я согласен и признаю вашу правоту относительно того, что для Си\С++ такой код будет не самым лучшим. Это все тлетворное влияние кодинга на Ассемблере, в котором при ошибке в балансе стэка по ret'у в конце программы вылетаешь чёрт-и куда, но только не куда надо.
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.0832 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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