Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2010, 19:17   #1
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию Ошибка в елементарном коде

здраствуйте я только начал учить WinAPI нашел какую-то книжку и переписал сам пример, но он почему-то не хочет компилироваться видимых ошибок я не нашел если можно покажите где ошибка.
PHP код:
#include <windows.h>
// Оголошення функцій
bool RegClass(WNDPROCLPCTSTRUINT);
LRESULT CALLBACK WndProc(HWNDUINTWPARAMLPARAM);
// Оголошення глобальних змінних
HINSTANCE hInst;
char szClassName[]="WndCLass";
//Оголошення головної функції
int WINAPI   WinWain(HINSTANCE hInstance,
                     
HINSTANCE hPrevInstance,
                     
LPSTR LpzCmdLine,
                     
int nCmdShow)
 {
    
MSG msg;
    
HWND hwnd;
    
hInst hInstance;
    if (!
RegClass(WndProcszClassNameCOLOR_WINDOW)) return false;
    
hwnd CreateWindow(szClassName,"Play Hard - Go PRO",
                        
WS_OVERLAPPEDWINDOW WS_VISIBLE,
                        
CW_USEDEFAULTCW_USEDEFAULT,
                        
CW_USEDEFAULTCW_USEDEFAULT,
                        
0,0,hInstance,NULL);
    if (!
hwnd) return false;
    while (
GetMessage(&msg,0,0,0)) DispatchMessage(&msg);
    return 
msg.wParam;
 }
// Оголошення функції регістрації класу
bool RegClass(WNDPROC ProcLPCTSTR szNameUINT brBackgroung)
 {
     
WNDCLASS wc;
     
wc.style wc.cbClsExtra wc.cbWndExtra 0;
     
wc.lpfnWndProc Proc;
     
wc.hInstance hInst;
     
wc.hIcon LoadIcon(NULLIDI_APPLICATION);
     
wc.hCursor LoadCursor(NULLIDC_ARROW);
     
wc.hbrBackground = (HBRUSHCOLOR_BACKGROUND;
     
wc.lpszMenuName NULL;
     
wc.lpszClassName szClassName;
     return (
RegisterClass(&wc)!=0);
 }
LRESULT CALLBACK WndProc(HWND hwndUINT msgWPARAM wParamLPARAM lParam)
 {
        switch (
msg)
          {
               case 
WM_DESTROY:
                     {
                               
PostQuitMessage(0);
                               return 
0;
                     }
          }
        return 
DefWindowProc(hwndmsgwParamlParam);
 } 
Пишет
Код:
  [Linker error] undefined reference to `WinMain@16' 
   ld returned 1 exit status
rUs_LAN вне форума Ответить с цитированием
Старый 07.03.2010, 19:34   #2
JeyKip
Форумчанин
 
Регистрация: 18.09.2009
Сообщений: 133
По умолчанию

У тебя код как-то странно написан..)) Вот попробуй этот, откоментирован он на отлично...)) и читай книгу Румянцев "Азбука WIN API", это то, что нужно...)) я сам только начал, поэтому знаю, что советую..))


Код:
#include<windows.h>
// прототип оконной функции
LRESULT CALLBACK DepartComTechWndProc(HWND,UINT,UINT,LONG);
// описание функции WinMain - точки входа в программу
int WINAPI WinMain(HINSTANCE hInstance, 
HINSTANCE hPrevInstance,
				LPSTR lpszCmdParam, int nCmdShow)
{
// структура с характеристиками создаваемого класса
WNDCLASS WndClass; 

HWND hWnd; // дескриптор создаваемого окна

MSG Msg; // структура, описывающая сообщение

// инициализация имени класса как строки
wchar_t szClassName[]=L"DepartComTech";

// заполнение структуры типа WNDCLASS

WndClass.style=CS_HREDRAW|CS_VREDRAW;
WndClass.lpfnWndProc=DepartComTechWndProc;
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,L"Cannot register class",L"Error",MB_OK);
	return 0;
}

// создание окна зарегистрированного класса

hWnd=CreateWindow(szClassName,L"First Example",
				WS_OVERLAPPEDWINDOW, 
				CW_USEDEFAULT,CW_USEDEFAULT,
				CW_USEDEFAULT,CW_USEDEFAULT,
				NULL,NULL,
				hInstance,NULL);

// выдача сообщения в случае невозможности создания окна

if(!hWnd)

{
	MessageBox(NULL,L"Cannot create window",L"Error",MB_OK);
	return 0;
}

// отображение окна на экране

ShowWindow(hWnd,nCmdShow);

// посылка оконной функции сообщения WM_PAINT с требованием
// перерисовать рабочую область окна

UpdateWindow(hWnd);

// цикл обработки сообщений
// выбор сообщений из очереди функцией GetMessage

while(GetMessage(&Msg,NULL,0,0))
{
// преобразование сообщения к одному стилю обработки

	TranslateMessage(&Msg);

// передача сообщения в оконную функцию

	DispatchMessage(&Msg);
}

// возврат дополнительной информации о сообщении

return Msg.wParam;

}

LRESULT CALLBACK DepartComTechWndProc(HWND hWnd,UINT Message, UINT wParam,LONG lParam)

{
// дескриптор контекста устройства
HDC hDC;
// характеристики области рисования
PAINTSTRUCT PaintStruct;
// определение области рисования
RECT Rect;
// выбор нужной последовательности обработки для
// конкретного сообщения
switch(Message)
{
case WM_PAINT:
// обработка сообщения о перерисовке рабочей зоны окна
// получение дескриптора устройства
	hDC=BeginPaint(hWnd,&PaintStruct);
// определение клиентской области для рисования,
// в структуре Rect первые две координаты равны 0, а -
// третья и четвертая - значения ширины и высоты окна
	GetClientRect(hWnd,&Rect);
// вывод строки в зону, определенную флажками
	DrawText(hDC,L"Department of Computer Technology",-1,&Rect,
		DT_SINGLELINE|DT_CENTER|DT_VCENTER);
// завершение перерисовки
	EndPaint(hWnd,&PaintStruct);
	return 0;
// начало операции уничтожения окна
// сообщение WM_DESTROY появляется в очереди сообщений при
// закрытии окна
case WM_DESTROY:
// функция PostQuitMessage посылает окну (данным об окне в 
// системе) сообщение WM_QUIT, которое вызывает прекращение
// цикла обработки
	PostQuitMessage(0);
	return 0;
}

// обработка всех остальных сообщений (по умолчанию)
return DefWindowProc(hWnd,Message,wParam,lParam);

}
JeyKip вне форума Ответить с цитированием
Старый 07.03.2010, 19:37   #3
JeyKip
Форумчанин
 
Регистрация: 18.09.2009
Сообщений: 133
По умолчанию

у тебя в коде сначала создается экземпляр окна, потом его регистрируют, а потом только создается класс окна, на основе которого прописываются экземпляры!!! Это просто ужас!!! Не пользуйся больше этим учебником!!!
JeyKip вне форума Ответить с цитированием
Старый 07.03.2010, 20:34   #4
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от rUs_LAN Посмотреть сообщение
он почему-то не хочет компилироваться
Он компилируется без ошибок.

Цитата:
Сообщение от rUs_LAN
Код:
  [Linker error] undefined reference to `WinMain@16' 
   ld returned 1 exit status
Там, просто, опечатка. Вместо WinMain набито WinWain. А так - болванка, как болванка... Разве что, в цикле обработки сообщений нету TranslateMessage(), но это заметите только, если, используя это как основу для более сложной программы, захотите работать с клавиатурой...

Ну и "регистрация" по-украински, по-моему, всё-таки, - "реєстрація"...
Vago вне форума Ответить с цитированием
Старый 07.03.2010, 22:00   #5
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию СПАСИБО

спасибо а на счет регистрации там все комменты на украинском просто я в реале на украинском говорю но здесь только русский ((И вообще я считаю что нужно добавить украинский язык как разрешенный на форуме. Будет меньше фраз типа учи русский.
-----------
А не так понял с первого раза. Спс буду знать

Последний раз редактировалось rUs_LAN; 07.03.2010 в 22:14.
rUs_LAN вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка в коде? Darkdog Microsoft Office Excel 12 27.02.2010 06:47
Ошибка в коде konstantinopol Общие вопросы по Java, Java SE, Kotlin 1 26.10.2009 23:21
Ошибка в коде. СИ Ver0nica Помощь студентам 2 02.10.2009 19:36
Ошибка в коде Bigtyoma Общие вопросы Delphi 9 10.06.2009 16:35
Ошибка в коде hacknet Компоненты Delphi 12 07.12.2008 14:23