Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
cilin
1 / 1 / 0
Регистрация: 02.02.2011
Сообщений: 26
#1

WIN API - C++

30.03.2011, 19:15. Просмотров 1664. Ответов 8
Метки нет (Все метки)

Доброе время суток. Учусь в институте и дали сделать такую хрень:
Реализовать приложения Win32API:
1. Окно в центре экрана с фоном цвета трехмерных элементов содержит переключатели, имитирующие работу светофора. Названия цветов светофора расположены слева от переключателей. При нажатии на переключатель сообщит название его цвета.
2. Нарисовать светофор, в котором цвет «зажигается» при нажатии на эту лампу левой клавишей мыши. Одновременно может гореть только один цвет. Реализовать приложение, используя динамически подключаемую библиотеку.
В контрольной работе представить код разработанных приложений на язык C, используя только функции WinAPI.
Скачал Microsoft Visual C++ 2008 Express Edition. Но если честно ничего не понял. Помогите пожалуйста пошагово создать Win32API типа (Здравствуй мир), я не могу понять где сам этот Win32API. Большая просьба не отправлять в google я думаю кто учится тот меня поймет.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2011, 19:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос WIN API (C++):

Потоки win api - C++
Здравствуйте. Такое задание: необходимо написать программу, которая в главном потоке создает дополнительный поток, и уже в нем...

Преимущество Win Api - C++
Буквально вчера создал тему, где задал вопрос о средствах, с помощью которых можно работать некоторым образом в командной строке. Нашлось...

WIN API, кодировка - C++
Доброго времени суток! Вот если написать: MessageBox(NULL,(LPCWSTR) "Тест",(LPCWSTR)"Системное сообщение", MB_OK); выведется...

DrawText win api - Мистика =) - C++
Начинал изучать C++ на FreeBSD, собирал мейкфайлы и горя не знал. Полез в винде разбираться с её API, и начался дурдом. Вот код. Интересует...

Построение графика в Win Api - C++
Требуется построить график по точкам. Все координаты даны. Не могу найти в пространстве интернета, с помощью каких функций это можно...

win api точки входа - C++
меня интересуют названия функция получения точки входа файла получения конца файла (feof не подойдёт) и функция изменения точки входа. ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
bigredcat
365 / 312 / 3
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
31.03.2011, 08:30 #2
А что преподаватели вам ничего не подсказывают? И учебных пособий не выдают?
Потратив 10 мин вы найдете и здесь все что требуется, если вам так google не нравится. Могу подсказать ключевые слова winapi литература. Далее ищите в названиях что-нибудь типа для начинающих.
0
easybudda
Модератор
Эксперт CЭксперт С++
9624 / 5572 / 946
Регистрация: 25.07.2009
Сообщений: 10,702
31.03.2011, 08:36 #3
вот
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
#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, "Can't register class", "Error", MB_OK);
        return 0;
    }
    
    hWnd = CreateWindow(szClassName, "Hello World application", WS_OVERLAPPEDWINDOW, 
        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
    if ( ! hWnd ){
        MessageBox(NULL, "Can't create window", "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);
}
разбирайтесь.
1
IrineK
Заблокирован
31.03.2011, 11:43 #4
MSVS сильно ругается на "чистые" char.
Нужно ипользовать TCHAR.
Минималистский "Hello" выглядит как-то так:

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
81
82
83
84
85
86
87
#include <windows.h>
#include <tchar.h>
 
static TCHAR szWindowClass[] = _T("win32app");
static TCHAR szTitle[] = _T("My first");
 
HINSTANCE hInst;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int nCmdShow)
{
    WNDCLASSEX wcex;
 
    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = WndProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = hInstance;
    wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)(COLOR_HIGHLIGHT+1);
    wcex.lpszMenuName   = NULL;
    wcex.lpszClassName  = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
 
    if (!RegisterClassEx(&wcex))
    {   MessageBox(NULL,_T("Call to RegisterClassEx failed!"),_T("My first"),NULL);
        return 1;
    }
 
    hInst = hInstance; 
    HWND hWnd = CreateWindow(
        szWindowClass,
        szTitle,
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT,
        500, 100,
        NULL,
        NULL,
        hInstance,
        NULL
    );
 
    if (!hWnd)
    {   MessageBox(NULL,_T("Call to CreateWindow failed!"),_T("My first"), NULL);
        return 1;
    }
 
    ShowWindow(hWnd,nCmdShow);
    UpdateWindow(hWnd);
 
    MSG msg;
    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)
{
    PAINTSTRUCT ps;
    HDC hdc;
    TCHAR greeting[] = _T("Здравствуй, МИР");
 
    switch (message)
    {
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        SetTextColor(hdc, RGB(255, 55, 5));
        TextOut(hdc,180, 20, greeting, _tcslen(greeting));
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
        break;
    }
    return 0;
}
0
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
31.03.2011, 14:08 #5
Цитата Сообщение от IrineK Посмотреть сообщение
MSVS сильно ругается на "чистые" char.
Ничего она не ругается, если настроить нормально В свойствах проекта можно выбрать Unicode, MB или неопределенную (что-то в этом духе). Так что все нормально и с "чистыми" char.
0
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
31.03.2011, 14:52 #6
Цитата Сообщение от IrineK Посмотреть сообщение
Минималистский "Hello" выглядит как-то так:
тогда уж строка
C
1
UpdateWindow(hWnd);
лишняя, т.к. ShowWindow() и так посылает WM_PAINT, и строка:
C
1
TranslateMessage(&msg);
в данном случае тоже лишняя.
0
afiskon
65 / 53 / 3
Регистрация: 06.09.2010
Сообщений: 254
31.03.2011, 15:48 #7
http://msdn.microsoft.com/ - тут описание всех API. Главное - внимательно прочитать, какие аргементы нужно передать для получения определенного результата. Если не получается найти нужную функцию - спроси либо на этом же форуме, либо у знакомого по аське.
0
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
31.03.2011, 18:22 #8
Kastaneda, UpdateWindow советуют посылать все равно, не знаю зачем уж, но читал
0
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
31.03.2011, 19:09 #9
fasked, ну вроде как раз затем, чтобы отрисовать окно.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2011, 19:09
Привет! Вот еще темы с ответами:

Копирование файлов без win api - C++
Добрый день. Что прошу: Мне нужно выполнить копирование моего (ехе) в определенные директории - папки. Мне подсказали что можно...

Глобальное считывание комбинаций win api - C++
Всем привет, есть такая штука как autoHotKey смысл ее действия это считывать нажатия клавиш или комбо, и запускать определенные действия...

Win Api ошибка undefined reference to - C++
пишу функцию BOOL OnCreate(HWND hwnd,LPCREATESTRUCT) { HDC hdc; hBitmap=(HBITMAP)LoadImage(NULL, &quot;IMG.bmp&quot;,IMAGE_BITMAP, 0,...

Win api GetDlgItemInt что за второй параметр - C++
второй параметр функции UINT WINAPI GetDlgItemInt( _In_ HWND hDlg, _In_ int nIDDlgItem, _Out_opt_ BOOL...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
31.03.2011, 19:09
Ответ Создать тему
Опции темы

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