//---------------------------------------------------------------------------------------
// WindowsBazis.CPP
// Данное приложенние создает простейшее окно
//---------------------------------------------------------------------------------------
#include <windows.h> // Подключаем заголовочный файл Windows
#include "resource.h"
//----------------------------------------------------------------------------------------
// Функция
// MainWinProc()
// Здесь происходит обработка сообщенний
//----------------------------------------------------------------------------------------
LRESULT CALLBACK MainWinProc(HWND hwnd, //Дескриптор окна
UINT msg, //идентефикатор сообщение
WPARAM wparam, //Дополнительная информация
LPARAM lparam) //Дополнительная информация
{
switch(msg)
{
case WM_PAINT:
break;
case WM_DESTROY:
{
PostQuitMessage(0);
return(0);
} break;
}
return (DefWindowProc(hwnd, msg, wparam, lparam));
}
//---------------------------------------------------------------------------------------
// Функция
// WinMain()
// Входная точка приложения
//---------------------------------------------------------------------------------------
int WINAPI WinMain( HINSTANCE hinstance,
HINSTANCE hprevinstance,
LPSTR lpcmdline,
int ncmdshow)
{
WNDCLASSEX windowsclass; // Создем класс
HWND hwnd; // Создаем дескриптор окна
MSG msg; // Сообщение
// Определим класс окна WNDCLASSEX
windowsclass.cbSize = sizeof(WNDCLASSEX);
windowsclass.style = CS_DBLCLKS | CS_OWNDC |
CS_HREDRAW | CS_VREDRAW;
windowsclass.lpfnWndProc = MainWinProc;
windowsclass.cbClsExtra = 0;
windowsclass.cbWndExtra = 0;
windowsclass.hInstance = hinstance;
windowsclass.hIcon = LoadIcon(hinstance, IDI_ICON1);
windowsclass.hCursor = LoadCursor(NULL, IDC_ARROW);
windowsclass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
windowsclass.lpszMenuName = NULL;
windowsclass.lpszClassName = "WINDOWSCLASS";
windowsclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
// Зарегестрируем класс
if (!RegisterClassEx(&windowsclass))
return(0);
// Теперь когда класс зарегестрирован можно создать окно
if (!(hwnd = CreateWindowEx(NULL, // стиль окна
"WINDOWSCLASS", // класс
"Урок 1. Базовое Окно для DirectX ", // название окна
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
300,150, // левый верхний угол
500,400, // ширина и высота
NULL, // дескриптор родительского окна
NULL, // дескриптор меню
hinstance, // дескриптор экземпляра проложенния
NULL))) // указатель на данные созданного окна
return(0);
ShowWindow( hwnd, SW_SHOWDEFAULT ); //Нарисуем окно
UpdateWindow( hwnd ); //Обновим окно
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return(msg.wParam);
}
Простое оконное приложение
Вот код собсно
Код:
Вот что выдает:
Код:
Linking...
WindowsBase.obj : error LNK2001: unresolved external symbol __imp__DefWindowProcA@16
WindowsBase.obj : error LNK2001: unresolved external symbol __imp__PostQuitMessage@4
WindowsBase.obj : error LNK2001: unresolved external symbol __imp__DispatchMessageA@4
WindowsBase.obj : error LNK2001: unresolved external symbol __imp__TranslateMessage@4
WindowsBase.obj : error LNK2001: unresolved external symbol __imp__GetMessageA@16
WindowsBase.obj : error LNK2001: unresolved external symbol __imp__UpdateWindow@4
WindowsBase.obj : error LNK2001: unresolved external symbol __imp__ShowWindow@8
WindowsBase.obj : error LNK2001: unresolved external symbol __imp__CreateWindowExA@48
WindowsBase.obj : error LNK2001: unresolved external symbol __imp__RegisterClassExA@4
WindowsBase.obj : error LNK2001: unresolved external symbol __imp__GetStockObject@4
WindowsBase.obj : error LNK2001: unresolved external symbol __imp__LoadCursorA@8
WindowsBase.obj : error LNK2001: unresolved external symbol __imp__LoadIconA@8
Debug/Urok1.exe : fatal error LNK1120: 12 unresolved externals
Error executing link.exe.
Urok1.exe - 13 error(s), 0 warning(s)
WindowsBase.obj : error LNK2001: unresolved external symbol __imp__DefWindowProcA@16
WindowsBase.obj : error LNK2001: unresolved external symbol __imp__PostQuitMessage@4
WindowsBase.obj : error LNK2001: unresolved external symbol __imp__DispatchMessageA@4
WindowsBase.obj : error LNK2001: unresolved external symbol __imp__TranslateMessage@4
WindowsBase.obj : error LNK2001: unresolved external symbol __imp__GetMessageA@16
WindowsBase.obj : error LNK2001: unresolved external symbol __imp__UpdateWindow@4
WindowsBase.obj : error LNK2001: unresolved external symbol __imp__ShowWindow@8
WindowsBase.obj : error LNK2001: unresolved external symbol __imp__CreateWindowExA@48
WindowsBase.obj : error LNK2001: unresolved external symbol __imp__RegisterClassExA@4
WindowsBase.obj : error LNK2001: unresolved external symbol __imp__GetStockObject@4
WindowsBase.obj : error LNK2001: unresolved external symbol __imp__LoadCursorA@8
WindowsBase.obj : error LNK2001: unresolved external symbol __imp__LoadIconA@8
Debug/Urok1.exe : fatal error LNK1120: 12 unresolved externals
Error executing link.exe.
Urok1.exe - 13 error(s), 0 warning(s)
Дальше я создал проэкт, только уже не пустой, а простое приложение, с таким самым кодом.
Код:
// Uroc01.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
//----------------------------------------------------------------------------------------
// Ôóíêöèÿ
// MainWinProc()
// Çäåñü ïðîèñõîäèò îáðàáîòêà ñîîáùåííèé
//----------------------------------------------------------------------------------------
LRESULT CALLBACK MainWinProc(HWND hwnd, //Äåñêðèïòîð îêíà
UINT msg, //èäåíòåôèêàòîð ñîîáùåíèå
WPARAM wparam, //Äîïîëíèòåëüíàÿ èíôîðìàöèÿ
LPARAM lparam) //Äîïîëíèòåëüíàÿ èíôîðìàöèÿ
{
switch(msg)
{
case WM_PAINT:
break;
case WM_DESTROY:
{
PostQuitMessage(0);
return(0);
} break;
}
return DefWindowProc(hwnd, msg, wparam, lparam);
}
//---------------------------------------------------------------------------------------
// Ôóíêöèÿ
// WinMain()
// Âõîäíàÿ òî÷êà ïðèëîæåíèÿ
//---------------------------------------------------------------------------------------
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
WNDCLASSEX windowsclass; // Ñîçäåì êëàññ
HWND hwnd; // Ñîçäàåì äåñêðèïòîð îêíà
MSG msg; // Ñîîáùåíèå
// Îïðåäåëèì êëàññ îêíà WNDCLASSEX
windowsclass.cbSize = sizeof(WNDCLASSEX);
windowsclass.style = CS_DBLCLKS | CS_OWNDC |
CS_HREDRAW | CS_VREDRAW;
windowsclass.lpfnWndProc = MainWinProc;
windowsclass.cbClsExtra = 0;
windowsclass.cbWndExtra = 0;
windowsclass.hInstance = hInstance;
windowsclass.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
windowsclass.hCursor = LoadCursor(NULL, IDC_ARROW);
windowsclass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
windowsclass.lpszMenuName = NULL;
windowsclass.lpszClassName = "WINDOWSCLASS";
windowsclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
// Ðåãèñòðèðóåì êëàññ
if (!RegisterClassEx(&windowsclass))
return 0;
// Ñîçäàåì îêíî
if (!(hwnd = CreateWindowEx(NULL, // ñòèëü îêíà
"WINDOWSCLASS", // êëàññ
"Óðîê 1. Áàçîâîå Îêíî äëÿ DirectX ", // íàçâàíèå îêíà
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
300,150, // ëåâûé âåðõíèé óãîë
500,400, // øèðèíà è âûñîòà
NULL, // äåñêðèïòîð ðîäèòåëüñêîãî îêíà
NULL, // äåñêðèïòîð ìåíþ
hInstance, // äåñêðèïòîð ýêçåìïëÿðà ïðîëîæåííèÿ
NULL))) // óêàçàòåëü íà äàííûå ñîçäàííîãî îêíà
return 0;
ShowWindow(hwnd, SW_SHOWDEFAULT); //Íàðèñóåì îêíî
UpdateWindow(hwnd); //Îáíîâèì îêíî
while(GetMessage(&msg, NULL, 0, 0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return(msg.wParam);
}
//
#include "stdafx.h"
//----------------------------------------------------------------------------------------
// Ôóíêöèÿ
// MainWinProc()
// Çäåñü ïðîèñõîäèò îáðàáîòêà ñîîáùåííèé
//----------------------------------------------------------------------------------------
LRESULT CALLBACK MainWinProc(HWND hwnd, //Äåñêðèïòîð îêíà
UINT msg, //èäåíòåôèêàòîð ñîîáùåíèå
WPARAM wparam, //Äîïîëíèòåëüíàÿ èíôîðìàöèÿ
LPARAM lparam) //Äîïîëíèòåëüíàÿ èíôîðìàöèÿ
{
switch(msg)
{
case WM_PAINT:
break;
case WM_DESTROY:
{
PostQuitMessage(0);
return(0);
} break;
}
return DefWindowProc(hwnd, msg, wparam, lparam);
}
//---------------------------------------------------------------------------------------
// Ôóíêöèÿ
// WinMain()
// Âõîäíàÿ òî÷êà ïðèëîæåíèÿ
//---------------------------------------------------------------------------------------
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
WNDCLASSEX windowsclass; // Ñîçäåì êëàññ
HWND hwnd; // Ñîçäàåì äåñêðèïòîð îêíà
MSG msg; // Ñîîáùåíèå
// Îïðåäåëèì êëàññ îêíà WNDCLASSEX
windowsclass.cbSize = sizeof(WNDCLASSEX);
windowsclass.style = CS_DBLCLKS | CS_OWNDC |
CS_HREDRAW | CS_VREDRAW;
windowsclass.lpfnWndProc = MainWinProc;
windowsclass.cbClsExtra = 0;
windowsclass.cbWndExtra = 0;
windowsclass.hInstance = hInstance;
windowsclass.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
windowsclass.hCursor = LoadCursor(NULL, IDC_ARROW);
windowsclass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
windowsclass.lpszMenuName = NULL;
windowsclass.lpszClassName = "WINDOWSCLASS";
windowsclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
// Ðåãèñòðèðóåì êëàññ
if (!RegisterClassEx(&windowsclass))
return 0;
// Ñîçäàåì îêíî
if (!(hwnd = CreateWindowEx(NULL, // ñòèëü îêíà
"WINDOWSCLASS", // êëàññ
"Óðîê 1. Áàçîâîå Îêíî äëÿ DirectX ", // íàçâàíèå îêíà
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
300,150, // ëåâûé âåðõíèé óãîë
500,400, // øèðèíà è âûñîòà
NULL, // äåñêðèïòîð ðîäèòåëüñêîãî îêíà
NULL, // äåñêðèïòîð ìåíþ
hInstance, // äåñêðèïòîð ýêçåìïëÿðà ïðîëîæåííèÿ
NULL))) // óêàçàòåëü íà äàííûå ñîçäàííîãî îêíà
return 0;
ShowWindow(hwnd, SW_SHOWDEFAULT); //Íàðèñóåì îêíî
UpdateWindow(hwnd); //Îáíîâèì îêíî
while(GetMessage(&msg, NULL, 0, 0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return(msg.wParam);
}
с таким содержанием
Код:
// stdafx.cpp : source file that includes just the standard includes
// Uroc01.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"
// Uroc01.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"
Код:
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#if !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)
#define AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h>
// TODO: reference additional headers your program requires here
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)
// or project specific include files that are used frequently, but
// are changed infrequently
//
#if !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)
#define AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h>
// TODO: reference additional headers your program requires here
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)
Все компилица и работае, хотя подключается тоже самое что подключал я в пустом проекте. Что я сделал не так и где? :confused:
Project->Settings->Link object/library modules: user32.lib gdi32.lib
если подобная ошибка вылазиет значит про какие-то либы забыл. в данном примере вроде этих двух достаточно.