学习目的

熟悉开发工具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. acedSSSetFirst选择集夹点亮显实例

    ads_name ss; //执行预选 好像可以无视PICKSTYLE变量 if (RTNORM != acedSSGet(_T("I"),NULL,NULL,NULL,ss)) ...

  2. hadoop1.0.4运行程序出现“Java heap Space”错误

    根据虾皮博客中教程,成功搭建了一个12台电脑的Hadoop云平台,而且成功运行了软件自带的wordcount程序,处理10M数据. 但是当程序处理40M时候,却出错了.出错提示“Java Heap S ...

  3. Oracle数据库PL/SQL那点事情---修改过电脑的用户名

    在安装Oracle数据库的PL/SQL工具时候,电脑名称是重装系统后自动生成的用户名名称,作为程序员,有很强的强迫症,就想利用自己的英文名称作为自己电脑的名称,所以就修改了电脑的名称:结果PL/SQL ...

  4. XMPPFramework核心类介绍

    XMPPFramework结构 在进入下一步之前,先给大家讲讲XMPPFramework的目录结构,以便新手们更容易读懂文章.我们来看看下图: 虽然这里有很多个目录,但是我们在开发中基本只关心Core ...

  5. java 实用Util汇总

    1.Util介绍 Util是工具的意思,一般来说,常常用来描述和业务逻辑没有关系的数据处理. Util一般要和私有方法对比:私有方法一般来说是只是在特地场景下使用的,私有方法越多,代码结构越乱.常见的 ...

  6. xshell本地上传文件至服务器

    今天本地写了个项目,想传到服务器部署起来.就上网百度了一下挺多的,一个个记录下,如有雷同,纯属抄袭. lrzsz方法 rz # 检查是否安装 yum -y install lrzsz # 安装 rpm ...

  7. java transient 和Volatile关键字

    Volatile修饰的成员变量在每次被线程访问时,都强迫从主内存中重读该成员变量的值.而且,当成员变量发生变化时,强迫线程将变化值回写到主内存.这样在任何时刻,两个不同的线程总是看到某个成员变量的同一 ...

  8. Mono for Android - LocationServices not working

    Hi,I have the following code in my location activity.(this code was copied from Xamarin's Location S ...

  9. 【编程技术-Shell】AWK使用大全

    1.  AWK中输出特殊字符 输出单引号 涉及到转义字符,但是在使用普通的方法进行转义时,会遇到下面的问题 正确的方法:'\'',使用单引号将转义字符括起来,然后后面加上单引号 输出其他特殊字符 输出 ...

  10. ANR机制

    1.什么是ANR(Application Not Responding) 在Android中,应用程序的响应性是由ActivityManager和WindowManager系统服务监视的.当监测到以下 ...