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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание простейшого АПИ окна, при минимум кода 
V
    Опции темы
Sergio
Дата 7.3.2007, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



Здраствуйте. Хочу создать простое окно для будущего вывода графики в нём. Вот что я написал Что то упустил. Помогите плз:
Код

#include <windows.h>
ATOM RegMyWindowClass(HINSTANCE, LPCTSTR);

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpCmdLine,
                     int nCmdShow)
{
    // имя будущего класса
  LPCTSTR lpzClass = TEXT("My Window Class!");

  // регистрация класса
  if (!RegMyWindowClass(hInstance, lpzClass))
    return 1;

     // создание диалогового окна
  HWND hWnd = CreateWindow(lpzClass, TEXT("Dialog Window"), 
            WS_OVERLAPPEDWINDOW | WS_VISIBLE, 100, 100, 300, 150, NULL, NULL, hInstance, NULL);
  return 0;
}

Ссылался на этот урок: http://www.rsdn.ru/article/baseserv/api32.xml

Это сообщение отредактировал(а) Sergio - 7.3.2007, 23:15
PM MAIL ICQ   Вверх
Aleksandor
Дата 8.3.2007, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Практик
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 22.11.2005
Где: россия, зеленогра д

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



Извиняюсь, а где же цикл обработки сообщений? Там .в статье, он присутствует  smile 


--------------------
Call out Gouranga be happy!!!
Gouranga Gouranga Gouranga ....
That which brings the highest happiness!!
PM MAIL   Вверх
Sergio
Дата 8.3.2007, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



Aleksandor, Я не хочу никаких циклов обработки сообщений. Мне это не нужно. Хочу только создать окно и всё. 
PM MAIL ICQ   Вверх
GremlinProg
Дата 8.3.2007, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



) этот цикл как раз и обрабатывает сообщения окна, т.е., собственно и позволяет окну появиться на экране и манипулировать им.

Если тебе не нужен этот цикл, используй для создания диалогового окна функцию DialogBox, эта функция сама организует упомянутый цикл и вернет результат в WinMain только после закрытия окна.


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
drZmeu
Дата 9.3.2007, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



А где регистрация класса?
Где ShowWindows, UpdateWindow ,,???,,
Приём месаг ? smile 
--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code]
PM MAIL   Вверх
586
Дата 9.3.2007, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

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



Цитата(Sergio @  8.3.2007,  21:12 Найти цитируемый пост)
Я не хочу никаких циклов обработки сообщений. Мне это не нужно. Хочу только создать окно и всё

Такое прокатит, если создаёшь дочернее окно в окне, или второе окно - тогда не нужен цикл обработки сообщений. Но один цикл обработки сообщений должен быть в программе полюбому.
Код
MSG msg;
// создание окна
while(GetMessage(&msg, 0, 0, 0))
{
   TranslateMessage(&msg);
   DispatchMessage(&msg);
}

PM   Вверх
drZmeu
Дата 9.3.2007, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Ну вопервых окно тутже будет закрыватся...
Во вторых вот код:
Код

#pragma comment(linker,"/MERGE:.rdata=.text")
#pragma comment(linker,"/FILEALING:512 /SECTION:.text,EWRX /IGNORE:4028")
#pragma comment(linker,"/ENTRY:WinMain")
#include <windows.h>
ATOM MyRegisterClass(HINSTANCE hInst);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
BOOL                InitInstance(HINSTANCE, int);
MSG msg;
#define IDM_EXIT       105
char __title[64]="Window";
char __class[64]="Window";
WNDCLASSEX wc;
int APIENTRY WinMain(HINSTANCE hInst,HINSTANCE hPrevInst, LPTSTR lpCmdLine,int iCmdShow)
{
wc.cbSize = sizeof(WNDCLASSEX); 
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC)WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInst;
wc.hIcon = NULL;
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = __class;
wc.hIconSm = NULL;
RegisterClassEx(&wc);
CreateWindowEx(0,__class,__title,WS_VISIBLE+WS_DLGFRAME+WS_SYSMENU,128,128,256,192,NULL,NULL,wc.hInstance,NULL);
while(GetMessage(&msg,NULL,0,0))
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}
return (int) msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;

    switch (message) 
    {
    case WM_COMMAND:
        wmId    = LOWORD(wParam); 
        wmEvent = HIWORD(wParam); 
        // Parse the menu selections:
        switch (wmId)
        {
        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        break;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        // TODO: Add any drawing code here...
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}


Добавлено @ 13:50 
Компиль в Win32 -> Empty -> release !
.EXE получается размером 10 кило !!!
Могу попытатся уменьшить код.

Добавлено @ 14:01 
Ну уж проше некуда!!!
Урезал что смог вот результат:
Код

#pragma comment(linker,"/MERGE:.rdata=.text")
#pragma comment(linker,"/FILEALING:512 /SECTION:.text,EWRX /IGNORE:4028")
#pragma comment(linker,"/ENTRY:WinMain")
#include <windows.h>
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
//---------------------------
WNDCLASSEX wc;
#define IDM_EXIT       105
//----------------------------
int APIENTRY WinMain(HINSTANCE hInst,HINSTANCE hPrevInst, LPTSTR lpCmdLine,int iCmdShow)
{
MSG msg;
TCHAR __class[64]="Window";
wc.cbSize = sizeof(WNDCLASSEX);
wc.lpfnWndProc = (WNDPROC)WndProc;
wc.hInstance = hInst;
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszClassName = __class;

RegisterClassEx(&wc);
CreateWindowEx(0,__class,__class,WS_VISIBLE+WS_DLGFRAME+WS_SYSMENU,128,128,256,192,NULL,NULL,wc.hInstance,NULL);
while(GetMessage(&msg,NULL,0,0))
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}
return (int) msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    switch (message) 
    {
    case WM_COMMAND:
        wmId    = LOWORD(wParam); 
        wmEvent = HIWORD(wParam); 
        break;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code]
PM MAIL   Вверх
jonie
Дата 9.3.2007, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



проще чем сделать окно из диалога метода не знаю (на winAPI) 8)
может вполне хватит?) 
Код

int CALLBACK WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
    hInst = hInstance;
    DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG),0,(DLGPROC)DialogProc); //ессно дилог должен быть описан в ресурсах //
}


INT_PTR CALLBACK DialogProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
    switch (uMsg)
    {
.........................
    default:
        return FALSE;//not process message
    }
    return TRUE;//process message
}



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
drZmeu
Дата 9.3.2007, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Для графики я думаю неподойдёт!!!
Хотя кто знает с графикой неработал.
--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code]
PM MAIL   Вверх
jonie
Дата 10.3.2007, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



Цитата

Для графики я думаю неподойдёт!!!
Хотя кто знает с графикой неработал.
крута.. и в чем отличия от "просто окон" ?) smile 


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
drZmeu
Дата 10.3.2007, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Ну вобше если подумать вомногом !!!
Пускай автор топа решает какой метод ему подходит больше.
--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code]
PM MAIL   Вверх
jonie
Дата 10.3.2007, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



Цитата

Ну вобше если подумать вомногом !!!
ну так и в чем же?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
GremlinProg
Дата 10.3.2007, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



Различия в работе самой процедуры окна(результат передается в DWL_MSGRESULT) и в создании контролов диалага(в DialogBox они создаются автоматически). Графика тут, конечно, ни при чем. Вопрос скорости разработки: самый быстрый и простой способ вывести информацию в окне - это DialogBox, но если используется модель взаимодействия контролов на уровне оконных классов, то CreateWindow/Ex позволит гибче управлять этим взаимодействием, потому что обработка всех ключевых событий окна ложится на плечи девелопера.

Желание Sergio очевидно:
Цитата(Sergio @  8.3.2007,  01:15 Найти цитируемый пост)
Хочу создать простое окно для будущего вывода графики в нём




--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1121 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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