win api, хелп!

Модератор: Злобный

Ответить
Аватара пользователя
rageX
Старожил
Сообщения: 1076
Зарегистрирован: Пт май 06, 2005 18:10

win api, хелп!

Сообщение rageX »

блин ,глупо как-то ,непойму в чем дело ,но вот такая у меня проблема:
Разбираиу щас програмку Хулоу Ворлд ,вот код
#include <windows.h>

LRESULT CALLBACK HelloWorldWndProc (HWND, UINT, UINT, LONG);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdParam, int nCmdShow)
{
HWND hWnd;
WNDCLASS WndClass;
MSG Msg;
char szClassName[] = "Hello World";

WndClass.style = CS_HREDRAW | CS_VREDRAW;
WndClass.lpfnWndProc = HelloWorldWndProc;
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 = szClassName;


if (!RegisterClass(&WndClass))
{
MessageBox (NULL, "cannot register class", "error", MB_OK);
return 0;
}

hWnd = CreateWindow (szClassName, "program No 1",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL,
hInstance, NULL);
if (!hWnd)
{
MessageBox (NULL, "cannot create window", "error", MB_OK);
return 0;
}

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

while (GetMessage (&Msg, NULL, 0, 0))
{
TranslateMessage (&Msg);
DispatchMessage (&Msg);
}
return Msg.wParam;
}

LRESULT CALLBACK HelloWorldWndProc (HWND hWnd, UINT Message,
UINT wParam, long lParam)
{
HDC hDC;
PAINTSTRUCT PaintStruct;
RECT Rect;
switch (Message)
{
case WM_PAINT:
hDC = BeginPaint (hWnd, &PaintStruct);
GetClientRect (hWnd, &Rect);
DrawText (hDC, "HelloWorld!", -1, &Rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint (hWnd, &PaintStruct);
return 0;
}
return DefWindowProc (hWnd, Message, wParam, lParam);
}

Компилятор у меня Microsoft Visual Studio. Вобщем решил поэксперементировать вот с етой строкой
WndClass.hCursor = LoadCursor (NULL, IDC_ARROW);
,поменял значение IDC_ARROW ,на IDC_CROSS ,ну вобщем откомпилировал ,ошибок нет !!! запускаиу программу ,а компилятор мне выдает вот такое сообщение:
--------------------Configuration: HelloWinWorld - Win32 Debug--------------------
Linking...
LINK : fatal error LNK1168: cannot open Debug/HelloWinWorld.exe for writing
Error executing link.exe.

HelloWinWorld.exe - 1 error(s), 0 warning(s)
.
Сначала подумал ,что значение неправельное записал ,записал обратно IDC_ARROW , откомплировал ,ошибок нет .Как тока решил перепроверить прогу ,мне выдается такое же сообщение :cranky: .ОТ ЧЕГО ЕТОТ ДРЭК???????????????????????????????????????????????????????????????????????????????????????????????????


еще пара гениальных вопросов:
1) что означает NULL ??? ето типо нулевое значение ???
2)
HWND hWnd;
WNDCLASS WndClass;
MSG Msg;

Зачем писать сначала заглавными буквами ,а потом строчными ???

сэнкс :)
Аватара пользователя
CnbS
Старожил
Сообщения: 1650
Зарегистрирован: Пн авг 19, 2002 19:14
Контактная информация:

Сообщение CnbS »

[off]ниху*себе хеллоуворлд..[/off]
Аватара пользователя
vivk
Продвинутый
Сообщения: 820
Зарегистрирован: Пн авг 08, 2005 12:14
Контактная информация:

Сообщение vivk »

rageX писал(а):
еще пара гениальных вопросов:
1) что означает NULL ??? ето типо нулевое значение ???
2)
HWND hWnd;
WNDCLASS WndClass;
MSG Msg;

Зачем писать сначала заглавными буквами ,а потом строчными ???

сэнкс :)
Прочти книжку, если ты не знаешь ответов на эти вопросы то дальше тебе путь закрыт.

ЗЫ Си в отличии от паскаля язык регистро зависимый WNDCLASS и WndClass не одно и тоже.
Аватара пользователя
jsmax
Продвинутый
Сообщения: 488
Зарегистрирован: Пн мар 08, 2004 02:27
Откуда: Chisinau
Контактная информация:

Сообщение jsmax »

rageX, а ты в список виндозных процессов смотрел ?? У тебя походу процесс запускается а окно остаётся невидимым. Потому и выдаёт тебе ошибку при линковке (не может записать экзэшник потомучто он выполняется).

Вместо
ShowWindow (hWnd, nCmdShow);
попробуй:
ShowWindow (hWnd, SW_SHOW);
или при создании окна добавь ещё свойство WS_VISIBLE, например:
hWnd = CreateWindow (szClassName, "program No 1",
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL,
hInstance, NULL);
P.S. Ты не разбирай примеры, а учи синтаксис языка ... (пока-что) ..

vivk, всё правильно, WNDCLASS это тип, а WndClass это переменная ...
Аватара пользователя
rageX
Старожил
Сообщения: 1076
Зарегистрирован: Пт май 06, 2005 18:10

Сообщение rageX »

jsmax,
сэнкс мэн , так оно и есть ,она у меня в процессах запущена ,не умирает прога ,когда на крестик жму :roll: ,воспользуиусь твоими советами :)
vivk,
так я книжку и читаиу ,"Румянцева" ,ето типа для начинаиущих :laugh: ,я чуть в обморок не упал когда после доса спрыгнул на винду. У меня есть базовые знания синтаксиса C++ ,но я так посмотрел и мне показалось ,что под Винду и Дос програмить ,ето довольно таки большая разница (я в смысле синтакс.) :ermm: .
Ну автор ,вобщем большуиу часть программы обьяснил доступным языком ,но вот ети мелочи он не трогал ,т.к. ращитывает ,что читаиущий их знает.

А где именно етот синтаксис отыскать ???
А вот еще вопрос: есть у меня MSDN еще, ну я его как-то открыл ,думал много полезной документации найти ,и ничего не нашел :spy: .Незнаиу, может я там заблудился ,т.к. матерьяла там много ,там есть документация по синтаксису ???

Збазибо за Поможь :)
dmn
Юзер
Сообщения: 177
Зарегистрирован: Вт мар 01, 2005 22:25

Сообщение dmn »

rageX писал(а): ... У меня есть базовые знания синтаксиса C++ ,но я так посмотрел и мне показалось ,что под Винду и Дос програмить ,ето довольно таки большая разница (я в смысле синтакс.) ...
Да уж. Синтаксис С++ под ДОС и Уиндоус совсем разные а главное различие в том что в С++ под ДОС прогу пишут с право на лево а в С++ под Уиндоус прогу пишут с лево на право.
rageX писал(а): ... А вот еще вопрос: есть у меня MSDN еще, ну я его как-то открыл ,думал много полезной документации найти ,и ничего не нашел ...
Ну ты наверно погарячился. В MSDN очень много полезной информации. Например я там нашёл секретный код для своего мобильника и теперь я пользуюсь пакетом "LIBERTY" от Voxtel совсем бесплатно а моя жена из MSDN еженедельно качает програму ОРТ.
Аватара пользователя
CnbS
Старожил
Сообщения: 1650
Зарегистрирован: Пн авг 19, 2002 19:14
Контактная информация:

Сообщение CnbS »

dmn,
[off]имхо, можно было и промолчать.[/off]
dmn
Юзер
Сообщения: 177
Зарегистрирован: Вт мар 01, 2005 22:25

Сообщение dmn »

CnbS,
[off]Помолчать можно. Я подумал что мой пост натолкнёт его на мысль что перед тем как обсуждать какието вопросы публично стоит предварительно изучить предмет дискусии чтобы не шокировать окружающих.[/off]
Аватара пользователя
CnbS
Старожил
Сообщения: 1650
Зарегистрирован: Пн авг 19, 2002 19:14
Контактная информация:

Сообщение CnbS »

dmn,
[off]тут я согласен, но можно ведь в другой форме это сделать..[/off]
Ответить

Вернуться в «Программирование»