Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
GoodLife
9 / 9 / 3
Регистрация: 23.10.2012
Сообщений: 190
#1

Создание окна API windows - C++

07.11.2012, 16:06. Просмотров 1847. Ответов 13
Метки нет (Все метки)

Пример взят из книги Румянцева, азбука программирования в win32 API. Должно быть показано окно с надписью Hello World, вот код примера
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <windows.h>
 
LRESULT CALLBACK HelloWorldWndProc(HWND,UINT,UINT,LONG);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdParam, int nCmdShow)
{
HWND hWnd;
WNDCLASS WndClass;
MSG Msg;
char szClassName[]="HelloWorld";
 
WndClass.style=CS_HREDRAW|CS_VREDRAW;
WndClass.lpfnWndProc=HelloWorldWndProc;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hInstance=hInstance;
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
WndClass.lpszMenuName=NULL;
WndClass.lpszClassName=szClassName;
 
if(!RegisterClass(&WndClass))
        {
        MessageBox(NULL,"Cannot register class","Error",MB_OK);
        return 0;
        }
 
hWnd = CreateWindow(szClassName,"Program No 1",
                        WS_OVERLAPPEDWINDOW,
                        CW_USEDEFAULT,CW_USEDEFAULT,
                        CW_USEDEFAULT,CW_USEDEFAULT,
                        NULL,NULL,
                        hInstance,NULL);
 
if(!hWnd)
        {
        MessageBox(NULL,"Cannot createwindows","Error",MB_OK);
        return 0;
        }
 
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
 
while(GetMessage(&Msg,NULL,0,0))
        {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
        }
return Msg.wParam;
}
 
LRESULT CALLBACK HelloWorldWndProc(HWND hWnd,UINT Message,
                                UINT wParam,LONG lParam)
        {
        HDC hDC;
        PAINTSTRUCT PaintStruct;
        RECT Rect;
        switch(Message)
                {
                case WM_PAINT:hDC=BeginPaint(hWnd,&PaintStruct);
                        GetClientRect(hWnd,&Rect);
                        DrawText(hDC,"Hello, World",-1,&Rect,
                                DT_SINGLELINE|DT_CENTER|DT_VCENTER);
                        EndPaint(hWnd,&PaintStruct);
                        return 0;
                case WM_DESTROY:
                        PostQuitMessage(0);
                        return 0;
                }
        return DefWindowProc(hWnd,Message,wParam,lParam);
        }
Компилятор на него не ругается, все проходит, но окна, когда код вставляешь в Билдер 6 не возникает. В моем коде в билдере торчит еще main , вот его код:

C++
1
2
3
4
int main(int argc, char* argv[])
{
        return 0;
}
Стандартный маин пустой.
Может быть его надо затереть? Опять когда его затираешь ошибка вылазит
Создание окна API windows
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2012, 16:06
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Создание окна API windows (C++):

Создание окна windows
я работаю под ОС windows язык DEV C++ как создать обыкновенное окно,и допустим...

WIN32, Windows(Окна) . Создание Доп.окон.
Снова я) Есть програмка. Программная среда -VisualStudio - проект Win32 ....

Предотвратить сворачивание окна по нажатию кнопки Windows «Свернуть все окна»
Здравствуйте, пишу что то вроде гаджета на c# wpf, и возник вопрос: можно ли...

Создание VPN сети, RAS API
Здравствуйте, я создал небольшой чат, основанный на сокетах. Чтобы клиент...

API: востановление "чужого" окна из min
Знатоки! Может кто знает какие API-функции вызываются при восстановлении...

Создание проекта win32 api в среде visual studio
Скажите как создать проект win32 api, но с конструктором(не чистый winapi)В...

13
BuPy7
Нет ТЗ - давай досвидания
741 / 371 / 64
Регистрация: 01.12.2011
Сообщений: 2,245
07.11.2012, 16:58 #2
Убери int main(). Это вызов главного блока для консольных программ, а WinMain() - для оконных. И всё заработает. Проверил.
1
GoodLife
9 / 9 / 3
Регистрация: 23.10.2012
Сообщений: 190
07.11.2012, 18:54  [ТС] #3
Цитата Сообщение от Metallnote Посмотреть сообщение
И всё заработает. Проверил.
Ну не работает, ошибка в чем-то, написал же сверху маин убираю, вылазит ошбка линкера, и фото там есть (сверху) с ошибкой, вот код без маина, проект на основе Wizard Console, без VCL и всякой лабуды... А зачем? если я хочу чисто с апи винды поработать.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
//---------------------------------------------------------------------------
#include <windows.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
 
//---------------------------------------------------------------------------
 
LRESULT CALLBACK HelloWorldWndProc(HWND,UINT,UINT,LONG);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdParam, int nCmdShow)
{
HWND hWnd;
WNDCLASS WndClass;
MSG Msg;
char szClassName[]="HelloWorld";
 
WndClass.style=CS_HREDRAW|CS_VREDRAW;
WndClass.lpfnWndProc=HelloWorldWndProc;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hInstance=hInstance;
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
WndClass.lpszMenuName=NULL;
WndClass.lpszClassName=szClassName;
 
if(!RegisterClass(&WndClass))
        {
        MessageBox(NULL,"Cannot register class","Error",MB_OK);
        return 0;
        }
 
hWnd = CreateWindow(szClassName,"Program No 1",
                        WS_OVERLAPPEDWINDOW,
                        CW_USEDEFAULT,CW_USEDEFAULT,
                        CW_USEDEFAULT,CW_USEDEFAULT,
                        NULL,NULL,
                        hInstance,NULL);
 
if(!hWnd)
        {
        MessageBox(NULL,"Cannot createwindows","Error",MB_OK);
        return 0;
        }
 
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
 
while(GetMessage(&Msg,NULL,0,0))
        {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
        }
return Msg.wParam;
}
 
LRESULT CALLBACK HelloWorldWndProc(HWND hWnd,UINT Message,
                                UINT wParam,LONG lParam)
        {
        HDC hDC;
        PAINTSTRUCT PaintStruct;
        RECT Rect;
        switch(Message)
                {
                case WM_PAINT:hDC=BeginPaint(hWnd,&PaintStruct);
                        GetClientRect(hWnd,&Rect);
                        DrawText(hDC,"Hello, World",-1,&Rect,
                                DT_SINGLELINE|DT_CENTER|DT_VCENTER);
                        EndPaint(hWnd,&PaintStruct);
                        return 0;
                case WM_DESTROY:
                        PostQuitMessage(0);
                        return 0;
                }
        return DefWindowProc(hWnd,Message,wParam,lParam);
        }
0
SergProgC++
Эксперт GPSS
315 / 317 / 59
Регистрация: 02.07.2010
Сообщений: 1,381
07.11.2012, 19:08 #4
Проект win32?
1
BuPy7
Нет ТЗ - давай досвидания
741 / 371 / 64
Регистрация: 01.12.2011
Сообщений: 2,245
07.11.2012, 19:33 #5
GoodLife, почитайте, как проект подготовить к работе с WinAPI.

Добавлено через 6 минут
Цитата Сообщение от GoodLife Посмотреть сообщение
Пример взят из книги Румянцева, азбука программирования в win32 API.
Как дойдёте до окон управления - закрывайте и читайте Петзолда. Или лучше сейчас читайте Петзолда.
1
Croessmah
++Ͻ
14146 / 8071 / 1512
Регистрация: 27.09.2012
Сообщений: 19,905
Записей в блоге: 3
Завершенные тесты: 1
07.11.2012, 20:06 #6
Скорее всего, Вы не так что-то делаете, т.к. код рабочий. Результат:
Создание окна API windows
1
SergProgC++
Эксперт GPSS
315 / 317 / 59
Регистрация: 02.07.2010
Сообщений: 1,381
07.11.2012, 20:17 #7
Проект создаете консольное приложение а пишете под win32 вот ваша ошибка, вы main удаляете он не может найти точку входа. А если бы у вас был win32 то он вообще на ваше main не обращал внимание есть оно или нет
1
BuPy7
Нет ТЗ - давай досвидания
741 / 371 / 64
Регистрация: 01.12.2011
Сообщений: 2,245
07.11.2012, 20:24 #8
Автор, опишите, последовательно, что и как вы делаете.
1
GoodLife
9 / 9 / 3
Регистрация: 23.10.2012
Сообщений: 190
07.11.2012, 22:22  [ТС] #9
Цитата Сообщение от Metallnote Посмотреть сообщение
Автор, опишите, последовательно, что и как вы делаете.
А я чет х его з, создавал консольное приложение, но это как я понял не правильно, тогда что, какой проект создавать?

Добавлено через 30 секунд
Система Билдер шестой.....

Добавлено через 1 минуту
закрывал проект с формой, открывал проект Wizard console, вставлял туда код этот, вот, консоль я не правильно открывал, тогда что, какой проект создавать? Там нет чтобы надпись была типа такого Win32, я запутался, помогоите...
0
Croessmah
++Ͻ
14146 / 8071 / 1512
Регистрация: 27.09.2012
Сообщений: 19,905
Записей в блоге: 3
Завершенные тесты: 1
07.11.2012, 22:23 #10
Может там есть что-то на подобии
GUI?
1
GoodLife
9 / 9 / 3
Регистрация: 23.10.2012
Сообщений: 190
07.11.2012, 22:41  [ТС] #11
Цитата Сообщение от Croessmah Посмотреть сообщение
там есть что-то на подобии
GUI?
не нашел, я не знаю что это, вот что есть
Создание окна API windows

Создание окна API windows

Создание окна API windows

Создание окна API windows

Создание окна API windows
0
GoodLife
9 / 9 / 3
Регистрация: 23.10.2012
Сообщений: 190
07.11.2012, 22:49  [ТС] #12
Остальные: (во вкладке Project пусто)
Создание окна API windows

Создание окна API windows

Создание окна API windows

Создание окна API windows

Создание окна API windows

Создание окна API windows

Создание окна API windows
0
Croessmah
++Ͻ
14146 / 8071 / 1512
Регистрация: 27.09.2012
Сообщений: 19,905
Записей в блоге: 3
Завершенные тесты: 1
07.11.2012, 22:52 #13
Попробуйте project->application wizard
или project->SDI application
1
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
07.11.2012, 23:37 #14
Другие - Консоль Визард - Убрать галку Косоль Апликейшен. Стереть всё, что будет и вставить свой код.
1
Миниатюры
Создание окна API windows  
07.11.2012, 23:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2012, 23:37
Привет! Вот еще темы с решениями:

Windows API и получение сообщений от мышки
Хотел спросить можно ли при помощи программы сделать так чтобы система получала...

Создание формы (окна)
Здравствуйте! Кто - нибудь знает как создать окно (или по проще белый...

Создание текстового окна
Добрый день. Пробую создать текствое окно на плюсах. Среда разработки - Qt...

Создание Output окна с++
Добрый вечер, как в с++ VS13 создать своё Output окно, чтобы всё писалось в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru