学习目的

熟悉开发工具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. SQL注入不简单?那是你没有懂它的原理~

    我们真的了解SQL注入吗? 不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏 ...

  2. 线程池(Linux实现)

    讨论QQ群:135202158 本文技术参考了sourceforge项目c thread pool,链接:http://sourceforge.net/projects/cthpool/ 线程池如上一 ...

  3. Linux 下的 netfilter 认识与常规操作

    Linux 下的 netfilter 认识与常规操作 前言 博客写到今天,1年7个月.可是包含所有写作经历,这个时间线可以达到三年. 上次更新了一篇 "镇站之宝" ,也是本站阅读量 ...

  4. leetcode-40-组合总和 II

    题目描述: 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合中只 ...

  5. ArrayList集合与List与数组的区别

    import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.Lis ...

  6. openproject安装与使用

    思路: 1.生成config配置文件 2.导出配置文件,修改配置文件,删除容器,重新部署容器 3.登录后配置, 4.配置git,可以从openproject里查看gitlab上的代码库 第一次安装: ...

  7. 【APUE】第3章 文件I/O (1)

    1.文件描述符 对于内核来说,所有打开的文件都通过文件描述符来引用.文件描述符是一个非负整数.当打开一个现有的文件或者创建一个新文件时,内核向进程返回一个文件描述符.当读.写一个文件时,使用open或 ...

  8. 阿里云 下载的 apache 证书 转换为 pcks8 证书

    第一步: 百度 搜索  rsa 转 pcks8 将 .key 文件 转换成 pcks8.key . 第二部: 将 chain.crt 的 内容 复制到 public.crt 下方.. 新的 publi ...

  9. FJWC2019 全连

    题目描述 有n个音符,第i个音符会在第i个时刻来临 令第 i 个音符的准备时间为 ti​ 个单位时间,如果选择去点击第 i 个音符,那么就没法点击所有到来时刻在 (i−ti​ ,i+ti​)中的音符. ...

  10. CF1083(Round #526 Div. 1) 简要题解

    题目链接 https://codeforces.com/contest/1083 简要题目翻译 题解 A. The Fair Nut and the Best Path 可以忽略掉"任意时刻 ...