Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
36 / 23 / 10
Регистрация: 14.11.2013
Сообщений: 85
1

Не регистрируется класс окна

19.11.2013, 20:06. Показов 1874. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет
Непонятная ошибка. Сама программа компилируется а вот при запуске выводит сообщение Cannot register class.
Не знаю что делать В чем причина такого поведения?


KWnd.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <Windows.h>
 
 
class KWnd
{
protected:
    HWND                m_hWnd;
    WNDCLASSEX          m_wc;
 
public:
    KWnd(LPCWSTR windowName,  HINSTANCE hInstance,  int cmdShow,
        LRESULT (WINAPI *p_funWndProc)(HWND, UINT, WPARAM, LPARAM),
        LPCWSTR menuName = NULL,
        int x = 0,  int y = 0,
        int width = 500,  int height = 250,
        UINT classStyle = CS_HREDRAW | CS_VREDRAW,
        DWORD windowStyle = WS_OVERLAPPEDWINDOW,
        HWND hParent = NULL);
 
    HWND GetHwnd()      { return m_hWnd; }
};



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
43
44
45
46
47
48
49
50
51
52
#include "KWnd.h"
 
 
KWnd::KWnd(LPCWSTR windowName,  HINSTANCE hInstance,  int cmdShow,
        LRESULT (WINAPI *p_funWndProc)(HWND, UINT, WPARAM, LPARAM),
        LPCWSTR menuName,
        int x,  int y,
        int width,  int height,
        UINT classStyle,
        DWORD windowStyle,
        HWND hParent)
{
    LPWSTR              szClassName = L"KWndClass1";
 
 
    m_wc.cbSize         = sizeof(m_wc);
    m_wc.style          = classStyle;
    m_wc.lpfnWndProc    = p_funWndProc;
    m_wc.cbClsExtra     = 0;
    m_wc.cbWndExtra     = 0;
    m_wc.hInstance      = hInstance;
    m_wc.hIcon          = LoadIcon(NULL,  IDI_APPLICATION);
    m_wc.hCursor        = LoadCursor(NULL,  IDC_ARROW);
    m_wc.hbrBackground  = (HBRUSH)GetStockObject(WHITE_BRUSH);
    m_wc.lpszMenuName   = menuName;
    m_wc.lpszClassName  = szClassName;
    m_wc.hIcon          = LoadIcon(NULL,  IDI_APPLICATION);
 
 
    // Регистрация класса окна
    if ( !RegisterClassEx(&m_wc) )
    {
        LPWSTR          msg = L"Cannot register class.";
        MessageBox(NULL,  msg,  L"Error",  MB_OK);
        return ;
    }
 
 
    // Создаем окно
    m_hWnd = CreateWindow(szClassName,  windowName,  windowStyle,  x,  y,  width,  height,  hParent,  (HMENU)NULL,  hInstance,  NULL);
 
    if (!m_hWnd)
    {
        LPWSTR          text = L"Cannot create window.";
        MessageBox(NULL,  text,  L"Error",  MB_OK);
        return ;
    }
 
 
    // Показываем окно
    ShowWindow(m_hWnd,  cmdShow);
}



main.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
72
73
#include <Windows.h>
#include "KWnd.h"
 
 
 
 
 
LRESULT CALLBACK WndProc(HWND hWnd,  UINT uMsg,  WPARAM wParam,  LPARAM lParam);
 
 
 
 
 
// ==================================================================
int WINAPI WinMain(HINSTANCE hInstance,  HINSTANCE hPrevInstance,  LPSTR lpCmdLine,  int nCmdShow)
{
    MSG                 msg;
    KWnd                mainWnd(L"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,  L"Hello, World!",  -1,  &rect,  DT_SINGLELINE | DT_CENTER | DT_VCENTER);
 
            EndPaint(hWnd,  &ps);
            break;
 
 
        case WM_CLOSE:
            userReply = MessageBox(hWnd,  L"А вы уверены в своем желании закрыть приложение?",  L"",  MB_YESNO | MB_ICONQUESTION);
            if (userReply == IDYES)  DestroyWindow(hWnd);
            break;
 
 
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
 
 
        default:
            return DefWindowProc(hWnd,  uMsg,  wParam,  lParam);
    }
 
 
    return 0;
}
Добавлено через 9 минут
А еще название приложения остается в диспетчере задач. Приходится руками его убивать
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2013, 20:06
Ответы с готовыми решениями:

Не регистрируется класс окна
Добрый день, подскажите пожалуйста, почему выдаёт ошибку &quot;Не получилось зарегистрировать класс!&quot; ?...

Не регистрируется класс простого окна
Всем доброго времени суток! Возник очень интересный вопрос. Программа компилируется, а вот при...

Не регистрируется класс
Не подскажете где ошибка в данной сборке

Как узнать класс окна другого процесса? Желательно найти класс окна по PID процесса
Мне нужно узнать класс другого окна по PID процесса

2
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
19.11.2013, 20:51 2
C++
1
2
    m_wc.hIcon          = LoadIcon(NULL,  IDI_APPLICATION);
    m_wc.hIconSm        = LoadIcon(NULL,  IDI_APPLICATION); // <--- Этой строки нет,
в поле hIconSm остается какой-то мусор, вот и получаешь при попытке регистрации класса окна ERROR_INVALID_PARAMETER...
1
36 / 23 / 10
Регистрация: 14.11.2013
Сообщений: 85
19.11.2013, 21:00  [ТС] 3
UI, точно, спасибо большое

А я еще пересчитывал количество полей, которые заполняю. Ведь их должно быть 12. И у меня их тоже 12.
Оказывается два раза написал строчку
C++
1
m_wc.hIcon          = LoadIcon(NULL,  IDI_APPLICATION)
0
19.11.2013, 21:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2013, 21:00
Помогаю со студенческими работами здесь

Хорошо ли агрегировать главный вычислительный класс в класс главного окна?
Каждый раз, создавая проект, помещаю объект класса, являющегося наследником QMainWindow в main(),...

Как правильно работать с GUI , класс main и класс окна
Здравствуйте , вот только не давно начал работать с пользовательским интерфейсом. Сейчас пытаюсь...

Не регистрируется в DNS
клиент windows 7 (32) сервер 2012 r2 Компьютер перестал регистрироваться в ДНС в журнале говорит:...

Сайт не регистрируется
Есть сайт http://elevenschool.narod.ru. Добавлял формой на яндексе. Почему-то не индексируется......


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru