学习目的

熟悉开发工具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. LOJ#3083. 「GXOI / GZOI2019」与或和(单调栈)

    题面 传送门 题解 按位考虑贡献,如果\(mp[i][j]\)这一位为\(1\)就设为\(1\)否则设为\(0\),对\(or\)的贡献就是全为\(1\)的子矩阵个数,对\(and\)的贡献就是总矩阵 ...

  2. Jmeter非GUI运行,生成html报告

    一.JMete执行方式 JMeter执行方式有2种,一种是GUI模式,一种是非GUI模式.GUI模式就是界面模式,非GUI模式就是命令行模式.界面模式主要用来编写和调试脚本用的,项目的真正执行最好是采 ...

  3. 【vim】正常模式下的一般操作

    正常模式一般用于浏览文本,其实也就是通过键盘命令让光标在文本中跳来跳去,在任何模式下按一次或两次<Esc>会进入正常模式. 基本思想 vim对光标的定位操作非常精确和高效,这是它的一个非常 ...

  4. 关于字典的几个类--defaultdict,OrderedDict, zip()

    一.  1个键对应多个值 比如:d = {'a' : [1, 2, 3],  'b' : [4, 5]},可以使用 collections 模块中的 defaultdict 来构造这样的字典 from ...

  5. 数据分析:pandas 基础

    pandas 是基于 Numpy 构建的含有更高级数据结构和工具的数据分析包 类似于 Numpy 的核心是 ndarray,pandas 也是围绕着 Series 和 DataFrame 两个核心数据 ...

  6. 架构师养成记--32.Redis高级(安全 主从复制)

    Redis高级命令及特性 keys * 返回满足的所有键值(*表示模糊匹配) exists 是否存在指定的key(返回1表示存在,0表示不存在) expire 设置某个key的过期时间,使用ttl查看 ...

  7. 【性能测试】:JVM内存监控策略的方法,以及监控结果说明

    JVM内存监控主要在稳定性压测期间,监控应用服务器内存泄露等问题: [JVM远程监控设置] 1.打开WAS控制台:https://ip:port/ibm/console/login.do 2.进入路径 ...

  8. MongoDB ver 4 几个常用命令

    1. 为某个数据库创建用户: use db_test1; db.createUser({ user:"test_user_1", pwd:"test_user_1_pwd ...

  9. 剑指offer——面试题30:包含min函数的栈

    #include"iostream" #include"stdio.h" using namespace std; ; ; template<typena ...

  10. 用Docker构建分布式Redis集群

    [编者的话]本文介绍了如何使用Docker搭建Redis集群,很多读者都在问Docker能带来哪些实质性的好处,我想本文就是一个很好的例子.不使用Docker你也可以搭建Redis集群,那使用Dock ...