powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Класс не регистрируется
10 сообщений из 10, страница 1 из 1
Класс не регистрируется
    #39093597
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Взял элементарную прогу из книги "Пирогова", создающую пустое окошко. Выглядит так: (см ниже).
Запускается. Но тут же останавливается, поскольку в
Код: plaintext
1.
if (!RegisterClass(&wc))return 0;


условие ==true и выполняется return 0;

Подскажите, пожалуйста, в чём может быть ошибка.

Код: plaintext
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.
#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int APIENTRY WinMain(HINSTANCE hInstance,
					 HINSTANCE hPrevInstance,
					 LPSTR     lpCmdLine,
					 int       nCmdShow)
{
	char cname[] = "Class";
	char title[] = "Access to Web API";
	MSG msg;

	WNDCLASS wc;
	wc.style = 0;
	wc.lpfnWndProc = (WNDPROC)WndProc;
	wc.cbClsExtra = 0;
	wc.hInstance = hInstance;
	wc.hIcon = LoadIcon(hInstance, (LPCWSTR)IDI_APPLICATION);
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
	wc.lpszMenuName = 0;
	wc.lpszClassName = cname;//ошибка компиляции: невозможно присвоить LPCWSTR = char *
	//пробую:
	//wc.lpszClassName = (LPCWSTR)cname;

	if (!RegisterClass(&wc))return 0;

	HWND hWnd = CreateWindow(
		cname, //ошибка и решение аналогичные вышеописанным
		title, //ошибка и решение аналогичные вышеописанным
		WS_OVERLAPPEDWINDOW,
		0,0,
		500,300,
		NULL,
		NULL,
		hInstance,
		NULL);
	if (!hWnd) return 0;

	ShowWindow(hWnd,nCmdShow);
	UpdateWindow(hWnd);

	while (GetMessage(&msg,NULL,0,0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	return 0;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message)
	{
	case WM_CREATE:
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	case WM_PAINT:
		break;
	default:
		return DefWindowProc(hWnd, message, wParam, lParam);
	}
	return 0;
}

...
Рейтинг: 0 / 0
Класс не регистрируется
    #39093603
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
//пробую:
	//wc.lpszClassName = (LPCWSTR)cname;


Неправильно. Если в MSVC компилируешь, то в свойствах проекта "Charaster set" поставь "Not set".
...
Рейтинг: 0 / 0
Класс не регистрируется
    #39093630
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Код: plaintext
1.
2.
//пробую:
	//wc.lpszClassName = (LPCWSTR)cname;



Неправильно. Если в MSVC компилируешь, то в свойствах проекта "Charaster set" поставь "Not set".
вот так ты одной фразой ответил на поставленный и несколько не озвученных вопросов.

Спасибо :)
...
Рейтинг: 0 / 0
Класс не регистрируется
    #39093633
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, спешу.
С преобразованием всё решено. Но почему не регистрируется класс - по-прежнему не понятно.
...
Рейтинг: 0 / 0
Класс не регистрируется
    #39093647
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandПардон, спешу.
С преобразованием всё решено. Но почему не регистрируется класс - по-прежнему не понятно.
https://msdn.microsoft.com/en-us/library/windows/desktop/ms633586(v=vs.85).aspx

If the function fails, the return value is zero. To get extended error information, call GetLastError.
...
Рейтинг: 0 / 0
Класс не регистрируется
    #39093665
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandНо почему не регистрируется класс - по-прежнему не понятно.
GetLastError() какую ошибку выдает?
...
Рейтинг: 0 / 0
Класс не регистрируется
    #39093728
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TGetLastError
87, неверный параметр.
Посмотрел, что с параметрами не так. Оказалось, не задал
Код: plaintext
1.
	wc.cbWndExtra = 0;


Поправли, и всё заработало.

Спасибо за правильный наводящий вопрос.
...
Рейтинг: 0 / 0
Класс не регистрируется
    #39093784
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Код: plaintext
1.
2.
//пробую:
	//wc.lpszClassName = (LPCWSTR)cname;


Неправильно. Если в MSVC компилируешь, то в свойствах проекта "Charaster set" поставь "Not set".

Почему же NOT SET, ему с таким кодом ANSI нужно ставить.
...
Рейтинг: 0 / 0
Класс не регистрируется
    #39093786
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandDima TGetLastError
87, неверный параметр.
Посмотрел, что с параметрами не так. Оказалось, не задал
Код: plaintext
1.
	wc.cbWndExtra = 0;


Поправли, и всё заработало.

Спасибо за правильный наводящий вопрос.

Код: plaintext
1.
2.
WNDCLASS wcls;
memset(&wcls, 0, sizeof(WNDCLASS));
...
Рейтинг: 0 / 0
Класс не регистрируется
    #39093943
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivCharles Weylandпропущено...

87, неверный параметр.
Посмотрел, что с параметрами не так. Оказалось, не задал
Код: plaintext
1.
	wc.cbWndExtra = 0;



Поправли, и всё заработало.

Спасибо за правильный наводящий вопрос.

Код: plaintext
1.
2.
WNDCLASS wcls;
memset(&wcls, 0, sizeof(WNDCLASS));


о.. шикарно
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Класс не регистрируется
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]