`
hereson
  • 浏览: 1451495 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Visual C++游戏编程基础(肖永亮)2_1

    博客分类:
  • Pv3d
阅读更多

// yxbcjc2_1.cpp : 定义应用程序的入口点。
//

#include "stdafx.h"
#include "yxbcjc2_1.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);
LRESULT CALLBACK    About(HWND, UINT, WPARAM, LPARAM);

HPEN hPen[7];
HBRUSH hBru[7];

int iPen[7]={PS_SOLID,PS_DASH,PS_DOT,PS_DASHDOT,PS_DASHDOTDOT,PS_NULL,PS_INSIDEFRAME};
int iBru[6]={HS_VERTICAL,HS_HORIZONTAL,HS_FDIAGONAL,HS_DIAGCROSS,HS_CROSS,HS_BDIAGONAL};

void MyDraw(HDC hdc)
{
    //绘制线段
    int y=0;
    int x1=120;
    int x2=190;
    for(int i=0;i<7;i++)
    {
        y = (i+1) * 30;
        SelectObject(hdc,hPen[i]);        //选用画笔
        MoveToEx(hdc,30,y,NULL);
        LineTo(hdc,100,y);
    }
    //绘制7种矩形
    for(int i=0;i<=6;i++)
    {
        SelectObject(hdc,hBru[i]);        //选用画刷
        Rectangle(hdc,x1,30,x2,y);
        x1 += 100;
        x2 += 100;
    }
}

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
     // TODO: 在此放置代码。
    MSG msg;
    HACCEL hAccelTable;

    // 初始化全局字符串
    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadString(hInstance, IDC_YXBCJC2_1, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);

    // 执行应用程序初始化:
    if (!InitInstance (hInstance, nCmdShow)) 
    {
        return FALSE;
    }

    hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_YXBCJC2_1);

    // 主消息循环:
    while (GetMessage(&msg, NULL, 0, 0)) 
    {
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }

    return (int) msg.wParam;
}



//
//  函数: MyRegisterClass()
//
//  目的: 注册窗口类。
//
//  注释: 
//
//    仅当希望在已添加到 Windows 95 的
//    “RegisterClassEx”函数之前此代码与 Win32 系统兼容时,
//    才需要此函数及其用法。调用此函数
//    十分重要,这样应用程序就可以获得关联的
//   “格式正确的”小图标。
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
    WNDCLASSEX wcex;

    wcex.cbSize = sizeof(WNDCLASSEX); 

    wcex.style            = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = (WNDPROC)WndProc;
    wcex.cbClsExtra        = 0;
    wcex.cbWndExtra        = 0;
    wcex.hInstance        = hInstance;
    wcex.hIcon            = LoadIcon(hInstance, (LPCTSTR)IDI_YXBCJC2_1);
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground    = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName    = (LPCTSTR)IDC_YXBCJC2_1;
    wcex.lpszClassName    = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

    return RegisterClassEx(&wcex);
}

//
//   函数: InitInstance(HANDLE, int)
//
//   目的: 保存实例句柄并创建主窗口
//
//   注释: 
//
//        在此函数中,我们在全局变量中保存实例句柄并
//        创建和显示主程序窗口。
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
    for(int i=0;i<7;i++)
   {
       hPen[i]=CreatePen(iPen[i],1,RGB(255,0,0));
       if(6==i)
           hBru[i] = CreateSolidBrush(RGB(0,255,0));
       else
           hBru[i] = CreateHatchBrush(iBru[i],RGB(0,255,0));
   }
   HWND hWnd;

   hInst = hInstance; // 将实例句柄存储在全局变量中

   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, 850, 400, NULL, NULL, hInstance, NULL);

   if (!hWnd)
   {
      return FALSE;
   }

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

   return TRUE;
}

//
//  函数: WndProc(HWND, unsigned, WORD, LONG)
//
//  目的: 处理主窗口的消息。
//
//  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, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
            break;
        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        break;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        // TODO: 在此添加任意绘图代码...
        MyDraw(hdc);
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        for(int i=0;i<6;i++)
        {
            DeleteObject(hPen[i]);
            DeleteObject(hBru[i]);
        }
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

// “关于”框的消息处理程序。
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_INITDIALOG:
        return TRUE;

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

 // yxbcjc2_2.cpp : 定义应用程序的入口点。

//

#include "stdafx.h"
#include "yxbcjc2_2.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);
LRESULT CALLBACK    About(HWND, UINT, WPARAM, LPARAM);

void MyPaint(HDC hdc,LPARAM lParam)
{
    int x=LOWORD(lParam);
    int y=HIWORD(lParam);
    char str[20]={0};
    TextOut(hdc,10,10,"鼠标坐标",(int)strlen("鼠标坐标"));
    sprintf(str,"X坐标:%d   ",x);
    TextOut(hdc,30,30,str,(int)strlen(str));
    sprintf(str,"Y坐标:%d   ",y);
    TextOut(hdc,30,50,str,(int)strlen(str));
}

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
     // TODO: 在此放置代码。
    MSG msg;
    HACCEL hAccelTable;

    // 初始化全局字符串
    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadString(hInstance, IDC_YXBCJC2_2, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);

    // 执行应用程序初始化:
    if (!InitInstance (hInstance, nCmdShow)) 
    {
        return FALSE;
    }

    hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_YXBCJC2_2);

    // 主消息循环:
    while (GetMessage(&msg, NULL, 0, 0)) 
    {
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }

    return (int) msg.wParam;
}



//
//  函数: MyRegisterClass()
//
//  目的: 注册窗口类。
//
//  注释: 
//
//    仅当希望在已添加到 Windows 95 的
//    “RegisterClassEx”函数之前此代码与 Win32 系统兼容时,
//    才需要此函数及其用法。调用此函数
//    十分重要,这样应用程序就可以获得关联的
//   “格式正确的”小图标。
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
    WNDCLASSEX wcex;

    wcex.cbSize = sizeof(WNDCLASSEX); 

    wcex.style            = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = (WNDPROC)WndProc;
    wcex.cbClsExtra        = 0;
    wcex.cbWndExtra        = 0;
    wcex.hInstance        = hInstance;
    wcex.hIcon            = LoadIcon(hInstance, (LPCTSTR)IDI_YXBCJC2_2);
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground    = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName    = NULL;//(LPCTSTR)IDC_YXBCJC2_2;
    wcex.lpszClassName    = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

    return RegisterClassEx(&wcex);
}

//
//   函数: InitInstance(HANDLE, 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, unsigned, WORD, LONG)
//
//  目的: 处理主窗口的消息。
//
//  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, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
            break;
        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        break;
    case WM_MOUSEMOVE:
        /*hdc = BeginPaint(hWnd,&ps);
        MyPaint(hdc,lParam);
        EndPaint(hWnd,&ps);
        InvalidateRect(hWnd,NULL,FALSE);*/
        hdc = GetDC(hWnd);
        MyPaint(hdc,lParam);
        ReleaseDC(hWnd,hdc);
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        // TODO: 在此添加任意绘图代码...
        //MyPaint(hdc,lParam);
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

// “关于”框的消息处理程序。
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_INITDIALOG:
        return TRUE;

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

 

分享到:
评论

相关推荐

    Visual C++ 游戏编程基础 肖永亮 (part_1)

    Visual C++ VC 游戏 编程 基础 肖永亮 飞思 DirectX 3D 音效 视觉

    Visual C++ 游戏编程基础 肖永亮 (part_3)

    Visual C++ VC 游戏 编程 基础 肖永亮 飞思 DirectX 3D 音效 视觉

    Visual C++ 游戏编程基础 肖永亮 (part_2)

    Visual C++ VC 游戏 编程 基础 肖永亮 飞思 DirectX 3D 音效 视觉

    Visual C++游戏编程基础10

    在“Visual C++游戏编程基础10”这个主题中,我们将会探讨如何使用Microsoft的Visual C++集成开发环境(IDE)来创建基本的游戏程序。这一系列教程的目标是为初学者提供一个良好的起点,让他们了解游戏编程的基础知识...

    Visual C++游戏编程基础(代码)

    《Visual C++游戏编程基础》是一本由肖永亮主编的专业书籍,主要针对初学者,讲解如何使用Visual C++这一强大的编程工具进行游戏开发。在本书中,读者将学习到C++语言的基础知识,以及如何利用它来创建交互式游戏。...

    Visual C++游戏编程基础

    精通Visual C++数字图像处理精通Visual C++数字图像处理精通Visual C++数字图像处理精通Visual C++数字图像处理精通Visual C++数字图像处理精通Visual C++数字图像处理精通Visual C++数字图像处理

    《3D游戏编程-肖永亮》源代码

    本书是一本独具匠心的计算机三维编程教程,展现了韩国优秀的游戏编程技术的内涵。书中涉及到比较深入的数学、物理和计算机编程的基本概念,作者简练地应用了这些知识,但并无枯燥无味地说教,而是根据自己丰富的教学...

    VC++6游戏编程入门及源码

    《VC++6游戏编程入门及源码》是一个针对初学者的教程资料,旨在帮助学习者掌握使用Microsoft Visual C++ 6.0进行游戏开发的基本技能。这个资源包含了多个游戏编程的实例源码,通过实际操作,可以让学习者深入理解...

Global site tag (gtag.js) - Google Analytics