Помогите найти ошибку в коде на С++
21 повідомлення
#16 років тому
Вот в книге вычитал, как создать простое окно типа Windows Aplication, но он не работает. Помогите найти ошибку....// Стандартный включаемый файл Windows
#include <windows.h>
// Прототип функции обратного вызова для обработки сообщений
LRESULT CALLBACK fnMessageProcessor (HWND, UINT, WPARAM, LPARAM);
// Функция вызывается автоматически, когда программа запускается
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine,
int iCmdShow)
{
HWND hWnd;
MSG msg;
WNDCLASSEX wndclass;
// Настройка класса окна
wndclass.cbSize = sizeof(WNDCLASSEX);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = fnMessageProcessor;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = "Window Class"; // Имя класса
wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
// Регистрация класса окна
if(RegisterClassEx(&wndclass) == 0)
{
// Сбой программы, выход
exit(1);
}
// Создание окна
hWnd = CreateWindowEx(
WS_EX_OVERLAPPEDWINDOW,
"Window Class", // Имя класса
"Create Window Example", // Текст заголовка
WS_OVERLAPPEDWINDOW,
0,
0,
320,
200,
NULL,
NULL,
hInstance,
NULL);
// Отображение окна
ShowWindow(hWnd, iCmdShow);
// Обработка сообщений, пока программа не будет прервана
while(GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (msg.wParam);
}
// Функция обратного вызова для обработки сообщений
// (НЕОБХОДИМА ВСЕМ ПРОГРАММАМ ДЛЯ WINDOWS)
LRESULT CALLBACK fnMessageProcessor (HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
switch(iMsg)
{
// Вызывается, когда впервые создается окно
case WM_CREATE:
return(0);
// Вызывается, когда окно обновляется
case WM_PAINT:
return(0);
// Вызывается, когда пользователь закрывает окно
case WM_DESTROY:
PostQuitMessage(0);
return(0);
default:
return DefWindowProc(hWnd, iMsg, wParam, lParam);
}
}
21 повідомлення
#16 років тому
Вот что пишет мне компилятор ------ Build started: Project: new, Configuration: Debug Win32 ------
Compiling...
CreateWindow.cpp
c:\documents and settings\андрей\мои документы\visual studio 2008\projects\new\new\createwindow.cpp(12) : error C2440: '=' : cannot convert from 'const char ' to 'LPCWSTR'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
c:\documents and settings\андрей\мои документы\visual studio 2008\projects\new\new\createwindow.cpp(14) : error C2664: 'CreateWindowExW' : cannot convert parameter 2 from 'const char ' to 'LPCWSTR'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Build log was saved at "file://c:\Documents and Settings\Андрей\Мои документы\Visual Studio 2008\Projects\new\new\Debug\BuildLog.htm"
new - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
51 повідомлення
#16 років тому
Поставьте перед кавычками букву "L" либо в настройках измените UNICODE на ASCII в закладке General
21 повідомлення
#16 років тому
Не могли бы вы конкретнее объяснить как на эту вкладку попасть?
51 повідомлення
#16 років тому
Конечно: Меню Project-><имя проекта> Properties -> в появившемся окошке слева выбираете Configuration Properties, а там General/в таблице справа заметите слова Character set и рядом use UNICODE character set - из списка выберите пункт Not Set
21 повідомлення
#16 років тому
Ну спасибо вам!!!! Я прямо таки и не знал чтобы без вас делать. Еще раз ОГРОМНОЕ СПАСИБО!
13 повідомлень
#16 років тому
А, если Вам влом залезать в меню и менять параметры компилера опционально, то можете просто привести к типу LPCWSTR переменную, типа const char*. 