建立MFC窗口
- 博客分类:
- 技术杂绘
建立MFC窗口
2011年03月15日
【转】http://hi.baidu.com/lmhopen/blog/item/0282dccbdbbb f21bbf09e62f.html
三种建立OpenGL窗口的方法,
一种是win32 sdk加OpenGL函数,这种方法写起来极其麻烦,很是繁琐,
第二种把建立OpenGL环境所用到的OpenGL函数写成一个小类,然后用win32 sdk加OpenGL类的方式建立OpenGL窗口,这种方法比前一个方法简洁清晰了点,不过还是感觉繁琐.
第三种方法用MFC编程建立OpenGL窗口,这种方法我最推崇.因为首先用MFC建立windows窗口方便简洁.其次可以考虑把要用到的OpenGL函数编成一个类,这样用起OpenGL来更是简洁方便了.
我现在手头有这三种代码,但我以后主要用MFC来写OpenGL程序,下边把如何用MFC建立一个最基本的OpenGL窗口贴出来.
首先是头文件:
// smotri.h
// smotri - Simple MFC, C++, OpenGL Tutorial Program
// by: Joel Parris
// date: 10/9/2000
#include // MFC Windows include file
#include // OpenGL include file
#include // OpenGL Utilities include file
#include
class CSmotri: public CWinApp
{
public:
virtual BOOL InitInstance();
};
class COpenGLWindow: public CFrameWnd
{
public:
COpenGLWindow(); // COpenGLWindow Class Constructor
~COpenGLWindow(); // COpenGLWindow Class Constructor
HDC m_hgldc; // GDI Device Context
HGLRC m_hglRC; // Rendering Context
BOOL SetPixelformat(HDC hdc);
void GetGLInfo();
int DrawGLScene(void);
int InitGL(void);
void ReSizeGLScene(int width, int height);
//virtual BOOL PreCreateWindow( CREATESTRUCT& cs );
protected:
afx_msg void OnPaint();
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnSize(UINT nType, int cx, int cy );
afx_msg BOOL OnEraseBkgnd( CDC* pDC );
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
DECLARE_MESSAGE_MAP()
};
然后是CPP文件:
// smotri - Simple MFC, C++, OpenGL Tutorial Program
// by: Joel Parris
// date: 1/21/2001
#include "smotri.h"
//#include "timer.h"
CSmotri Smotri; // Instantiate the Smotri application
////////////////////////////////////////////////// //////////////////
// CMyApp Member Function
BOOL CSmotri::InitInstance() // Initialize Smotri
{
m_pMainWnd = new COpenGLWindow;
// m_nCmdShow = SW_SHOWMAXIMIZED; // Comment to UnMaximize the Window
m_pMainWnd -> ShowWindow(m_nCmdShow);
m_pMainWnd -> UpdateWindow();
return true;
}
////////////////////////////////////////////////// //////////////////
// COpenGLWindow message map and Member functions
BEGIN_MESSAGE_MAP(COpenGLWindow, CFrameWnd)
ON_WM_PAINT()
ON_WM_CREATE()
ON_WM_SIZE()
ON_WM_ERASEBKGND()
ON_WM_KEYDOWN()
END_MESSAGE_MAP()
COpenGLWindow::COpenGLWindow()
{
Create( NULL, _T("Smotri - a Simple MFC OpenGL Application"),
WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | CS_OWNDC);
//ModifyStyle(WS_CAPTION, 0, SWP_FRAMECHANGED);
}
COpenGLWindow::~COpenGLWindow()
{
wglMakeCurrent(NULL,NULL);
wglDeleteContext(m_hglRC);
}
/*BOOL COpenGLWindow::PreCreateWindow( CREATESTRUCT& cs )
{
if(!CFrameWnd::PreCreateWindow(cs))
return FALSE;
// Set the initial size of the window
cs.cx = 550;
cs.cy = 400;
return TRUE;
}*/
BOOL COpenGLWindow::OnEraseBkgnd( CDC* pDC )
{
/* This overrides the MFC Message Loop's OnEraseBkgnd(), which
keeps the OpenGL window from flashing. I shouldn't tell you
this but contrary to popular opinion it doesn't matter what this
override returns TRUE or FALSE. If you don't believe me, try it
for yourself.
*/
return TRUE;
}
void COpenGLWindow::OnSize(UINT nType, int cx, int cy )
{
ReSizeGLScene( cx, cy );
}
void COpenGLWindow::OnPaint()
{
CPaintDC dc(this); // Needed
//QueryPerformanceFrequency(&timerFrequency); // Initialize timer
//QueryPerformanceCounter(&startCount); // Start timer
// process block
int imax = 100;
for (int i = 1; i 属性->链接器->输入->附加依赖项 中导入相关的lib)
基本步骤就是:
1创建一个windows窗口.
2在OnCreate函数中创建和设置OpenGL环境.
3在OnSize函数中设置OpenGL窗口跟着windows窗口自动调整大小
4在OnPaint函数中使用OpenGL的作图命令,用swappbuffers把图形显示出来
5设置空的onerasebkgnd函数返回TRUE,目的是防止窗口闪烁.
6在窗口类的析构函数中释放环境描述表DC和着色描述表RC,删除RC
基本上用其它方法编OpenGL程序也得是这样的步骤,
发表评论
-
11July2010-31July2010
2012-01-20 02:05 66711July2010-31July2010 2010年08月 ... -
为项目开发做嫁衣――Seam项目开发环境的搭建
2012-01-20 02:05 781为项目开发做嫁衣――Seam项目开发环境的搭建 2010年0 ... -
Visual Studio安装项目学习笔记
2012-01-20 02:05 761Visual Studio安装项目学习笔记 2010年07月 ... -
AndroidVirtual Devices (AVD)创建、设置
2012-01-20 02:05 1024AndroidVirtual Devices (AVD)创建、 ... -
诺基亚5530XM
2012-01-19 09:55 938诺基亚5530XM 2010年12月26 ... -
电脑常用软件集合及扫盲
2012-01-19 09:55 1084电脑常用软件集合及扫 ... -
诺基亚S40系统手机使用技巧大全(此乃刘某整理)
2012-01-19 09:55 955诺基亚S40系统手机使用 ... -
多普达S900 使用详细说明(使用技巧大全)
2012-01-19 09:55 977多普达S900 使用详细说 ... -
2012-1-2
2012-01-17 02:25 7062012-1-2 2012年01月02日 SONY Ve ... -
扩展VMware虚拟机硬盘大小
2012-01-17 02:25 1382扩展VMware虚拟机硬盘大 ... -
一个简单的NT驱动之驱动入口函数(DriverEntry)
2012-01-17 02:25 730一个简单的NT驱动之驱动入口函数(DriverEntry) ... -
慢慢研究
2012-01-17 02:25 659慢慢研究 2011年12月24日 ... -
构建高性能Web环境(linux-nginx-mysql-php-fastcgi)
2012-01-15 22:03 866构建高性能Web环境(linux-nginx-mysql-ph ... -
蛾的本本,
2012-01-15 22:03 489蛾的本本, 2012年01月12日 电脑型号 戴尔 ... -
Do it
2012-01-15 22:03 544Do it 2011年12月10日 网站开发工程师 申请 ...
相关推荐
VS2010和Opencv2.4.4完美运行
本代码 根据两个BMP位图 建立了一个 自定义的MFC窗口, 程序运行后 只显示一架漂亮的直升机(镂空的), 鼠标点击直升机区域能拖动窗口, 下载绝不后悔!
MFC程序的初始化过程.MFC也是个Windows程序,有窗口注册操作,有窗口产生操作,有消息循环,也有窗口函数。在这里,我想为大家建立一下MFC程序初始化过程的流程。使大家对MFC有个比较深入的认识。这些函数什么正经事...
本例中,首先为主窗口的两个Edit建立CString型关联变量m_Text1和m_Text2, 然后在两个按钮的消息映射函数中分别加入: CSubDialog1 dialog1; //定义CSubDialog1型对话框的一个新对象 dialog1.DoModal(); //使用...
界面编程,异形窗口才显个性!欢迎分享!,建立异形规则窗口
无闪烁的MFC应用框架,实际使用时把此工程改名成你要建立的项目名称,然后开始开发即可。你熟悉MFC的话研究这个框架的半个小时应该就明白并熟练运用了。 2.SolveFlashingAndRedrawv1.0.5 demo版 利用...
建立基于MFC的对话框,界面设计,聊天工具
首先是基于MFC多文档的OpenGL框架的建立; 其次,实现将多文档分割成两个窗口,左侧为内嵌对话框控制窗口,右侧为基于MDI的OpenGL显示窗口。
在MFC框架中使用的OpenGL环境,左边是控件区,右边是视图区,控件区和视图区建立了关联,可根据具体需要操作使用。
详细介绍了从新建MFC到最后运行成功的划分多窗口方法,代码+效果截图
SolveFlashingAndRedraw 样例工程是MFC解决窗口保存及重绘闪烁问题的一种比较好的方案(Win32解决方法类似)。 运行步骤: 直接运行里面的程序,在窗口上任意拖拉鼠标画线,然后点击菜单栏的几个示范菜单项,然后...
vc++创建窗口笔记
SolveFlashingAndRedraw框架是MFC解决窗口保存及重绘闪烁问题的一种比较好的方案(Win32解决方法类似)。 版本历史: v1.0.1 20091126 第一版本 v1.0.2 20091212 第二版本 1. 修改了部分变量的名字使其更符合其...
SolveFlashingAndRedraw框架是MFC解决窗口保存及重绘闪烁问题的一种比较好的方案(Win32解决方法类似)。 版本历史: v1.0.1 20091126 第一版本 v1.0.2 20091212 第二版本 1. 修改了部分变量的名字使其更符合其...
无闪烁的MFC应用框架,实际使用时把此工程改名成你要建立的项目名称,然后开始开发即可。你熟悉MFC的话研究这个框架的半个小时应该就明白并熟练运用了。 2.SolveFlashingAndRedrawv1.0.4 demo版 利用...
主要介绍了如何使用visual studio2019创建简单的MFC窗口(使用C++),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
MFC (Microsoft Foundation Class Library) 中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。因为总体上,MFC框架定义了...
可以直接使用的窗口拆分代码,适合新手使用,通过mfc单文档建立使用的,将需要的积分调整为0,供大家免费使用
MFC消息响应测试案例,纯代码设计对话框。
其次,MFC采用消息映射的方法来处理Windows消息和事件,隐藏了Windows窗口的窗口过程,简化了消息处理的复杂性和烦琐性。 还有,MFC提供了一个以文档-视为中心的编程模式,并实现了以文档-视为中心的编程框架,简化...