Вторник, 05 Ноября 2024, 17:37

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Инициализация DirectDraw в C++
Stas96Дата: Четверг, 12 Ноября 2009, 23:27 | Сообщение # 1
Programmer and Game Designer
Сейчас нет на сайте
Ув.Программисты помогите пожайлусто. Изучаю книгу "Фленов - DirectX и C++ Искусство программирования" book
Перешел к главе Инициализацию DirectDraw happy вот код: deal
ddfunc.h
Code

#define _DDFUNC_H_
#include "ddraw.h"
//Функция инициализации Direc3D
// Функция инициализации Direct3D
HRESULT DXDDInit(IDirectDraw7 **ppiDD,     
                    IDirectDrawSurface7 **primsurf,
                    IDirectDrawSurface7 **backsurf,
                    HWND hWnd,     
                    DWORD iWidth,
                    DWORD iHeight,
                    WORD iColors,
                    BOOL *bFullScreen
                    );
BOOL ClearSurface(LPDIRECTDRAWSURFACE7 surf, int iColor);
IDirectDrawSurface7 *LoadBMPToSurface(LPCTSTR filename, IDirectDraw7 *ppiDD);
IDirectDrawSurface7 *LoadBMPToSurface(IDirectDrawSurface7 **ddsurf, LPCTSTR filename,
            IDirectDraw7 *ppiDD);
IDirectDrawSurface7 *LoadBMPToSurfaceFast(LPCTSTR filename, IDirectDraw7 *ppiDD);
IDirectDrawSurface7 *LoadBMPToSurfaceFast(IDirectDrawSurface7 **ddsurf, LPCTSTR filename,     
            IDirectDraw7 *ppiDD);
void DrawLine(IDirectDrawSurface7* surf, WORD X1, WORD Y1,     
                  WORD X2, WORD Y2, BYTE r, BYTE g, BYTE b);
void Circle(IDirectDrawSurface7* surf, WORD X, WORD Y,     
                  WORD R, WORD lines, BYTE r, BYTE g, BYTE b);
#endif


ddfunc.срр

Code


// InitDraw.cpp: определяет точку входа для приложения.
//
#include "stdafx.h"
#include "InitDraw.h"
#define MAX_LOADSTRING 100
// Глобальные переменные:
HINSTANCE hInst;                    // текущий экземпляр
TCHAR szTitle[MAX_LOADSTRING];                    // Текст строки заголовка
TCHAR szWindowClass[MAX_LOADSTRING];            // имя класса главного окна
// Отправить объявления функций, включенных в этот модуль кода:
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
int APIENTRY _tWinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPTSTR    lpCmdLine,
                         int       nCmdShow)
{
        UNREFERENCED_PARAMETER( hPr evI nstance);
        UNREFERENCED_PARAMETER(lpCmdLine);
        // TODO: разместите код здесь.
        MSG msg;
        HACCEL hAccelTable;
        // Инициализация глобальных строк
        LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
        LoadString(hInstance, IDC_INITDRAW, szWindowClass, MAX_LOADSTRING);
        MyRegisterClass(hInstance);
        // Выполнить инициализацию приложения:
        if (!InitInstance (hInstance, nCmdShow))
        {
            return FALSE;
        }
        hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_INITDRAW));
        // Цикл основного сообщения:
        while (GetMessage(&msg, NULL, 0, 0))
        {
            if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }
        return (int) msg.wParam;
}
//
//  ФУНКЦИЯ: MyRegisterClass()
//
//  НАЗНАЧЕНИЕ: регистрирует класс окна.
//
//  КОММЕНТАРИИ:
//
//    Эта функция и ее использование необходимы только в случае, если нужно, чтобы данный код
//    был совместим с системами Win32, не имеющими функции RegisterClassEx'
//    которая была добавлена в Windows 95. Вызов этой функции важен для того,
//    чтобы приложение получило "качественные" мелкие значки и установило связь
//    с ними.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
        WNDCLASSEX wcex;
        wcex.cbSize = sizeof(WNDCLASSEX);
        wcex.style            = CS_HREDRAW | CS_VREDRAW;
        wcex.lpfnWndProc    = WndProc;
        wcex.cbClsExtra        = 0;
        wcex.cbWndExtra        = 0;
        wcex.hInstance        = hInstance;
        wcex.hIcon            = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_INITDRAW));
        wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
        wcex.hbrBackground    = (HBRUSH)(COLOR_WINDOW+1);
        wcex.lpszMenuName    = MAKEINTRESOURCE(IDC_INITDRAW);
        wcex.lpszClassName    = szWindowClass;
        wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
        return RegisterClassEx(&wcex);
}
//
//   ФУНКЦИЯ: InitInstance(HINSTANCE, int)
//
//   НАЗНАЧЕНИЕ: сохраняет обработку экземпляра и создает главное окно.
//
//   КОММЕНТАРИИ:
//
//        В данной функции дескриптор экземпляра сохраняется в глобальной переменной, а также
//        создается и выводится на экран главное окно программы.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
       HWND hWnd;
       hInst = hInstance; // Сохранить дескриптор экземпляра в глобальной переменной
       hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
          CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
       if (!hWnd)
       {
          return FALSE;
       }
       ShowWindow(hWnd, nCmdShow);
       UpdateWindow(hWnd);
       return TRUE;
}
//
//  ФУНКЦИЯ: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  НАЗНАЧЕНИЕ:  обрабатывает сообщения в главном окне.
//
//  WM_COMMAND    - обработка меню приложения
//  WM_PAINT    -Закрасить главное окно
//  WM_DESTROY     - ввести сообщение о выходе и вернуться.
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
        int wmId, wmEvent;
        PAINTSTRUCT ps;
        HDC hdc;
        switch (message)
        {
        case WM_COMMAND:
            wmId    = LOWORD(wParam);
            wmEvent = HIWORD(wParam);
            // Разобрать выбор в меню:
            switch (wmId)
            {
            case IDM_ABOUT:
                DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                break;
            case IDM_EXIT:
                DestroyWindow(hWnd);
                break;
            default:
                return DefWindowProc(hWnd, message, wParam, lParam);
            }
            break;
        case WM_PAINT:
            hdc = BeginPaint(hWnd, &ps);
            // TODO: добавьте любой код отрисовки...
            EndPaint(hWnd, &ps);
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        return 0;
}

Но вот Ошибка cranky помогите пожалуйста. cry :
1>InitDraw.obj : error LNK2019: ссылка на неразрешенный внешний символ "int __stdcall About(struct HWND__ *,unsigned int,unsigned int,long)" (?About@@YGHPAUHWND__@@IIJ@Z) в функции "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z)
1>E:\C++\Программы\InitDraw\Debug\InitDraw.exe : fatal error LNK1120: 1 неразрешенных внешних элементов
Заране Благодарен!!! respect

Сообщение отредактировал Stas96 - Четверг, 12 Ноября 2009, 23:29
el_reyДата: Пятница, 13 Ноября 2009, 07:21 | Сообщение # 2
почетный гость
Сейчас нет на сайте
Проблема скорее всего с файлом ресурсов - меню about. Закомментируй вот эти строки:

case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;

Должно помочь.

И извиняюсь, а зачем ты учишь DirectDraw, он ведь безнадёжно устарел?


Пишу учебник
Stas96Дата: Пятница, 13 Ноября 2009, 11:09 | Сообщение # 3
Programmer and Game Designer
Сейчас нет на сайте
Просто DirectDraw идет по книге которую я учу "Фленов - DirectX и C++ Искусство программирования",Если можете посоветовать хорошую книгу буду благодарен...
VinchensooДата: Пятница, 13 Ноября 2009, 11:35 | Сообщение # 4
Злобный социопат с комплексом Бога
Сейчас нет на сайте
Stas96, лень вперед тебя родилась? smile
Раздел литература, там есть топик, где собраны все лучшие книги по ДХ, ОГЛ, С++


WXZRWДата: Пятница, 13 Ноября 2009, 14:20 | Сообщение # 5
Thousand faces conspiration
Сейчас нет на сайте
Quote (el_rey)
Проблема скорее всего с файлом ресурсов - меню about.

Проблема в том что обьявлено INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); но функция отсутствует...

Должно быть что-то типа :

Code

INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
  UNREFERENCED_PARAMETER(lParam);
  switch (message)
  {
  case WM_INITDIALOG:
   return (INT_PTR)TRUE;

  case WM_COMMAND:
   if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
   {
    EndDialog(hDlg, LOWORD(wParam));
    return (INT_PTR)TRUE;
   }
   break;
  }
  return (INT_PTR)FALSE;
}

Либо закомментируй часть кода с case IDM_ABOUT:

el_reyДата: Пятница, 13 Ноября 2009, 15:26 | Сообщение # 6
почетный гость
Сейчас нет на сайте
Quote (WXZRW)
Проблема в том что обьявлено INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); но функция отсутствует...

Блин, точно. Был не прав.

Stas96
Посмотри здесь - есть кое-что о Direct3D (смотри рассылку).


Пишу учебник
Stas96Дата: Пятница, 13 Ноября 2009, 18:48 | Сообщение # 7
Programmer and Game Designer
Сейчас нет на сайте
Все спасибо respect
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг