Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка примера с учебника ? WinAPI / 12 сообщений из 12, страница 1 из 1
03.03.2013, 00:32
    #38172236
megazoid007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка примера с учебника ? WinAPI
Братцы, переписал пример с учебника вот этого -> Юрий Щупак 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
03.03.2013, 00:36
    #38172238
megazoid007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка примера с учебника ? WinAPI
ах да среда разработки Microsoft Visual Studio 2010 C++
...
Рейтинг: 0 / 0
03.03.2013, 01:08
    #38172254
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка примера с учебника ? WinAPI
megazoid007в чем может быть загвоздка ?
GetLastError() тебе скажет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
03.03.2013, 02:12
    #38172268
megazoid007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка примера с учебника ? WinAPI
Подмутил вот эту реализацию 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
03.03.2013, 10:36
    #38172317
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка примера с учебника ? WinAPI
megazoid007,

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

Код: plaintext
1.
default: return DefWindowProc(hWnd, uMsg, wParam, lParam);
...
Рейтинг: 0 / 0
03.03.2013, 20:08
    #38172647
Пётр Седов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка примера с учебника ? WinAPI
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
03.03.2013, 23:04
    #38172740
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка примера с учебника ? WinAPI
megazoid007,

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

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

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

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

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

Ттк пациент же говорит, что у него Create Window не отрабатывает...
...
Рейтинг: 0 / 0
04.03.2013, 09:37
    #38172913
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка примера с учебника ? WinAPI
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
04.03.2013, 10:10
    #38172955
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка примера с учебника ? WinAPI
Изопропил,

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


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