学习目的

熟悉开发工具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. P5282 【模板】快速阶乘算法(多项式运算+拉格朗日插值+倍增)

    题面 传送门 前置芝士 优化后的\(MTT\)(四次\(FFT\)) 题解 这里有多点求值的做法然而被\(shadowice\)巨巨吊起来打了一顿,所以来学一下倍增 成功同时拿到本题最优解和最劣解-- ...

  2. WC2019 全国模拟赛第一场 T1 题解

    由于只会T1,没法写游记,只好来写题解了... 题目链接 题目大意 给你一个数列,每次可以任取两个不相交的区间,取一次的贡献是这两个区间里所有数的最小值,求所有取法的贡献和,对 \(10^9+7\) ...

  3. combining-filters

    The previous two examples showed a single filter in use. In practice, you will probably need to filt ...

  4. 知名协作工具 Slack 换新 logo 啦!

    简评:本文系译文.Slack 在自家 Blog 上解释了新的设计 -- 旧版的 logo 有 11 种颜色,在非白色背景的情况下,logo 不仅难看,而且很容易在多个地方上表现不一致. 新年换新装,S ...

  5. iOS几个功能:1.摇一摇;2.震动;3.简单的摇动动画;4.生成二维码图片;5.发送短信;6.播放网络音频等

    有一个开锁的功能,具体的需求就类似于微信的“摇一摇”功能:摇动手机,手机震动,手机上的锁的图片摇动一下,然后发送开锁指令.需求简单,但用到了许多方面的知识. 1.摇一摇 相对这是最简单的功能了. 在v ...

  6. ubuntu16.04 安装 mysql-level

    ubuntu16.04 安装 mysql-level 1.下载 mysql-level(直接去官网下载rpm包,我的mysql-server是5.7.9.你下载自己对应的就可以了) 下载连接 2.rp ...

  7. H01-Linux系统中搭建Hadoop和Spark集群

    前言 1.操作系统:Centos7 2.安装时使用的是root用户.也可以用其他非root用户,非root的话要注意操作时的权限问题. 3.安装的Hadoop版本是2.6.5,Spark版本是2.2. ...

  8. PHP获取时间比实际时间少8小时的问题

    有两方法 1.我们写PHP程序在获取时间时,人为加上8小时(这种方法是最实用也是最土的方法) 2.如果直接获取正确时间,也可修改PHP的配置文件,即查找php.ini文件 修改方法:在php.ini文 ...

  9. Mac 10.12常用软件清单

    链接: https://pan.baidu.com/s/1slds1OD 密码: 7m5t 配套教程:http://www.cnblogs.com/EasonJim/tag/mac/ 如果失效了,联系 ...

  10. spring中排除某个类

    在spring中可能需要排除某个类,做法是在spring配置文件中加入如下配置 <context:component-scan base-package="com.ias" ...