热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

1.MFC之前身win32编程简介

历史简介很久以前系统不是32位也不是64位而是16位,它们的界面和dos命令窗口几近相同(其实就是),没有美丽的窗口&#x

历史简介

很久以前系统不是32位也不是64位而是16位,它们的界面和dos命令窗口几近相同(其实就是),没有美丽的窗口,没有图形化界面,就只是黑乎乎的命令窗口,用键盘输入来实现控制,也压根没有鼠标这种东西,操作起来很是麻烦。直到32位系统windows95的出现,它的出现可谓开天辟地的大事变,友好的操作界面使得受众群体扩大到广大平民百姓,不需要背诵繁琐的命令语句,只用鼠标点击就可以实现各种操作,窗口化界面使得电脑有更多显示动能,实现超越文本的服务。windows95系统当然也就催生了win32程序的兴旺,这也是第一代程序员诞生的时期。随着win32编程的发展越来越多的对越来越多的代码量的反映使得各种win32编程框架出现,mfc就是其中之一,其余的桌面程序框架还有csharp,.net,qt等等。

DOS命令窗:
在这里插入图片描述

学习mfc先得了解win32。因为mfc可以说是win32程序编辑框架,但是平常的win32程序太复杂了,我们应该庆幸有越来越多的开发效率高的编程语言出现。废话不多说,几乎最小最短的代码先奉上,请过目:

#include "windows.h"LRESULT WndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
{switch (nMsg) {case WM_RBUTTONDOWN:{Beep(500, 203);break;}case WM_LBUTTONDOWN:Beep(1000, 200);}return DefWindowProc(hWnd, nMsg, wParam, lParam);
}
//定义WinMain函数
int WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
{WNDCLASS wc = { 0 };HWND hWnd = 0;MSG nMsg = { 0 };//定义窗口处理函数wc.style = CS_HREDRAW | CS_VREDRAW;wc.lpfnWndProc = (WNDPROC)WndProc;wc.cbClsExtra = 0;wc.cbWndExtra = 0;wc.hInstance = hInstance;wc.hIcon = NULL;wc.hCursor = NULL;wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);wc.lpszMenuName = NULL;wc.lpszClassName =L"Main";//注册窗口类RegisterClass(&wc);//创建窗口(在内存中创建)hWnd = CreateWindow(L"Main", L"hWnd", WS_OVERLAPPEDWINDOW, 100, 100, 500, 500, NULL, NULL, hInstance, NULL);//显示窗口ShowWindow(hWnd, SW_SHOW);//消息循环while (GetMessage(&nMsg, NULL, 0, 0)){//消息处理TranslateMessage(&nMsg);DispatchMessage(&nMsg);}return 0;
}

win32程序设计示例简介

【1】winmain函数是win32程序执行的开端就像是dos程序中的main函数

【2】win32程序中主要包含

(1)窗口的设计,c语言中没有类,对象,窗口是以结构体形式存在,给结构体的各个变量赋值其中包括窗口风格的型号,窗口大小,位 置,背 景颜色,窗口图标等等实现设计。
(2)窗口的注册和创建,窗口注册可以让系统完成窗口与消息处理函数的映射,让A窗口的消息交给A窗口的消息队列。创建使得窗口显示在我们的屏幕上。
(3)消息循环,在一个死循环中不断取得来自消息队列的消息
(4)消息处理函数,标明何种消息对应何种处理,属于回调函数,系统得知怎末处理后进行处理。

【3】Windows程序的运行是依靠外部的事件来驱动。换句话说,程序不断等待,等待任何可能的输入,然后做出判断,再做适当的处理。
系统接收客户的操作(事件),而后将各种复杂的事件以消息的形式传递给我们的程序,我们的程序再做出各种处理。这些处理当中的有一些是我们编辑完成,另外一些默认处理(框架本身自带的处理)即可我们不用碰。即使这样MFC开发工作量也不小。


推荐阅读
  • 使用C++编写程序实现增加或删除桌面的右键列表项
    本文介绍了使用C++编写程序实现增加或删除桌面的右键列表项的方法。首先通过操作注册表来实现增加或删除右键列表项的目的,然后使用管理注册表的函数来编写程序。文章详细介绍了使用的五种函数:RegCreateKey、RegSetValueEx、RegOpenKeyEx、RegDeleteKey和RegCloseKey,并给出了增加一项的函数写法。通过本文的方法,可以方便地自定义桌面的右键列表项。 ... [详细]
  • 本文介绍了在Windows系统上使用C语言命令行参数启动程序并传递参数的方法,包括接收参数程序的代码和bat文件的编写方法,同时给出了程序运行的结果。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文介绍了GTK+中的GObject对象系统,该系统是基于GLib和C语言完成的面向对象的框架,提供了灵活、可扩展且易于映射到其他语言的特性。其中最重要的是GType,它是GLib运行时类型认证和管理系统的基础,通过注册和管理基本数据类型、用户定义对象和界面类型来实现对象的继承。文章详细解释了GObject系统中对象的三个部分:唯一的ID标识、类结构和实例结构。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • C语言判断正整数能否被整除的程序
    本文介绍了使用C语言编写的判断正整数能否被整除的程序,包括输入一个三位正整数,判断是否能被3整除且至少包含数字3的方法。同时还介绍了使用qsort函数进行快速排序的算法。 ... [详细]
  • 如何在跨函数中使用内存?
    本文介绍了在跨函数中使用内存的方法,包括使用指针变量、动态分配内存和静态分配内存的区别。通过示例代码说明了如何正确地在不同函数中使用内存,并提醒程序员在使用动态分配内存时要手动释放内存,以防止内存泄漏。 ... [详细]
  • 本文介绍了使用Python解析C语言结构体的方法,包括定义基本类型和结构体类型的字典,并提供了一个示例代码,展示了如何解析C语言结构体。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
author-avatar
梦-回忆-记忆-梦_429
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有