windows应用程序框架及实例
应用程序框架:
同一类型应用程序的结构大致相同,并有很多相同的源代码,
因此可以通过一个应用程序框架AFX(Application FrameWorks)
编写同一类型应用程序的通用源代码。
主要向导:
Datebase Project:创建数据库项目
MFC ActiveX Control Wizard:创建基于MFC的ActiveX控件
MFC AppWizard[dll]:创建基于MFC的动态链接库
MFC AppWizard[exe]:创建基于MFC的应用程序(最常用)
New Database Wizard:在SQL服务器上创建一个SQL Server数据库
Win32 Application:创建Win32应用程序,可不使用MFC,采用SDK方法编程
Win32 Console Application:创建DOS下的Win32控制台应用程序,
采用C++或C语言进行编程
Win32 Dynamic-link Library:创建Win32动态链接库,采用SDK方法
Win32 Static Library:创建Win32静态链接库,采用SDK方法
引入应用程序向导的目的:为了避免程序员重复编写代码。
区别于DOS程序,即使一个简单的Windows程序:
它也必须显示一个程序运行窗口,需要编写复杂的程序代码。
而同一类型应用程序的框架窗口风格是相同的,如相同的菜单栏、工具栏、
状态栏和用户区。
基本菜单命令的功能也是一样的,如相同的文件操作和编辑命令。
编写一个实现具体功能的MFC应用程序的步骤:
★根据应用程序特性在MFC AppWizard[exe]应用程序向导各步骤对话框中进行选择,
创建一个应用程序的框架。
★利用资源编辑器为程序编辑或添加资源,如编辑菜单、添加对话框等。
★利用ClassWizard类向导或手工添加类、成员变量和成员函数的声明。
★根据需要编写具体的函数代码。
★编译、链接程序。如果程序有语法错误,需要修改源程序。直到没有编译、链接错误,
才能得到可执行程序。
★测试应用程序各项功能,如果程序没有实现程序设计所要求的功能,启动Debug调试器
进行调试,找出并修改程序设计中的逻辑错误。
我们可以为Visual C++ MFC编程作一个形象的总结:
◇MFC应用程序框架使我们的程序设计工作犹如做填充题。
◇Developer Studio中的集成工具使我们的程序设计工作犹如做选择题,
程序员犹如软件集成装配车间里的技术工人。
Visual C++中通用的文件类型
后缀 类型 说明
dsw 工作区文件 将项目的详细情况组合到工作区中
dsp 项目文件 存储项目的详细情况并替代mak文件
h C++头文件 存储类的定义代码
cpp C++源文件 存储类的成员函数的实现代码
rc 资源脚本文件 存储菜单、工具栏和对话框等资源
rc2 资源文件 用来将资源包含到项目中
ico 图标文件 存储应用程序图标
bmp 位图文件 存储位图
clw 类向导文件 存储ClassWizard类向导使用的类信息
MFC中资源标识符前缀
标识符前缀 说明
IDR_ 主菜单、工具栏、应用程序图
标和快捷键表
IDD_ 对话框
IDC_ 控件和光标
IDS_ 字符串
IDP_ 提示信息对话框的字符串
ID_ 菜单命令项
应用程序举例:
例1:创建应用程序框架。
本例的目的在于说明创建Windows应用程序的方法及过程
//包含应用程序所需的数据类型和数据结构的定义
#include <windows.h> LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);//窗口函数说明 //----------------------以下初始化窗口类-------------------------
int WINAPI WinMain
(
HINSTANCE hInstance,
HINSTANCE hPrevInst,
LPSTR lpszCmdLine,
int nCmdShow
)
{
HWND hw
nd;
MSG Msg;
WNDCLASS wndclass;
char lpszClassName[] = "窗口"; //窗口类名
char lpszTitle[] = "My_windows"; //窗口标题名 //------------------窗口类的定义---------------------------
wndclass.style=; //窗口类型为缺省类型
wndclass.lpfnWndProc=WndProc; //定义窗口处理函数
wndclass.cbClsExtra=; //窗口类无扩展
wndclass.cbWndExtra=; //窗口实例无扩展
wndclass.hInstance=hInstance; //当前实例句柄
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
//窗口的最小化图标为缺省图标
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW) ;
//窗口采用箭头光标
wndclass.hbrBackground=GetStockObject(WHITE_BRUSH);
//窗口背景为白色
wndclass.lpszMenuName=NULL; //窗口中无菜单
wndclass.lpszClassName=lpszClassName ; //窗口类名为"窗口" //------------------以下进行窗口类的注册------------
if(!RegisterClass(&wndclass))//如果注册失败则发出警告
{
MessgaeBeep();
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,,))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
} //消息循环结束即程序终止时将消息返回操作系统
return Msg.wParam;
} //---------------------------------窗口函数--------------------
LRESULT CALLBACK WndProc
( HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam
) {
switch(message)
{
case WM_DESTROY:
PostQuitMessage();//调用PostQuitMessage发出VM_QUIT消息
default: //缺省时采用系统消息缺省处理函数
return DefWindowProc(hwnd,message,wParam,lParam);
}
return();
}
windows应用程序框架及实例的更多相关文章
- Directx11 教程(2) 基本的windows应用程序框架(2)
原文:Directx11 教程(2) 基本的windows应用程序框架(2) 在本教程中,我们把前面一个教程的代码,进行封装.把初始化函数,Run函数,窗口回调函数,ShutdownWind ...
- Directx11 教程(1) 基本的windows应用程序框架(1)
原文:Directx11 教程(1) 基本的windows应用程序框架(1) 在vs2010中,建立一个新的win32工程,名字是: myTutorialD3D11, 注意:同时勾选Cr ...
- 《ArcGIS Engine+C#实例开发教程》第一讲桌面GIS应用程序框架的建立
原文:<ArcGIS Engine+C#实例开发教程>第一讲桌面GIS应用程序框架的建立 摘要:本讲主要是使用MapControl.PageLayoutControl.ToolbarCon ...
- 05 Windows编程——Windows程序框架
源码 #include<Windows.h> LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARA ...
- windows应用程序单实例
前言 这才第几天博客就跟不上了,看来一天一篇博客的目标还是有点大,写博客还是挺费时间的,写了不满意删,删完再写...直到自己没了耐心.今天先写个前言,实质性的内容明天再补吧.今天一天的收获还是挺多的, ...
- WCF寄宿(Host)之自我寄宿(Self-Hosting)简单实例【Windows应用程序宿主】
前言: 以各种应用程序做自我寄宿的宿主原理方法大同小异,故:这儿直接上案例! 步骤一:创建服务契约和服务 1.新建解决方案:添加WCF服务库项目. 2.为了演示,我把自动生成的接口以及实现接口的类删 ...
- MFC应用程序框架入门(转)
1 MFC概述 顾名思意,MFC应用程序框架是以MFC作为框架基础的,以此程序框架模式搭建起来的应用程序在程序结构组织上是完全不同于以前的Win32 SDK编程方式的.自20世纪90年代初问世以来,M ...
- 使用C语言编写windows服务一般框架
原文:使用C语言编写windows服务一般框架 编写windows服务和编写windows应用程序一样,有一些回调函数必须填写且向windows 服务管理器(service manager)进行注册, ...
- Microsoft Orleans构建高并发、分布式的大型应用程序框架
Microsoft Orleans 在.net用简单方法构建高并发.分布式的大型应用程序框架. 原文:http://dotnet.github.io/orleans/ 在线文档:http://dotn ...
随机推荐
- MongoDB 分片集群技术
在了解分片集群之前,务必要先了解复制集技术! 1.1 MongoDB复制集简介 一组Mongodb复制集,就是一组mongod进程,这些进程维护同一个数据集合.复制集提供了数据冗余和高等级的可靠性,这 ...
- array_slice()函数造成的一次sql注入
HDwiki6.0 sql注入 下载连接http://kaiyuan.hoodong.com/download/ 漏洞出现在\control\edition.php的docompare()函数 !de ...
- [译]Ocelot - Load Balancer
原文 可以对下游的服务进行负载均衡. 提供了下面几种负载均衡: LeastConnection - tracks which services are dealing with requests an ...
- [译]Ocelot - Headers Transformation
原文 Add to Request 为上游请求添加请求头,只需如下一样将下面的配置添加到一个ReRoute里: "UpstreamHeaderTransform": { " ...
- MySQL学习3 - 数据表的操作
本节掌握 一.存储引擎(了解) 二.mysql支持的存储引擎 1.InnoDB 存储引擎 2.MyISAM 存储引擎 3.NDB 存储引擎 4.Memory 存储引擎 5.Infobright 存储引 ...
- 【译】索引进阶(六):SQL SERVER索引书签
[译注:此文为翻译,由于本人水平所限,疏漏在所难免,欢迎探讨指正] 原文链接:传送门. 在之前的章节,我们把索引看做一组有序条目的集合,每行数据对应一个索引条目.我们解释了很多关于索引逻辑方面的内容, ...
- mycat 测试主从读写分离
下载解压及创建用户组和目录属性 下载地址:1.https://github.com/MyCATApache/Mycat-download.2.http://dl.mycat.io/ wget http ...
- 51nod--1006 最长公共子序列Lcs (动态规划)
题目: 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdkscab ab是两个串的子序列,abc也是,abca也是,其中abca是这两个 ...
- QPS/TPS/并发量/系统吞吐量概念和公式
1.概念 我们在日常工作中经常会听到QPS/TPS这些名词,也会经常被别人问起说你的系统吞吐量有多大.一个系统的吞度量(承压能力)与request对CPU的消耗.外部接口.IO等等紧密关联,单个req ...
- 【原创】大叔经验分享(16)Context namespace element 'component-scan' and its parser class [org.springframework.context.annotation.ComponentScanBeanDefinitionParser] are only available on JDK 1.5 and higher
今天尝试运行一个古老的工程,配置好之后编译通过,结果运行时报错: org.springframework.beans.factory.BeanDefinitionStoreException: Une ...