游戏开发论坛

 找回密码
 立即注册
搜索
查看: 10344|回复: 13

万事开头难!我来发表第一篇文章!!!

[复制链接]

45

主题

286

帖子

314

积分

中级会员

自由游戏制作人

Rank: 3Rank: 3

积分
314
QQ
发表于 2003-8-23 07:24:00 | 显示全部楼层 |阅读模式
创建你的第一个窗口

一、用Visual C++6.0创建你的窗口

1.点击"File"->"New..."弹出"New"对话框(图1):

图1

2.点击&quotrojects"栏,选中"Win32 Application",在"Location"中输入你的工程项目路径,然后在"Project

name"中输入你的项目名称,这里我们就以"Hello"为项目名吧。点击"OK"按钮,弹出"Win32 Application -

Step 1 of 1"对话框(图2);

图2

这里有三个选项:
(1)An empty project
创建一个新的空项目
也就是说,一个什么都没有的项目。
(2)A simple Win32 applicaton
一个只有WinMain函数的项目。
(3)A typical "Hello World!" application
一个完整的窗口程序,它帮你把初始化初口的部分弄好,这正是我们所需要的。

就选他。

点击"Finish"按钮,弹出"New Project Information"对话框,别管它,点管点"OK"按钮创建一个新的项目。

按F7编译,再按Ctrl+F5执行,这就是你的第一个窗口啦(图3),是不是很激动呀~_~

图3

二、认识他是怎么弄出来的

下面是他的原代码,让我们一步一步来把它消化掉。

----------------------------------------***---------------------------------------------
// Hello.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "resource.h"

#define MAX_LOADSTRING 100

// Global Variables:
HINSTANCE hInst;                                                                // current

instance
TCHAR szTitle[MAX_LOADSTRING];                                                                // The

title bar text
TCHAR szWindowClass[MAX_LOADSTRING];                                                               

// The title bar text

// Foward declarations of functions included in this code module:
ATOM                                MyRegisterClass(HINSTANCE hInstance);
BOOL                                InitInstance(HINSTANCE, int);
LRESULT CALLBACK        WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK        About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
        // TODO: Place code here.
        MSG msg;
        HACCEL hAccelTable;

        // Initialize global strings
        LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
        LoadString(hInstance, IDC_HELLO, szWindowClass, MAX_LOADSTRING);
        MyRegisterClass(hInstance);

        // Perform application initialization:
        if (!InitInstance (hInstance, nCmdShow))
        {
                return FALSE;
        }

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

        // Main message loop:
        while (GetMessage(&msg, NULL, 0, 0))
        {
                if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
                {
                        TranslateMessage(&msg);
                        DispatchMessage(&msg);
                }
        }

        return msg.wParam;
}



//
//  FUNCTION: MyRegisterClass()
//
//  PURPOSE: Registers the window class.
//
//  COMMENTS:
//
//    This function and its usage is only necessary if you want this code
//    to be compatible with Win32 systems prior to the 'RegisterClassEx'
//    function that was added to Windows 95. It is important to call this function
//    so that the application will get 'well formed' small icons associated
//    with it.
//
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_HELLO);
        wcex.hCursor                = LoadCursor(NULL, IDC_ARROW);
        wcex.hbrBackground        = (HBRUSH)(COLOR_WINDOW+1);
        wcex.lpszMenuName        = (LPCSTR)IDC_HELLO;
        wcex.lpszClassName        = szWindowClass;
        wcex.hIconSm                = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

        return RegisterClassEx(&wcex);
}

//
//   FUNCTION: InitInstance(HANDLE, int)
//
//   PURPOSE: Saves instance handle and creates main window
//
//   COMMENTS:
//
//        In this function, we save the instance handle in a global variable and
//        create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;

   hInst = hInstance; // Store instance handle in our global variable

   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;
}

//
//  FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
//
//  PURPOSE:  Processes messages for the main window.
//
//  WM_COMMAND        - process the application menu
//  WM_PAINT        - Paint the main window
//  WM_DESTROY        - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
        int wmId, wmEvent;
        PAINTSTRUCT ps;
        HDC hdc;
        TCHAR szHello[MAX_LOADSTRING];
        LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);

        switch (message)
        {
                case WM_COMMAND:
                        wmId    = LOWORD(wParam);
                        wmEvent = HIWORD(wParam);
                        // Parse the menu selections:
                        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: Add any drawing code here...
                        RECT rt;
                        GetClientRect(hWnd, &rt);
                        DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
                        EndPaint(hWnd, &ps);
                        break;
                case WM_DESTROY:
                        PostQuitMessage(0);
                        break;
                default:
                        return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}

// Mesage handler for about box.
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;
}

从所周知的,每个Windows程序都是从Main,WinMain,_tWinMain等函数开始执行的。

(待续)

45

主题

286

帖子

314

积分

中级会员

自由游戏制作人

Rank: 3Rank: 3

积分
314
QQ
 楼主| 发表于 2003-8-23 07:27:00 | 显示全部楼层

Re:万事开头难!我来发表第一篇文章!!!

呵呵,刚写了一个开头,我想这篇文章一定会给初学游戏编程的朋友一些帮助!!!
呵呵,慢慢写,写完啦大家来评论,看看哪里需要改,再正式发布!

3

主题

43

帖子

43

积分

注册会员

Rank: 2

积分
43
QQ
发表于 2003-8-23 07:47:00 | 显示全部楼层

Re:万事开头难!我来发表第一篇文章!!!

顶~

90

主题

797

帖子

833

积分

高级会员

论坛版主

Rank: 4

积分
833
QQ
发表于 2003-8-23 11:49:00 | 显示全部楼层

Re:万事开头难!我来发表第一篇文章!!!

call。你可真会充字数。我写的文章都是汉字,难呀!
有机会一起出去玩呀!哈哈

45

主题

286

帖子

314

积分

中级会员

自由游戏制作人

Rank: 3Rank: 3

积分
314
QQ
 楼主| 发表于 2003-8-23 12:49:00 | 显示全部楼层

Re:万事开头难!我来发表第一篇文章!!!

呵呵,这个还不是正式的发布,只是先写出来,让大家评测,看看怎么改呀!

6

主题

82

帖子

171

积分

注册会员

Rank: 2

积分
171
发表于 2003-9-19 17:31:00 | 显示全部楼层

Re:万事开头难!我来发表第一篇文章!!!

支持

0

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2003-9-19 17:59:00 | 显示全部楼层

Re:万事开头难!我来发表第一篇文章!!!

牛!

4

主题

12

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2003-9-20 19:19:00 | 显示全部楼层

Re:万事开头难!我来发表第一篇文章!!!

还可以

14

主题

61

帖子

61

积分

注册会员

Rank: 2

积分
61
发表于 2003-10-4 02:25:00 | 显示全部楼层

Re: 万事开头难!我来发表第一篇文章!!!

我照你说的例子编译!!可是出错啊!是不是我的VC++6 坏了啊!!
[em6] [em6] [em6] [em6] [em6] [em7] [em7] [em7] [em7] [em7]
--------------------Configuration: Hello - Win32 Debug--------------------
Compiling resources...
Compiling...
StdAfx.cpp
d:\program files\microsoft visual studio\vc98\include\winnls.h(514) : error C2018: unknown character '0x10'
Error executing cl.exe.

Hello.exe - 1 error(s), 0 warning(s)
sf_200310422534.jpg

0

主题

8

帖子

26

积分

注册会员

Rank: 2

积分
26
发表于 2003-10-12 13:14:00 | 显示全部楼层

Re:万事开头难!我来发表第一篇文章!!!

不能把原理也讲讲嘛?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-5-14 22:26

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表