Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
 Аватар для David Sylva
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687

Ошибки в примере из книги Щупака

03.09.2012, 16:57. Показов 1812. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Парни добрый день. Сел за изучение книги Юрия Щупака Win 32 Api. В примере "Hello World"- второй вариант никак не могу понять где ошибся. Привожу код ( Visual Studio 2010)


KWnd.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <Windows.h>
 
 
class KWnd 
{ 
public: 
    KWnd(LPCTSTR windowName, HINSTANCE hInst, int cmdShow, LRESULT (WINAPI *pWndProc)(HWND, UINT, WPARAM, LPARAM),
        LPCTSTR menuName = NULL, int x = CW_USEDEFAULT, int y = 0, int width = CW_USEDEFAULT, int height = 0, UINT classStyle = CS_HREDRAW | CS_VREDRAW,  
         DWORD windowStyle = WS_OVERLAPPEDWINDOW, HWND hParent = NULL); 
 
    HWND CetHWnd() { return hWnd; } 
protected: 
    HWND hWnd; 
    WNDCLASSEX wc; 
};


KWnd.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
#include "KWnd.h"
 
 
KWnd::KWnd(LPCTSTR windowName, HINSTANCE hInst, int cmdShow, LRESULT (WINAPI *pWndProc)(HWND,UINT, WPARAM, LPARAM), 
      LPCTSTR menuName, int x, int y, int width, int height, UINT classStyle, DWORD windowStyle, HWND hParent) 
 
{ 
    char szClassName[] = "KWndClass"; 
 
    wc.cbSize = sizeof(wc); 
    wc.style = classStyle; 
    wc.lpfnWndProc = pWndProc; 
    wc.cbClsExtra = 0; 
    wc.cbWndExtra = 0; 
    wc.hInstance = hInst; 
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); 
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);  
    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wc.lpszMenuName = menuName;
    wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); 
 
    if(!RegisterClassEx(&wc)) 
    { 
        char msg[100] = "Cannopt register class "; 
        strcat(msg, szClassName); 
        MessageBox(NULL, msg, "Error", MB_OK); 
        return; 
    } 
 
    hWnd = CreateWindow(szClassName, windowName, windowStyle, x, y, width, height, hParent, (HMENU)NULL, 
           hInst, NULL); 
 
    if(!hWnd) 
    { 
        char text[100] = "Cannot create window"; 
        strcat(text, windowName); 
        MessageBox(NULL, text, "Error", MB_OK);
        return; 
    } 
 
    ShowWindow(hWnd, cmdShow); 
}



Hello2
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
#include <Windows.h> 
#include "KWnd.h" 
#include"stdafx.h"
 
 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); 
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow) 
{ 
    MSG msg; 
    KWnd mainWnd("A Hello2 Application", hInstance, nCmdShow, WndProc); 
 
    while (GetMessage(&msg, NULL, 0, 0)) 
    { 
        TranslateMessage(&msg); 
        DispatchMessage(&msg); 
    } 
 
    return msg.wParam; 
} 
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
    HDC hDC; 
    PAINTSTRUCT ps; 
    RECT rect; 
    int userReply; 
 
    switch(uMsg) 
    {  
    case WM_PAINT:
           hDC = BeginPaint(hWnd, &ps); 
 
           GetClientRect(hWnd, &rect); 
           DrawText(hDC, "Hello World!", -1, &rect, 
               DT_SINGLELINE | DT_CENTER | DT_VCENTER ); 
 
           EndPaint(hWnd, &ps); 
           break;  
 
    case WM_CLOSE: 
        userReply = MessageBox(hWnd, "Tochno zakrit preloshenie","",MB_YESNO | MB_ICONQUESTION); 
        if(IDYES == userReply) 
            DestroyWindow(hWnd); 
        break; 
 
    case WM_DESTROY: 
        PostQuitMessage(0); 
        break; 
 
    default: 
        return DefWindowProc(hWnd, uMsg, wParam, lParam); 
    } 
    return 0; 
}


Вот такие ошибки

:\programming\project visual studio\win32 uni1\win32 uni1\kwnd.cpp(1): warning C4627: #include "KWnd.h": пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "StdAfx.h" или перестройка предкомпилированного заголовка
1>d:\programming\project visual studio\win32 uni1\win32 uni1\kwnd.cpp(43): fatal error C1010: непредвиденный конец файла во время поиска предкомпилированного заголовка. Возможно, вы забыли добавить директиву "#include "StdAfx.h"" в источник.
1> Hello2.cpp
1>d:\programming\project visual studio\win32 uni1\win32 uni1\hello2.cpp(1): warning C4627: #include <Windows.h>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "StdAfx.h" или перестройка предкомпилированного заголовка
1>d:\programming\project visual studio\win32 uni1\win32 uni1\hello2.cpp(2): warning C4627: #include "KWnd.h": пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "StdAfx.h" или перестройка предкомпилированного заголовка
1>d:\programming\project visual studio\win32 uni1\win32 uni1\hello2.cpp(11): error C2065: KWnd: необъявленный идентификатор
1>d:\programming\project visual studio\win32 uni1\win32 uni1\hello2.cpp(11): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "mainWnd"
1>d:\programming\project visual studio\win32 uni1\win32 uni1\hello2.cpp(11): error C3861: mainWnd: идентификатор не найден

Буду очень благодарен, тому кто укажет мне на мое скудоумие.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.09.2012, 16:57
Ответы с готовыми решениями:

Ошибки в примере из книги Щупака
Начал читать книжку Щупака &quot;Win32 Api Эффективная разработка приложений&quot; . Переписал пример его кода в VS 2012, выдает 2 ошибки, подскажите...

Не работают примеры из книги Щупака
что делать? Одно только error C2664: CreateWindowExW: невозможно преобразовать параметр 2 из &quot;const char &quot; в &quot;LPCWSTR&quot; ...

Ошибки в книге Щупака
Сел за изучение WinAPI, а в книге подставные примеры...помогите исправить... #include &lt;windows.h&gt; LRESULT CALLBACK...

9
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
03.09.2012, 21:42
Во избежание головной боли не используйте предкомпилированные заголовки.
Создавайте пустой проект и не пишите
#include"stdafx.h"
1
 Аватар для cmath
2525 / 1751 / 152
Регистрация: 11.08.2012
Сообщений: 3,349
04.09.2012, 07:28
Цитата Сообщение от zss Посмотреть сообщение
Во избежание головной боли не используйте предкомпилированные заголовки.
Создавайте пустой проект и не пишите
#include"stdafx.h"
или добавьте ваши хедеры в "stdafx.h" а не в Hello2
1
 Аватар для David Sylva
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
04.09.2012, 09:58  [ТС]
Парни спасибо за внимание но, не помогло.
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
04.09.2012, 10:25
Цитата Сообщение от David Sylva Посмотреть сообщение
спасибо за внимание но, не помогло.
Наверняка неправильно создаете проект.
1.Файл->Создать-> Проект->
2.Выбрать Win32 и Консольное приложение Win32, указать имя проекта и расположение,
нажать "ОК"
3.Нажать "Далее"
4.Поставить галочку в поле "Пустой проект" и нажать "Готово".
0
 Аватар для David Sylva
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
04.09.2012, 12:19  [ТС]
Решил проблему, дело было #include"stdafx.h". Так же возникли проблемы с невозможностью преобразовать параметры, может кому пригодится они решаются путём изменения набора символов.
Свойства проекта - Общие - набор символов меняем Unicode на много байтовую кодировку.

Но самое интересное, что всё компилируется без ошибок, но при запуске ничего не происходит.
0
 Аватар для cmath
2525 / 1751 / 152
Регистрация: 11.08.2012
Сообщений: 3,349
04.09.2012, 16:57
Цитата Сообщение от David Sylva Посмотреть сообщение
Но самое интересное, что всё компилируется без ошибок, но при запуске ничего не происходит.
Нужна еще строка UpdateWindow(hWnd); после ShowWindow(hWnd, nCmdShow);
1
 Аватар для David Sylva
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
04.09.2012, 17:56  [ТС]
Цитата Сообщение от Hydrogen Посмотреть сообщение
Нужна еще строка UpdateWindow(hWnd); после ShowWindow(hWnd, nCmdShow);
Добавил результат тот же
0
 Аватар для cmath
2525 / 1751 / 152
Регистрация: 11.08.2012
Сообщений: 3,349
04.09.2012, 18:47
У вас также нет wc.lpszClassName = szClassName; в месте, где вы заполняете структуру wc типа WNDCLASSEX. Когда я ваш код скомпилировал и запустил программу мне среда выдала ошибку (необработанное исключение) в этом месте:
C++
1
2
3
4
5
6
7
    if(!RegisterClassEx(&wc)) // собственно, здесь
    { 
        char msg[100] = "Cannopt register class "; 
        strcat(msg, szClassName); 
        MessageBox(NULL, msg, "Error", MB_OK); 
        return; 
    }
Я добавил вышеуказанную строку и у меня появилось окошко с надписью "Hello world" посередине. Больше ошибок не обнаружил, у меня все работает.

P.S. Изв., скрины не смогу выложить. И как у вас среда ошибок не выдала?
1
 Аватар для David Sylva
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
04.09.2012, 19:08  [ТС]
Hydrogen Спасибо большое, очень помог. Я пропустил эту строчку в коде.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.09.2012, 19:08
Помогаю со студенческими работами здесь

Ошибка в примере из книги Рихтера
Пытаясь просмотреть пример из книги Рихтера windows для профессионалом, столкнулся с проблемным участком кода: INT_PTR WINAPI...

Почему возникают ошибки в этом примере??
// Proj.cpp : Defines the entry point for the application. // #include &quot;stdafx.h&quot; #include &quot;windows.h&quot; #include &quot;windowsx.h&quot; ...

Найти ошибки в примере из книги с использованием std::transform
пример из книги не работает собственно с transform #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;vector&gt; #include...

Инкапсуляция на примере с книги
Добрый день, я взял пример с книги и прокомментировал моменты которые я не до конца понимаю. Будьте добры поясните пожалуйста. Большое...

Ошибка в примере из книги
Начинаю изучать с самых азов программирование. Для введения решил прочитать &quot;С# для школьников&quot;, но вот кроме первого примера...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru