powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка примера с учебника ? WinAPI
12 сообщений из 12, страница 1 из 1
Ошибка примера с учебника ? WinAPI
    #38172236
megazoid007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Братцы, переписал пример с учебника вот этого -> Юрий Щупак Win32API Эффективная разработка приложений для профессионалов, но были ошибки при компиляции, потом подправил некоторые моменты согласно этого учебника -> Хортон Visual C++ 2010 Полный курс 2011, проект стал компилироваться, однако программа идет по пути ошибки и выбивает месагу "Can not create main window" прописанную в программе, опыта пока маловато подскажите в чем может быть загвоздка ?

Код: 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.
69.
70.
71.
#include <Windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR LpCmdLine, int nCmdShow)
{
	HWND hMainWnd;
	static LPCWSTR szClassName= L"MyClass";
	MSG msg;
		WNDCLASSEX wc;
		wc.cbSize			= sizeof(wc);
		wc.style			= CS_HREDRAW | CS_VREDRAW;
		wc.lpfnWndProc		= WndProc;
		wc.cbClsExtra		= 0;
		wc.cbWndExtra		= 0;
		wc.hInstance		= hInstance;
		wc.hIcon			= LoadIcon(NULL, IDI_APPLICATION);
		wc.hCursor			= LoadCursor(NULL, IDC_ARROW);
		wc.hbrBackground	= static_cast <HBRUSH>(GetStockObject (WHITE_BRUSH));
		wc.lpszMenuName	= NULL;
		wc.lpszClassName	        = szClassName;
		wc.hIconSm		= LoadIcon(NULL, IDI_APPLICATION);

		if(!RegisterClassEx(&wc)) {
			MessageBox(NULL, L"Can not registr class",L"Error",MB_OK);
			return 0;
		}

		hMainWnd = CreateWindow (szClassName,(LPCWSTR)"A Hallo1 Application", WS_OVERLAPPEDWINDOW, 
			CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, 
			0, 0, 
			hInstance,0);
		if (!hMainWnd) {
			MessageBox(NULL, L"Can not create main window",L"Error",MB_OK);
			return 0;
		}

		ShowWindow(hMainWnd,nCmdShow);
		UpdateWindow(hMainWnd);

		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;

	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:
		DestroyWindow(hWnd);
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;

	default: DefWindowProc(hWnd, uMsg, wParam, lParam);
	}

	return 0;
} 
...
Рейтинг: 0 / 0
Ошибка примера с учебника ? WinAPI
    #38172238
megazoid007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ах да среда разработки Microsoft Visual Studio 2010 C++
...
Рейтинг: 0 / 0
Ошибка примера с учебника ? WinAPI
    #38172254
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
megazoid007в чем может быть загвоздка ?
GetLastError() тебе скажет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка примера с учебника ? WinAPI
    #38172268
megazoid007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подмутил вот эту реализацию GetLastError():

Код: 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.
void ErrorExit(LPTSTR lpszFunction) 
{ 
    // Retrieve the system error message for the last-error code

    LPVOID lpMsgBuf;
    LPVOID lpDisplayBuf;
    DWORD dw = GetLastError(); 

    FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER | 
        FORMAT_MESSAGE_FROM_SYSTEM |
        FORMAT_MESSAGE_IGNORE_INSERTS,
        NULL,
        dw,
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
        (LPTSTR) &lpMsgBuf,
        0, NULL );

    // Display the error message and exit the process

    lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, 
        (lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof(TCHAR)); 
    StringCchPrintf((LPTSTR)lpDisplayBuf, 
        LocalSize(lpDisplayBuf) / sizeof(TCHAR),
        TEXT("%s failed with error %d: %s"), 
        lpszFunction, dw, lpMsgBuf); 
    MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK); 

    LocalFree(lpMsgBuf);
    LocalFree(lpDisplayBuf);
    ExitProcess(dw); 
}


и вылезло что ошибка 0 т.е. нет ошибки )), проблема остается, но в любом случае спасибо за полезную инфу
...
Рейтинг: 0 / 0
Ошибка примера с учебника ? WinAPI
    #38172317
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
megazoid007,

книги - сжечь ( return пропущен)

Код: plaintext
1.
default: return DefWindowProc(hWnd, uMsg, wParam, lParam);
...
Рейтинг: 0 / 0
Ошибка примера с учебника ? WinAPI
    #38172647
Пётр Седов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 megazoid007:
megazoid007
Код: plaintext
1.
(LPCWSTR)"A Hallo1 Application"

Так нельзя, надо так:
Код: plaintext
1.
L"A Hallo1 Application"

"abc" -- массив из 4-ёх char (8-битный на большинстве платформ)
L"abc" -- массив из 4-ёх w char_t (16-битный в Windows, используется для строк в кодировке UTF-16)
...
Рейтинг: 0 / 0
Ошибка примера с учебника ? WinAPI
    #38172740
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
megazoid007,

UNICODE определен?
...
Рейтинг: 0 / 0
Ошибка примера с учебника ? WinAPI
    #38172741
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут у тебя путаются юникод и ANSI. Так нельзя.

CreateWindow (szClassName,(LPCWSTR)"A Hallo1 Application",

Ты скорее всего регистрируешь класс с одним именем, а окно создашь с классом другого имени. Это все из за неправильного использования широких строк.
...
Рейтинг: 0 / 0
Ошибка примера с учебника ? WinAPI
    #38172749
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

там проблема с Window функцией, которая всегда возвращает 0, в том числе и на WM_NCCREATE
кривоватая строковая константа не мешает- просто первое что в глаза бросается.

Не поленись, скомпили и запусти, а потом поправь- default: return DefWindowProc(hWnd, uMsg, wParam, lParam);
...
Рейтинг: 0 / 0
Ошибка примера с учебника ? WinAPI
    #38172875
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

Ттк пациент же говорит, что у него Create Window не отрабатывает...
...
Рейтинг: 0 / 0
Ошибка примера с учебника ? WinAPI
    #38172913
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

отрабатывает
и оконная функция вызывается в процессе создания окна. И сообщение WM_NCCREATE до неё доходит(в рамках вызова CreateWindow)

а дальше происходит следующее - MSDNIf an application processes this message, it should return TRUE to continue creation of the window. If the application returns FALSE, the CreateWindow or CreateWindowEx function will return a NULL handle. http://msdn.microsoft.com/ru-RU/library/windows/desktop/ms632635(v=vs.85).aspx

и ошибки никакой нет - окно отказалось создаваться в полном сознании.
...
Рейтинг: 0 / 0
Ошибка примера с учебника ? WinAPI
    #38172955
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

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


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