Windows API 傻瓜入门之一

本文介绍了WindowsAPI的基础概念及其重要性,并通过一个简单的示例程序详细展示了如何使用VC++2005创建基于WindowsAPI的应用程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先说一些废话(不感兴趣的童鞋可以无视):

 

先自我介绍下吧,我叫RAZOR 来自北邮,今年研一。大学期间由于时兴JAVA,而对C++接触很少。后来进入实验室,被迫开始学Windows编程。一直苦于没有老师和一本像样的参考书,可能我这种情况的童鞋不占少数。在书店挑了半天,挑了一本精通Windows程序设计,结果感觉并不如意,里面对WindowsAPI的讲解过于泛泛,用两章就糊弄过去了,当然想写一本包罗万象又面面俱到的书实在不是一件易事。这种书基本只能当一个提纲来看,里面的血肉还要自己来摸索和补充。那么用什么补充呢?MSDN。MSDN就像一本超大的词典,我们总能从里面找到想要的东西。

 

很多童鞋问有了MFC,为什么我们还要学WindowsAPI呢?

 

MFC并不是一种对WindowsAPI的封装,我们可以想象Windows编程是一个宏大的建筑,MFC是那些现成的柱子,梁,房顶,而我们想盖一个建筑,光有柱子,梁,房顶是不行的,所以我们需要WindowsAPI。而我们想把这个建筑盖的越高,我们更需要稳固而庞大的地基我们需要对一砖一瓦都了如指掌。这是我们一定要学好WindowsAPI的原因。

 

学了JAVA的GUI构件,再来学WindowsAPI,感觉WindowsAPI确实有点变态,我们仿佛在用沙子搭建世界。但就因为我们用的是沙子,所以我们拥有更多的变化和可能。Enjoy it!

 

下面转入正题:

 

什么是WindowsAPI?

 

我对WindowsAPI的理解很简单,从实体方面看,他就是我们电脑里那些.dll文件。从功能上看正是我们的WindowsAPI构建了我们屏幕上这些形形色色可视的东西,如果没有WindowsAPI我们只能用命令行了。。我们用VC++可以直接调用这些API就像调用我们的C库一样简单。

 

WindowsAPI 有Win16API 和Win32API,从WindowsNT开始,现在的操作系统已经都用的是Win32API了,所以初学的话基本不用管它门的区别。只要学好Win32API就好了。

 

建立第一个程序:

 

我的程序都是基于VC++ 2005如果有童鞋用其他的版本大同小异

 

首先新建工程,选择空工程

起好名字,ok.

 

这时我们右键点击Source Files文件夹,add, New Item,在Source Files文件夹中添加一个cpp文件,如图所示。

随便取个名字,ok。

 

现在,我们把以下代码黏贴进新建的cpp文件的代码栏内:

 

#include <Windows.h>

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

int APIENTRY WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd )
{
    WNDCLASSEX wndclass;
    HWND hwnd;
    MSG msg;

    wndclass.cbSize=sizeof(WNDCLASSEX);
   
    wndclass.style=CS_HREDRAW|CS_VREDRAW;
    wndclass.cbClsExtra=0;
    wndclass.cbWndExtra=0;
    wndclass.hInstance=hInstance;
    wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
    wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
    wndclass.lpszMenuName=NULL;
    wndclass.lpszClassName="Chap1Exa2";
    wndclass.lpfnWndProc=WndProc;
    wndclass.hIconSm=NULL;

    if(!RegisterClassEx(&wndclass)) return FALSE;
    hwnd= CreateWindow("Chap1Exa2","Chap1Exa2",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
    ShowWindow(hwnd,nShowCmd);
    UpdateWindow(hwnd);

    while (1)
    {
        GetMessage(&msg,NULL,0,0);
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;

}

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
    case WM_PAINT:
        HDC hdc;
        PAINTSTRUCT ps;
        hdc = BeginPaint(hwnd, &ps);
        TextOut(hdc, 20, 60, "The first", 20);
        EndPaint(hwnd,&ps);
        return 0;
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc(hwnd,message,wParam,lParam);
}

 

按F7build通过,然后按F5Debug。

如果Debug出现b inary was not built with debug information 误请参考:

 

Its not an installation issue, the problem is, as the error message suggests, that you have not built your project with debug information.

To do this:
1) Goto Project->Properties
2) Make sure "Configuration" at the top is "Debug"
3) On the left, select "C/C++", then "General"
4) On the right, change "Debug information format" to "Program Database for edit and continue (/ZI)"
5) On the left, Select "Optimization"
6) On the right, Change "Optimization" to "Disabled (/Od)"
7) On the left, select "Code Generation"
8) On the right, change "Runtime library" to "Multi-Threaded Debug (/MTd)"
9) On the left, expand "Linker" and select "Debugging"
10) On the right, change "Generate Debug info" to "Yes (/DEBUG)"
11) Rebuild your project. 

 

如果没有问题将出现以下界面:

 

好了,我们第一个程序就完成了,在下面的章节中我将系统介绍每个函数具体的含义,和传说中的消息系统的运作。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值