| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6359 人关注过本帖
标题:All about windows programming
取消只看楼主 加入收藏
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 

第二种操作:设置或取消选中标志

通常在菜单旁 以打钩标志,表示该菜单项被选中。我们可以在资源描述文件中设置菜单项为 CHECKED 来选中某菜单项,也可以通过调用函数 DWORD CheckMenuItem( HMENU hmenu, UINT wIDCheckItem, UINT dwCheck) wIDCheckItem 为设置或取消选中标志的菜单项标识, dwCheck 为操作标识,

dwCheck 参数的常用标识及其说明:

MF_BYCOMMAND 表明以ID值标识菜单项

MF_BYCOMMAND 表明以位置标识菜单项

MF_CHECKED 添加选中标志

MF_UNCHECKED 删除选中标志

第三种操作:增加菜单项(两种动态增加菜单项的方法)

1) 调用函数 BOOL AppendMenu( HMENU hmenu, UINT dwFlags, UINT dwIDNewItem, LPCTSTR lpNewItem)

例如在弹出式菜单"帮助"的末尾增加一项"版本说明"的形式如下:

AppendMenu(hmenu, MF_ENABLED, IDM_VERSION, "帮助(&H)");

2) 调用函数 BOOL InsertMenu(HMENU hmenu, UINT wPosition, UINT dwFlags, UINT dwIDNewItem, LPCTSTR lpNewItem) 在菜单中插入菜单项

wPosition 由参数 dwFlags 来解释其意义, 如果dwFlags 为 MF_BYCOMMAND, 则该参数为插入位置的下一个菜单项的 ID值, 如果 dwFlags 为 MF_BYPOSITION, 则该参数为插入的位置号,菜单的第一个菜单项的位置为 0。dwIDNewItem 一般为插入项的 ID值。 如果加入的是一个弹出式菜单, 则该参数为弹出式菜单的 handle. lpNewItem 取决于 dwFlags 参数,一般情况下为新插入菜单项的标识, 如果 dwFlags 为 FM_BITMAP, 则该参数包含一个位图handle.

在弹出式菜单"编辑"的"复制"项之前加入新的菜单项"粘贴"的语句如下:

InsertMenu(hmenu, IDM_COPY, MF_BYCOMMAND | MF_ENABLED, IDM_PASTE, "粘贴(&V)");

// to be continued


自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2004-10-05 00:26
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 

解释你的第一个问题,HWND hwnd; 其实在解释 这个问题之前, 先要解释什么是 handle. 往往当你看到一个变量名前有 h 这个字母,那么意味着,它是一个handle. 那么究竟什么是 handle 呢? handle 是一个4字节长的整数值,用于标识应用程序中不同的对象和同类对象中不同的实例,比如一个窗口,按钮,图标,滚动条,输出设备,等。通过 handle 标示了某一唯一的对象,那么应用程序通过 handle 来访问相应的对象信息。

你这里提出的 HWND 即为窗口 handle,

HWND hwnd; 则表明这是一个窗口 handle, 它具体以 hwnd 这个变量来接受数值。

回答你的第二个问题, MSG Msg; 是什么? MSG 是一个结构体,具体定义如下:

typedef struct tagMSG

{

HWND hwnd;

UINT message;

WPARAM wParam;

LPARAM lParam;

DWORD time;

POINT pt;

}MSG;

hwnd 为获取消息的窗口handle, 如果此参数为 null, 则可检索所有驻留在消息队列中的消息。

message 是代表一个消息的消息编号,每个Windows消息都有一个消息编号

wParam 和 lParam 是包含有关消息的附加信息

time 指定消息发送至消息队列的时间。

pt 指定消息发送时,屏幕光标的位置。pt 的数据类型 POINT也是一个结构体, POINT的定义如下:

typedef struct tagPOINT

{

LONG x; //屏幕的横坐标

LONG y; //屏幕的纵坐标

}POINT;

参看下面连接

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_msg_structure.asp

回答你第三个问题 WNDCLASS wndclass;

WNDCLASS 是一个结构体,其包含一个窗口类的全部信息, // 不要误会,这里所说的类,并非 C++ 中的类,而是指具体的一类物体,如窗口。 窗口类或者称为窗口结构的定义如下:

typedef struct {    UINT style;            // 窗口类的样式,一般设置为0    WNDPROC lpfnWndProc;   // 指向窗口函数的指针    int cbClsExtra;        // 分配在窗口类结构后的字节数    int cbWndExtra;        // 分配在窗口实例后的字节数    HINSTANCE hInstance;   // 定义窗口类的应用程序的实例 handle    HICON hIcon;           // 窗口类的图标    HCURSOR hCursor;       // 窗口类的光标    HBRUSH hbrBackground;  // 窗口类的背景刷    LPCTSTR lpszMenuName;  // 窗口类的菜单资源名    LPCTSTR lpszClassName; // 窗口类名} WNDCLASS, *PWNDCLASS;
回答你的第四个问题 UpdateWindow(hwnd);
应用程序通过调用 该函数更新并绘制用户区,并发出 WM_PAINT 消息,如果更新区域为空,就不发送任何消息。
请参看下面连接:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/pantdraw_4zef.asp

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2004-10-06 01:56
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 

接37楼

第4种操作:调用函数 DeleteMenu 删除菜单项,其函数原型为:BOOL DeleteMenu(HMENU hmenu, UINT wPosition, UINT dwFlags)

参数 wPosition 的意思取决于 参数 dwFlags 的意思。如果dwFlags 为 MF_BYCOMMAND, 则 wPosition 为菜单项的 ID 值,如果dwFlags 为MF_BYPOSITION, 则wPosition 为菜单项的位置号。另外,如果菜单项含有弹出式菜单,则删除该菜单项时该弹出式菜单也同时被删除。例如,删除弹出式 "编辑"菜单中的"复制"项的形式如下:

DeleteMenu(hMenu, IDM_COPY, MF_BYCOMMAND)

第5种操作:修改菜单项

应用程序可调用函数 ModifyMenu 修改菜单中的某个项,该函数的原型为:

BOOL ModifyMenu(HMENU hmenu, UINT wPosition, // 指定需修改的菜单项位置

UINT dwFlags, UINT dwIDNewItem, // 修改后的菜单项标识

LPCTSTR lpNewItem // 修改后的菜单项名

);

对于 wPosition, 如果dwFlags 为MF_BYCOMMAND, 则该参数为菜单项的 ID 值,如果dwFlags 为MF_BYPOSITION, 则该参数为菜单项的位置号。 如:修改弹出式菜单"文件"中"打开"项为"加载"项的语句如下:

ModifyMenu(hmenu, IDM_OPEN, MF_BYCOMMAND, IDM_LOAD"加载(&L)");

除此以外,我们还可以动态的创建菜单,使得资源更加节省,在应用程序中动态创建菜单分两个步骤:

1)调用函数 HMENU CreateMenu(void) 创建空的弹出式菜单,

2)调用函数 AppendMenu 或 InsertMenu 在菜单中加入菜单项。

// to be continued, 下次关于加速键资源


自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2004-10-11 02:13
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 

创建加速键的步骤如下:

1。 定义加速键资源

定义形式为: 加速键的名字 ACCELERATORS {加速键的定义}

加速键定义的格式为:键名,加速键标识(ID), [类型][NOINVERT][ALT][SHIFT][CONTROL]

其中:

加速键标识:与所表示的菜单项标识相同的标识值

类型:标识改建为标准键还是虚拟键

NOINVERT:表示当使用加速键时,菜单项不高亮度显示

ALT, SHIFT, CONTROL:表示加速键的组合方式

常用的加速键有两种形式:

1)"^char", id

与Ctrl键组合的加速键。例如"编辑"菜单中"复制"项的加速键可定义为:"^C", IDM_COPY

2 ) nCode, idVIRTKEY

使用虚拟键作为加速键。虚拟键是系统提供的与设备无关的键码, 如键盘上的F功能键,方向键,Delete 键等等。Windows.H 文件中以 VK 开头定义虚拟键,如VK_F1, VK_DELETE 等。例如将F1键定义为"帮助"菜单项的加速键,其形式为  VK_F1, IDM_HELP, VIRTKEY

2. 加载加速键资源

在应用程序定义加速键资源 handle 后,即可通过调用函数 LoadAccelerators 加载加速键资源,其形式为:

。。。

HACCEL hAccel;

。。。

hAccel = LoadAccelerators(hInstance, lpAccelName);

其中: lpAccelName 加速键表名

3。 翻译加速键

应用程序使用加速键的目的是快捷的切换到需要的菜单项,因此,应用程序需要完成加速键消息到菜单消息的翻译。该翻译操作经常在应用程序的消息循环中进行,其形式如下:

while(GetMessage(&Msg, NULL, 0, 0))

{

if(!TranslateAccelerators(hwnd, hAccel, &Msg))

{

TranslateMessage(&Msg);

DispatchMessage(&Msg);

}

}

函数TranslateAccelerators 是翻译操作的核心,该函数的原型为:int TranslateAccelerators(HWND hwnd, HACCEL hAccel, lpMSG lpMsg) // lpMsg 为指向MSG结构的指针。

函数 TranslateAccelerators 的作用是对照加速键表,将相关的按键消息 WM_KEYDOWN 和 WM_KEYUP 翻译成WM_COMMAND 或WM_SYSCOMMAND 消息。其特点是将翻译后的WM_COMMAND 或 WM_SYSCOMMAND 消息直接发往窗口,而不在消息队列中等待。消息翻译完成后,函数返回非0值

// to be continued, next time an example program


自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2004-10-12 01:06
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
很高兴,这个帖子再次回到C++教室板块,这个帖子是我本人移到Windows编程板块。但何故被删除,我就不得而知了。当时live41建议我出任Windows 编程板块的版主,我没有应答,我觉得我的能力还很有限,现在还是无意出任那里的版主。在Windows编程这个领域,我无力胜任版主这个位置,怕有失大家的期望。出于对 windows编程的爱好和热情,我还是愿意继续我的这个帖子,将我对windows 编程的感知写出来,希望能与大家共勉,学习windowsprogramming 是一件很有趣的事情,但也是非常困难的事情,很多学习者在这条道路上折腰。它需要你的毅力,你的激情。让我们继续。。。

我很想上传  Programming Windows by Charles Petzold  这本E-book. 但考虑到商业版权的问题,所以在这里我不上传了,以避免不必要的纠纷。
如果哪位朋友对此书感兴趣,可以向我索取,我可以Email 给你。

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2005-01-14 18:59
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
出于好玩,一个小代码:

#include <windows.h>

#include <cmath>

#define PI 3.1415926



class Pentacle

{

private:

   POINT points[5];

   POINT mittel;

   double length;

public:

   Pentacle(){}

   Pentacle(const POINT & mP, const double l);

   void createPentacle(const POINT & mP, const double l);

   void paint1(HDC, HWND);

   void paint2(HDC, HWND);

   void paint3(HDC, HWND);

};



Pentacle::Pentacle(const POINT & mP, const double l)

{

   mittel = mP;

   length = l;

   for(int i = 0; i<5; i++)

   {

      points[i].x = (LONG)(length/2/sin(36*PI/180)*sin(i*72*PI/180) + mittel.x);

      points[i].y = (LONG)(length/2/sin(36*PI/180)*cos(i*72*PI/180) + mittel.y);

   }

}



void Pentacle::createPentacle(const POINT & mP, const double l)

{

   mittel = mP;

   length = l;

   for(int i = 0; i<5; i++)

   {

      points[i].x = (LONG)(length/2/sin(36*PI/180)*sin(i*72*PI/180) + mittel.x);

      points[i].y = (LONG)(length/2/sin(36*PI/180)*cos(i*72*PI/180) + mittel.y);

   }

}



void Pentacle::paint1(HDC hDC, HWND hWnd)

{

   //PAINTSTRUCT ps;

   //HDC hDC = BeginPaint(hWnd, &ps);

   HPEN hPen = CreatePen(PS_SOLID, 2, RGB(255, 0, 0));

   SelectObject(hDC, hPen);

   POINT points[6];// = {{100,100}, {129,121}, {118,154},{82,154},{71,121},{100,100}};

   

   for(int i = 0; i<5; i++)

   {

      points[i] = Pentacle::points[i];

   }

   points[5] = Pentacle::points[0];

   

   Polyline(hDC, points, 6);

   DeleteObject(hPen);

   //EndPaint(hWnd, &ps);

}



void Pentacle::paint2(HDC hDC, HWND hWnd)

{

   POINT points[6];// = {{100,100}, {129,121}, {118,154},{82,154},{71,121},{100,100}};

   

   for(int i = 0; i<5; i++)

   {

      points[i] = Pentacle::points[i];

   }

   points[5] = Pentacle::points[0];

   

   HPEN hPen = CreatePen(PS_SOLID, 2, RGB(255, 0, 0));

   SelectObject(hDC, hPen);

   MoveToEx(hDC, points[0].x, points[0].y, NULL);

   LineTo(hDC, points[2].x, points[2].y);

   DeleteObject(hPen);

   hPen = CreatePen(PS_SOLID, 2, RGB(0, 255, 0));

   SelectObject(hDC, hPen);

   LineTo(hDC, points[4].x, points[4].y);

   DeleteObject(hPen);

   hPen = CreatePen(PS_SOLID, 2, RGB(0, 0, 255));

   SelectObject(hDC, hPen);

   LineTo(hDC, points[1].x, points[1].y);

   DeleteObject(hPen);

   hPen = CreatePen(PS_SOLID, 2, RGB(125, 125, 125));

   SelectObject(hDC, hPen);

   LineTo(hDC, points[3].x, points[3].y);

   DeleteObject(hPen);

   hPen = CreatePen(PS_SOLID, 2, RGB(0, 0, 125));

   SelectObject(hDC, hPen);

   LineTo(hDC, points[0].x, points[0].y);

   DeleteObject(hPen);

}



void Pentacle::paint3(HDC hDC, HWND hWnd)

{

   POINT points[6];// = {{100,100}, {129,121}, {118,154},{82,154},{71,121},{100,100}};

   

   for(int i = 0; i<5; i++)

   {

      points[i] = Pentacle::points[i];

   }

   points[5] = Pentacle::points[0];

   

   HBRUSH hBrush = CreateSolidBrush(RGB(0, 128, 255));

   SelectObject(hDC, hBrush);

   Polygon(hDC, points, 6);

   DeleteObject(hBrush);

}

/*  Declare Windows procedure  */

LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);



/*  Make the class name into a global variable  */

char szClassName[ ] = "WindowsApp";



int WINAPI WinMain (HINSTANCE hThisInstance,

                  
HINSTANCE hPrevInstance,

                  
LPSTR lpszArgument,

                  
int nFunsterStil)



{

    HWND
hwnd;              
/* This is the handle for our window */

    MSG
messages;           
/* Here messages to the application are saved */

    WNDCLASSEX wincl;        /* Data structure for the windowclass */



    /* The Window structure */

    wincl.hInstance = hThisInstance;

    wincl.lpszClassName = szClassName;

    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */

    wincl.style =
CS_DBLCLKS;               
/* Catch double-clicks */

    wincl.cbSize = sizeof (WNDCLASSEX);



    /* Use default icon and mouse-pointer */

    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);

    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);

    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);

    wincl.lpszMenuName =
NULL;               
/* No menu */

    wincl.cbClsExtra =
0;                     
/* No extra bytes after the window class */

    wincl.cbWndExtra =
0;                     
/* structure or the window instance */

    /* Use Windows's default color as the background of the window */

    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;



    /* Register the window class, and if it fails quit the program */

    if (!RegisterClassEx (&wincl))

        return 0;



    /* The class is registered, let's create the program*/

    hwnd = CreateWindowEx (

         
0,                  
/* Extended possibilites for variation */

         
szClassName,         /*
Classname */

           "Pentacle",       /* Title Text */

           WS_OVERLAPPEDWINDOW, /* default window */

         
CW_USEDEFAULT,       /* Windows decides
the position */

         
CW_USEDEFAULT,       /* where the window
ends up on the screen */

         
544,               
/* The programs width */

         
375,               
/* and height in pixels */

         
HWND_DESKTOP,        /* The window
is a child-window to desktop */

         
NULL,               
/* No menu */

         
hThisInstance,       /* Program Instance
handler */

         
NULL               
/* No Window Creation data */

           );



    /* Make the window visible on the screen */

    ShowWindow (hwnd, nFunsterStil);



    /* Run the message loop. It will run until GetMessage() returns 0 */

    while (GetMessage (&messages, NULL, 0, 0))

    {

        /* Translate virtual-key messages into character messages */

        TranslateMessage(&messages);

        /* Send message to WindowProcedure */

        DispatchMessage(&messages);

    }



    /* The program return-value is 0 - The value that PostQuitMessage() gave */

    return messages.wParam;

}





/*  This function is called by the Windows function DispatchMessage()  */



LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{

    HDC hdc;

    PAINTSTRUCT ps;

    HPEN hPen;

    POINT mittel;

    POINT points[6];

    int length;

    Pentacle myPentacle;

    switch
(message)                 
/* handle the messages */

    {

        case WM_DESTROY:

           
PostQuitMessage (0);       /* send a
WM_QUIT to the message queue */

            break;

        case WM_PAINT:

            hdc = BeginPaint(hwnd, &ps);

            mittel.x = 150;

            mittel.y = 150;

            length = 150;

         

            myPentacle.createPentacle(mittel, length);

            myPentacle.paint1(hdc, hwnd);

            myPentacle.paint3(hdc, hwnd);

            myPentacle.paint2(hdc, hwnd);

            EndPaint(hwnd, &ps);

            break;

      
default:                     
/* for messages that we don't deal with */

            return DefWindowProc (hwnd, message, wParam, lParam);

    }

    return 0;

}




自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2005-02-02 10:12
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
发现大家对 Windows 编程都没什么兴趣,是不是太难了?



我最近在写五子棋游戏,模拟联众的五子棋界面。程序写了个开头。

如果谁有兴趣,可以报名加入。我可以对加入的朋友公开源代码。



代码用 C++ 和 Winapi32 写的,不要误解,此程序与MFC 无关。

编译环境为 VC 6.0。

想实现人人对战模式和人计对战模式。


自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2005-02-12 05:29
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
到昨天已经基本完成五子棋程序的人人对战模式,写地比较急,对效率考虑地肯定有不周到的地方。

接下来,我会用一个星期的时间来检测代码的安全性,和正确性以及高效,对于部分未实现的功能,添加新的代码。

这里好像不能上传文件了,所以有兴趣的可以通过email 向我索取执行代码和源代码。



这个五子棋程序可以说是刚刚拉开了序幕,我并不打算把它的界面做的太华翘,也不打算提供太复杂的功能,比如计时功能,比如环境设置等我都不提供了。



喜欢玩五子棋的朋友,一定清楚,当前最厉害的是黑石。写一款算力强劲的五子棋游戏程序是我的目标,还是那句话,如果有朋友愿意加入,可以联系。



记得当时有很多朋友,有意向开发项目,怎么现在都没人反映了呢??

这个程序开发之后,还有很多可以做。比如打飞机游戏,比如中国象棋,比如国际象棋。等等。

我想,学了C++,总要开发点什么吧,要不然,学了有啥用?

有兴趣的朋友一起来加入吧。

对于C++ 和 Winapi32 有问题的朋友,可以提出来,我会尽量予以答复,当然在我自己清楚地情况下。 即便毫无基础,也可以边看边学。

不过系统的学习C++ 很重要。


自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2005-02-15 01:50
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
windows programming 到底是什么? 是MFC? 还是C#? 还是其他的什么? C++ 对windows programming 的作用是什么?



Charles Petzold 写的Windows Programming  是彻彻底底 用C 和 Winapi 写的 windows  教学代码。

那么是不是 C++ 与windows Programming 无关了呢? 回答当然不是。

那么是不是 一提到 windows Programing  的 C++ 就是指 MFC? 回答是:不是。 MFC 提供了一种可能,
但不是必须,我们完全可以忘记 MFC.  我也确确实实打算将MFC 抛到九霄云外。Charles Petzold 已经向我们展示
如何用 C 和 winapi  来编写 windows 程序。那么再回到这个问题,如果不提及MFC,那么C++ 与windows
有什么关系呢?



我给大家举个例子大家就清楚了。如果你要画这样一个场景:成千上万个蚂蚁在那里爬动,你准备怎么做?如果你是C 程序员,你会告诉我,建立一个蚂蚁
struct , 然后在 WM_PAINT 的消息下 调用 某个
自己写的函数,来画那成千上万的蚂蚁。这样可以实现。当然还有其他的方案,比如调用资源文件,将那些事先画好的蚂蚁图,以一定单位时间祯数连续播放,这样
你便看到了那成千上万的蚂蚁。到现在都与 C++ 无关,或者说都与
对象化编程无关。但是我再提个问题,如何让蚂蚁在爬动中实现一定的指令,比如让他们互相交流,让他们向其他蚂蚁群发起进攻。显然这时你会感到,C
这时变得相对虚弱了。而C++ 就有了用武之地。

如果我们事先设计一个 蚂蚁class,  这个class 表征了蚂蚁的特性,也赋予了对蚂蚁的操作功能,比如画一个蚂蚁,比如蚂蚁的爬行,比如蚂蚁的彼此交流,比如的进攻,等等。



44 楼的那个小程序,画了两个图形,而这两个图形是两个 object.  也就是说,我们可以在程序中创立 Object,然后对 Object 操作从而实现我们的要求。



Winapi 结合 C++ 来编写 windows 程序是一个很好的方法。


自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2005-02-15 10:53
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
下面是这个五子棋程序的源代码,程序由3个文件组成,1个头文件和2个cpp 文件

当前基本可以实现人人对战模式,悔棋功能的代码还没写。

人机对战模式的代码也还没有写。


自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2005-02-18 22:17
快速回复:All about windows programming
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029196 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved