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

Не могу стартануть с WinApi - C++

Восстановить пароль Регистрация
 
faradej
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 67
15.07.2013, 17:04     Не могу стартануть с WinApi #1
Решил после изучения С++ освоить WinApi, он всетаки и к С# применим и ко всему угодно на сколько я понял. Но никак не могу понять как начать его изучать. Не могу найти код с окном, который можно бы было вписать в MSVS2010, откомпилить и дальше по учебнику разбирать и пробовать каждый параметр по порядку. В сети советуют читать Петзольда, но там примеры на чистом С.

Вобщем посоветуйте учебник или ресурс с примером, которые можно скопипастить и откомпилить в MSVS2010 и по этому изучать дальше WinApi.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2013, 17:04     Не могу стартануть с WinApi
Посмотрите здесь:

C++ WinAPI
C++ WinAPI в С++
C++ WinApi
C++ WINAPI
WinAPI C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Discoverer
16 / 14 / 2
Регистрация: 05.07.2013
Сообщений: 27
15.07.2013, 17:13     Не могу стартануть с WinApi #2
Лично я изучаю WinAPI по книге именно Петцольда. (а точнее, по древней "Программирование для Windows 95") Примеры на C практически не мешают. Единственное, приходиться изменять в примерах char на wchar_t. Ну и, соответственно, функции, работающие с этим типом. (например, strlen на wcslen и т.п.)
Объяснения в книге вполне понятны. Если есть книги получше по данной теме, то я про них, к сожалению, не слышал.
faradej
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 67
15.07.2013, 17:30  [ТС]     Не могу стартануть с WinApi #3
Я тоже начал изучать по этой книге по рекомендация гугла. Возможно тогда ты сможешь помочь мне, к примеру в 1-м томе его книги на ст. 22-24 приводится первый пробный код. Посмотри пожалуйста правильные ли я файлы создал, и как решить приведенную в скрине синтаксическую ошибку?
Миниатюры
Не могу стартануть с WinApi  
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,593
Записей в блоге: 17
15.07.2013, 17:34     Не могу стартануть с WinApi #4
А если внимательнее читать то что тебе отвечают :
Цитата Сообщение от Discoverer Посмотреть сообщение
Единственное, приходиться изменять в примерах char на wchar_t.
Discoverer
16 / 14 / 2
Регистрация: 05.07.2013
Сообщений: 27
15.07.2013, 17:36     Не могу стартануть с WinApi #5
C++
1
static wchar_t szAppName[] = L"HelloWin";
Насчет файлов: я просто создавал пустой проект, добавлял cpp файл и в нем все прописывал. С make-файлами не хотелось как-то разбираться..) Вообще их не использовал.
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,593
Записей в блоге: 17
15.07.2013, 17:38     Не могу стартануть с WinApi #6
Так вроде есть шаблон в M$VC++ для WinApi. Если знаешь С++ и прочитал "предыдущие главы по WinApi", то легко найти разницу от книжного варианта и поймешь что к чему.
Discoverer
16 / 14 / 2
Регистрация: 05.07.2013
Сообщений: 27
15.07.2013, 17:43     Не могу стартануть с WinApi #7
Есть. Но там сразу много непонятного кода для начинающего изучение. Все равно удалять приходилось.. Так что лучше уж пустой проект.
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,593
Записей в блоге: 17
15.07.2013, 17:47     Не могу стартануть с WinApi #8
То шаблон от куда там "много кода" ?
Нефиг лезть в IDE пока не изучил все необходимые главы и не разобрал код по полочкам.
Discoverer
16 / 14 / 2
Регистрация: 05.07.2013
Сообщений: 27
15.07.2013, 17:58     Не могу стартануть с WinApi #9
Код, выводящий окно с меню "файл" и "справка" там. Лично мне он был абсолютно непонятен, когда я только начал изучать WinAPI. Насчет "много", да, я немного перебрал.
faradej
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 67
15.07.2013, 18:08  [ТС]     Не могу стартануть с WinApi #10
Вобщем привожу код, так как не компилиться ничего, при том что нету синтаксических ошибок. Кстати, что делает буква L перед перменной?

Мейк-файл
C++
1
2
3
4
5
6
7
#------------------------
# HELLOWIN.MAK make file
#------------------------
hellowin.exe : hellowin.obj
$(LINKER) $(GUIFLAGS) -OUT:hellowin.exe hellowin.obj $(GUILIBS)
hellowin.obj : hellowin.cpp
$(CC) $(CFLAGS) hellowin.cpp
Цпп-файл
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
/*------------------------------------------------------------
HELLOWIN.C -- Displays "Hello, Windows 95!" in client area
(c) Charles Petzold, 1996
------------------------------------------------------------*/
 
 
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
static wchar_t szAppName[] = L"HelloWin";
HWND hwnd;
MSG msg;
WNDCLASSEX wndclass;
wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
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 = szAppName;
wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
RegisterClassEx(&wndclass);
hwnd = CreateWindow(
szAppName, // window class name
L"The Hello Program", // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL
); // creation parameters
ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch(iMsg)
{
case WM_CREATE:
PlaySound(L"hellowin.wav", NULL, SND_FILENAME | SND_ASYNC);
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);
DrawText(hdc, L"Hello, Windows 95!", -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hwnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, iMsg, wParam, lParam);
}
Ошибка:
1>------ Построение начато: проект: 123, Конфигурация: Debug Win32 ------
1>Построение начато 15.07.2013 17:04:06.
1>InitializeBuildStatus:
1> Обращение к "Debug\123.unsuccessfulbuild".
1>ClCompile:
1> HELLOWIN.cpp
1>ManifestResourceCompile:
1> Для всех выходных данных обновления не требуется.
1>HELLOWIN.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__PlaySoundW@12 в функции "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z)
1>MSVCRTD.lib(crtexe.obj) : error LNK2019: ссылка на неразрешенный внешний символ _main в функции ___tmainCRTStartup
1>C:\Users\Андрей\Documents\Visual Studio 2010\Projects\123\Debug\123.exe : fatal error LNK1120: 2 неразрешенных внешних элементов
Discoverer
16 / 14 / 2
Регистрация: 05.07.2013
Сообщений: 27
15.07.2013, 18:16     Не могу стартануть с WinApi #11
Префикс L указывает, что используются двухбайтовые символы.
faradej
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 67
15.07.2013, 18:39  [ТС]     Не могу стартануть с WinApi #12
Разобрался, у меня в MSVS2010 был создан консольный проэкт и ему что-то не хватало.

Кстати, работает без мейк-файла, зачем он нужен? Это последний вопрос в этой теме .
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
15.07.2013, 18:43     Не могу стартануть с WinApi #13
а он и не нужен.
И вообще, лучше сразу в настройках проекта выбрать Multibyte character set
Тогда и ошибок не будет возникать с LPCWSTR
и в примерах никаких префиксов "L" не придётся приписывать.
Всё будет работать с простыми char*
Discoverer
16 / 14 / 2
Регистрация: 05.07.2013
Сообщений: 27
15.07.2013, 18:47     Не могу стартануть с WinApi #14
Кстати, у меня и в проекте Win32 ошибка линковщика с этим PlaySound была. Решилось с добавлением в дополнительные зависимости winmm.lib.
faradej
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 67
15.07.2013, 18:58  [ТС]     Не могу стартануть с WinApi #15
Честно говоря выражение - "Добавление в дополнительные зависимости winmm.lib" мне мало что говорит)). У меня это решилось закоментированием этой строки . Если не лень то обясни, или ссылочку кинь.
Discoverer
16 / 14 / 2
Регистрация: 05.07.2013
Сообщений: 27
15.07.2013, 19:02     Не могу стартануть с WinApi #16
Свойства проекта -> Компоновщик -> Ввод -> Дополнительные зависимости.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2013, 21:18     Не могу стартануть с WinApi
Еще ссылки по теме:

Не могу стартануть "Hello" C++
Не могу разобраться в WinApi C++
WinAPI + AD C++

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

Или воспользуйтесь поиском по форуму:
Убежденный
Системный программист
 Аватар для Убежденный
14197 / 6212 / 985
Регистрация: 02.05.2013
Сообщений: 10,348
Завершенные тесты: 1
15.07.2013, 21:18     Не могу стартануть с WinApi #17
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
И вообще, лучше сразу в настройках проекта выбрать Multibyte character set
Тогда и ошибок не будет возникать с LPCWSTR
и в примерах никаких префиксов "L" не придётся приписывать.
Всё будет работать с простыми char*
И после этого приложение будет выводить кракозябры практически на любых нерусских локализациях Windows.
Юникод - наше все !
Yandex
Объявления
15.07.2013, 21:18     Не могу стартануть с WinApi
Ответ Создать тему
Опции темы

Текущее время: 13:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru