`

win32程序封装

阅读更多

    在写win32程序时,若每次都从头开始写代码,真的太累了,用MFC框架比较容易,可它是怎么实现的却不知道,有些书中有介绍,看起来好复杂,如果能有自己的框架就好了,就像java,那样的话就能少记些API了,还是比较像java那样把所有代码都写到类里,最近在学游戏编程,如果每天写点这样的代码,说不定就出来个小型的游戏引擎呢

 

#ifndef _APPLICATION_
#define _APPLICATION_
#include "windows.h"

class CApplication
{
protected:
	HWND hwnd;//窗口句柄
	WNDCLASS wnd;//窗口类
	DWORD style;//窗口风格
	HICON hIcon;//窗口图标
	HMENU hMenu;//窗口菜单
	HCURSOR hCursor;//窗口光标
	int m_fullScreen;//是否是全屏
	int width;//窗口宽
	int height;
	int locX;//窗口位置X
	int locY;
	BOOL bActive;//窗口激活状态
	char* title;
	DWORD backGroundColor;//背景颜色
	

public:
	CApplication();
	void SetTitle(char* t);
	HWND CreateWin(HINSTANCE hInstance,char* winName,WNDPROC winProc);//创建窗口
	void SetStyle(DWORD s);
	void SetIcon(HICON hicon);//未实现
	void SetCursor(HCURSOR hcursor);
	void SetMenu(HMENU hmenu);
	void SetFullScreen(BOOL b);
	void SetBound(int x,int y,int width,int height);
	void SetSize(int width,int height);//设置窗口大小
	void SetBackGroudColor(DWORD bgc);//设置前景颜色
	void ShowWindow();//显示窗口
	int RunDefault();//主窗口消息循环
	virtual ~CApplication();
};

#endif

  

 

实现:

 

#include "Application.h"

CApplication::CApplication()
{
	title="程序";
	backGroundColor=BLACK_BRUSH;
	hCursor=::LoadCursor(0,IDC_ARROW);
	hIcon=::LoadIcon(0,IDI_APPLICATION);
	style=WS_OVERLAPPEDWINDOW;
	locX=0;
	locY=0;
	width=800;
	height=600;

	
}
CApplication::~CApplication(){}
HWND CApplication::CreateWin(HINSTANCE hInstance,char* winName,WNDPROC winProc)
{

	wnd.lpszClassName=winName;
	wnd.hInstance=hInstance;
	wnd.cbClsExtra=0;
	wnd.cbWndExtra=0;
	wnd.hbrBackground=(HBRUSH)GetStockObject(backGroundColor);
	wnd.hCursor=hCursor;
	wnd.hIcon=hIcon;
	wnd.lpfnWndProc=winProc;
	wnd.lpszMenuName=0;
	wnd.style=CS_VREDRAW|CS_HREDRAW;
	if(!::RegisterClass(&wnd)){
		MessageBox(0,"注册窗口出错!","error",0);
		return 0;
	}
	hwnd=::CreateWindow(
		winName,
		title,
		style,
		locX,
		locY,
		width,
		height,
		0,
		0,
		hInstance,
		0);

	return hwnd;
}
void CApplication:: SetStyle(DWORD s)
{
}
void CApplication:: SetIcon(HICON hicon)
{}
void CApplication:: SetCursor(HCURSOR hcursor)
{}
void CApplication:: SetMenu(HMENU hmenu)
{}
void CApplication:: SetFullScreen(BOOL b)
{}
void CApplication:: SetBound(int x,int y,int width,int height)
{}
void CApplication:: SetSize(int width,int height)
{}
void CApplication::SetTitle(char* t)
{
	title=t;
}
void CApplication:: SetBackGroudColor(DWORD bgc)
{
	backGroundColor=bgc;
}

void CApplication::ShowWindow()
{
	if(!hwnd)
	{
		MessageBox(0,"没有窗口要显示!","error",0);
		return;
	}

	::ShowWindow(hwnd,SW_SHOW);
}
int CApplication::RunDefault()
{
	MSG msg;
	while(::GetMessage(&msg,0,0,0))
	{
		::TranslateMessage(&msg);
		::DispatchMessage(&msg);
	}
	return (int)msg.wParam;
}

 

 

用例:

#include "windows.h"
#include "Application.h"
//回调函数,处理消息
LRESULT CALLBACK WindowProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
  )
{

	switch(uMsg)
	{
	case WM_DESTROY:
		::PostQuitMessage(0);
		break;
	default:
		return ::DefWindowProc(hwnd,uMsg,wParam,lParam);

	}
	return 0;
}

int WINAPI WinMain(
  HINSTANCE hInstance,      // handle to current instance
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,          // command line
  int nCmdShow              // show state
)
{
	CApplication a;
	a.CreateWin(hInstance,"sdfsdf",WindowProc);//创建窗口
	a.ShowWindow();//显示
	a.RunDefault();//消息循环
	return 0;
}

 

分享到:
评论

相关推荐

    将win32程序封装成MFC框架

    在学习了windows后继续MFC的学习,有必要知道win32程序是如何封装成MFC的,本程序对一个简单的win32程序实现封装,最终类似于MFC形式

    用C语言做Win32程序

    用C语言做Win32程序

    win32SDK简单封装(非thunk)第一版

    最近在研究win32的C++封装,MFC和WTL固然好用,但定制起来就不那么好定制了,为了自由操作,自己尝试写一些基础代码,当然,这也源于对mfc和WTL的借鉴,这是第一版,封装了普通类,以后再使用模板,慢慢完善

    vc win32 api tray program 托盘程序

    托盘程序大部分是用MFC 写的,本人不喜欢用哪个,所以api 结合前人的经验做了一个,希望对大家有帮助。 环境VS2005

    python程序封装为win32服务的方法

    本文实例为大家分享了python程序封装为win32服务的具体代码,供大家参考,具体内容如下 # encoding=utf-8 import os import sys import winerror import win32serviceutil import win32service import win32event ...

    AvAf WIN32 应用程序小型框架

    自己封装的一个 WIN32 SDK程序的小型应用程序框架,通过C++的封装性,继承性,多态性,将重复繁琐的SDK程序代码变得面向对象,简单,明了,清晰,SDK程序朋友的福音,也是学习C++基础只是的必备良品,觉得值得下载。...

    win7简明封装教程

    Windows 7和Vista及XP封装差不多,Windows 7也是调用sysprep.exe,不同的是应答文件在封装前就录入,不会在系统部署的时候在读取sysprep.ini这个文件了。 一、把下载好的镜像刻录成DVD,系统安装就不说了,很简单 ...

    win10封装软件

    十分方便的封装软件,很容易上手,简单设置即可,外加一些外置程序即可

    白手起家Win32SDK应用程序

    MFC并没有象Delphi的VCL类库,VB的控件库一样封装得让人几乎完全不用知道还有Win32API函数及其操作原理,所以要想利用VC6的MFC编程,我认为就一定要先学习如何直接用Win32API函数来编程。对API编程中的一些关键的...

    系统理解Win32 API和MFC.pdf

    Win32 API是微软的操作系统Windows提供给开发人员的编程接口,它决定了我们开发的Windows应用程序的能力。MFC是微软为开发人员提供的类库,在某种意义上是对Win32 API的封装。本文试图从全局角度对Win32 API和MFC...

    微PE3.0-32位原版封装Win10PE镜像

    官网下载超慢的,还是**网盘,这个是用wepe32位工具正常封装的Windows 10 PE,完全没有任何病毒,也没有修改,里面壁纸是自带的,包含Max Dos,没有密码。 官方解释: 微PE工具箱生成ISO镜像后也不会产生过多的文件...

    在C#程序设计中使用Win32类库

    在C#程序设计中使用Win32类库

    windows系统封装程序

    系统封装程序,使用于win 2003以下的版本

    VS2010用Win32开发新手模板

    本人根据教程编写的Win32项目模板,把winproc函数分解成多个函数,使用消息映射的方法来处理消息(具体操作请模仿我的代码)。  把WM_PAINT中使用的HDC句柄封装到CHDC类中,可以用这个类来完成画线,设置半透明等...

    python打包程序win7 win10下运行丢失api-ms-win-crt-runtime-l1-1-0.dll的解决方法

    python在wIn10下pyinstaller打包后运行正常,但是在win7 x64下运行则报错,提示 计算机丢失api-ms-win-crt-runtime-l1-1-0.dll的解决方法

    IPv6报文封装及地址生成程序.rar(含程序+源码 WIN32 C++)

    编程环境: 操作系统:Windows XP SP2 开发语言:C++ 编译环境:MS Visual C++6.0...两个程序均为控制台程序。 ipv6pkt程序的命令格式为:ipv6pkt tcpdata ipv6data ipv6tcp程序的命令格式为:ipv6tcp rawdata ipv6data

    WIN32下汇编语言程序设计PART3

    它不仅是汇编程序员的手册,也对那些想要了解WINDOWS操作系统底层东西的人非常有用,因为它里面除了讲汇编的语法外,主要是讲用汇编怎样实现各功能,由于汇编是没有被封装的语言所以给我们提供了了解系统底层的机会非常...

    Win32 纯SDK 使用Flash控件

    本例演示了如何在纯Win32 SDK程序里面使用Flash控件并播放一个swf影片。代码适合初学者使用,可以自己封装成一个类以便来日的使用。

    简单画图程序(基于Win32 sdk)

    本程序是一个简单的画图程序,代码中演示了如何只利用Win32 sdk完成一个画图的程序。本程序没有太多的技术框架,纯粹是Windows编程技术的探究,有兴趣的朋友可以下载看看。

Global site tag (gtag.js) - Google Analytics