学习目的

熟悉开发工具Visual C++ 6.0和MSDN 2001的使用. 应用Windows API函数, 手工编写具有最基本构成的Windows窗口应用程序(包含WinMain入口函数, 消息循环, 窗口函数), 并调试成功.

1.熟悉开发工具

熟悉开发工具visual studio的使用:

在visual studio中新建win32空项目

 

2.熟悉MSDN帮助的使用

练习使用MSDN查询windows相关函数信息

 

3. 应用Windows API函数, 手工编写具有最基本构成的Windows窗口应用程序(包含WinMain入口函数, 消息循环, 窗口函数)

程序代码如下:

#include
<windows.h>

#include<tchar.h>

 

LRESULT
CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); //窗口函数说明

 

//------------ 初始化窗口类----------------

int
WINAPI WinMain(HINSTANCE
hInstance, //WinMain函数说明

    HINSTANCE
hPrevInst,

    LPSTR
lpszCmdLine,

    int
nCmdShow)

{

    HWND hwnd;

    MSG Msg;

    WNDCLASS wndclass;

    TCHAR lpszClassName[] = _T("窗口"); //窗口类名

    TCHAR lpszTitle[] = _T("My_Windows"); //窗口标题名

 

    //窗口类的定义

    wndclass.style = 0; //窗口类型为缺省类型

    wndclass.lpfnWndProc = WndProc; //窗口处理函数为WndProc

    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 = lpszClassName;

    //窗口类名为"窗口示例"

 

    //--------------- 窗口类的注册 -----------------

    if (!RegisterClass(&wndclass)) //如果注册失败则发出警告声音

    {

        MessageBeep(0);

        return
FALSE;

    }

 

    //创建窗口

    hwnd = CreateWindow(lpszClassName, //窗口类名

        lpszTitle, //窗口实例的标题名

        WS_OVERLAPPEDWINDOW, //窗口的风格

        CW_USEDEFAULT,

        CW_USEDEFAULT, //窗口左上角坐标为缺省值

        CW_USEDEFAULT,

        CW_USEDEFAULT, //窗口的高和宽为缺省值

        NULL, //此窗口无父窗口

        NULL, //此窗口无主菜单

        hInstance, //创建此窗口的应用程序的当前句柄

        NULL); //不使用该值

 

    //显示窗口

    ShowWindow(hwnd, nCmdShow);

    //绘制用户区

    UpdateWindow(hwnd);

    //消息循环

    while (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_DESTROY:

        PostQuitMessage(0); //调用PostQuitMessage发出WM_QUIT消息

    default: //缺省时采用系统消息缺省处理函数

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

    }

    return (0);

}

编译并调试程序,

 

Windows窗口应用程序运行结果:

 

通过本次学习,熟悉了开发工具Visual C++ 6.0和MSDN 2001的使用.

通过应用Windows API函数, 手工编写Windows窗口应用程序了解了windows窗口应用最基本的构成:包含WinMain入口函数, 消息循环, 窗口函数……

第一个Windows窗口应用程序的更多相关文章

  1. 使用 WPF 开发一个 Windows 屏幕保护程序

    最近有小伙伴问我如何可以让 Windows 静置一段时间不操作之后,显示一个特殊的界面.我想了想,屏幕保护程序可以做到这一点,而且,屏幕保护程序的开发也是非常简单的. 本文将介绍如何为 Windows ...

  2. 我的第一个 Windows 窗口程序(1)

    一般来说,构建一个 Windows 程序可以分为如下几个步骤: 定义窗口类(WNDCLASS) 注册窗口类(RegisterClass) 创建窗口(CreateWindow) 更新显示窗口(Updat ...

  3. C++使用代码创建一个Windows桌面应用程序

    WinMain函数 Windows应用程序的唯一程序入口. 函数原型 int WINAPI WinMain { HINSTANCE hInstancem HINSTANCE hPreInstance, ...

  4. C# windows窗口应用程序切换主界面的显示内容

    不知道说清楚没有?就是我的窗口分为两部分,左边,控制部分,由一些按钮组成右边,显示部分,由些控件(如下拉,文本等等组成) 左边的每个按钮对应显示部分的页面,也就是说,左边换一个按钮点,那么右边就显示其 ...

  5. 使用PHP-GTK编写一个windows桌面应用程序

    PHP-GTK的下载地址:http://gtk.php.net/download.php?language=en-US, 猿哥选择了最新版本(beta版),可能有人会问我们为啥不选最新的stable版 ...

  6. C#第一个windows窗体应用程序

    Form1.cs using System; …… namespace self_1_1{ public partial class Form1 : Form { public Form1() { I ...

  7. 【转】Windows 窗口层次关系

    原文链接:undefined! 相信在Windows 下面编程的很多兄弟们都不是很清楚Windows 中窗口的层次关系是怎么样的,这个东西很久已经研究过一下,后来又忘记了,今天又一次遇到了这个问题,所 ...

  8. C#创建、安装一个Windows服务

    关于WIndows服务的介绍,之前写过一篇: http://blog.csdn.net/yysyangyangyangshan/article/details/7295739.可能这里对如何写一个服务 ...

  9. C#开发Windows窗体应用程序的步骤

    使用C#开发应用程序时,一般包括创建项目.界面设计.设置属性.编写程序代码.保存项目.程序运行等6个步骤. 1.创建项目 在Visual Studio2017开发环境中选择“文件”→“新建”→“项目” ...

随机推荐

  1. ObjectARX动态添加AutoCAD传统下拉菜单入门篇(一)

    ObjectARX动态添加传统下拉菜单入门篇 图文by edata  , 转载注明出处 http://www.cnblogs.com/edata AutoCAD 添加传统下拉菜单有很多种方式,比较典型 ...

  2. 从源码的角度再学「Thread」

    前言 Java中的线程是使用Thread类实现的,Thread在初学Java的时候就学过了,也在实践中用过,不过一直没从源码的角度去看过它的实现,今天从源码的角度出发,再次学习Java Thread, ...

  3. C#数组,List,Dictionary,IQueryable,IEnumerable的相互转换

    本篇文章会向大家实例讲述以下内容: 将数组转换为List 将List转换为数组 将数组转换为Dictionary 将Dictionary 转换为数组 将List转换为Dictionary 将Dicti ...

  4. yum安装软件所在目录的查询

    rpm -qa|grep 软件名 rpm -ql 上面语句返回的内容

  5. switch case执行顺序

    public class SwitchCase { public static void main(String[] args) { System.out.println(switchFun(4)); ...

  6. Java NIO学习与记录(五): 操作系统的I/O模型

    操作系统的I/O模型 在开始介绍NIO Reactor模式之前,先来介绍下操作系统的五种I/O模型,了解了这些模型,对理解java nio会有不小的帮助. 先来看下一个服务端处理一次网络请求的流程图: ...

  7. 【Alpha】任务分解与分配

    Alpha阶段总体任务规划 Alpha阶段我们的任务主要是恢复原先项目的代码运行,并增加一部分物理实验(二)的内容以及完善之前项目未完成的功能,例如后台管理及用户管理界面.在恢复项目部分的主要工作是将 ...

  8. (六)Audio子系统之AudioRecord.release

      在上一篇文章<(五)Audio子系统之AudioRecord.stop>中已经介绍了AudioRecord如何暂停录制,接下来,继续分析AudioRecord方法中的release的实 ...

  9. JS实现值复制

    在JS中对象一般都是传地址,后续修改也会影响原始数据.例如这样. var a={ b:"b" }; var c=a; c.b="c"; console.log( ...

  10. Neo4j使用简单例子(转)

    Neo4j Versions Most of the examples on this page are written with Neo4j 2.0 in mind, so they skip th ...