建立MFC窗口

本文详细介绍了如何利用MFC(Microsoft Foundation Classes)简化OpenGL窗口的建立过程,通过对比不同方法的优缺点,推荐使用MFC进行OpenGL程序开发,并提供了具体的代码实现,包括头文件、类定义、消息映射等关键部分。
建立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程序也得是这样的步骤,
本 PPT 介绍了制药厂房中供配电系统的总体概念与设计要点,内容包括: 洁净厂房的特点及其对供配电系统的特殊要求; 供配电设计的一般原则与依据的国家/行业标准; 从上级电网到工厂变电所、终端配电的总体结构与模块化设计思路; 供配电范围:动力配电、照明、通讯、接地、防雷与消防等; 动力配电中电压等级、接地系统形式(如 TN-S)、负荷等级与可靠性、UPS 配置等; 照明的电源方式、光源选择、安装方式、应急与备用照明要求; 通讯系统、监控系统在生产管理与消防中的作用; 接地与等电位连接、防雷等级与防雷措施; 消防设施及其专用供电(消防泵、排烟风机、消防控制室、应急照明等); 常见高压柜、动力柜、照明箱等配电设备案例及部分设计图纸示意; 公司已完成的典型项目案例。 1. 工程背景与总体框架 所属领域:制药厂房工程的公用工程系统,其中本 PPT 聚焦于供配电系统。 放在整个公用工程中的位置:与给排水、纯化水/注射用水、气体与热力、暖通空调、自动化控制等系统并列。 2. Part 01 供配电概述 2.1 洁净厂房的特点 空间密闭,结构复杂、走向曲折; 单相设备、仪器种类多,工艺设备昂贵、精密; 装修材料与工艺材料种类多,对尘埃、静电等更敏感。 这些特点决定了:供配电系统要安全可靠、减少积尘、便于清洁和维护。 2.2 供配电总则 供配电设计应满足: 可靠、经济、适用; 保障人身与财产安全; 便于安装与维护; 采用技术先进的设备与方案。 2.3 设计依据与规范 引用了大量俄语标准(ГОСТ、СНиП、SanPiN 等)以及国家、行业和地方规范,作为设计的法规基础文件,包括: 电气设备、接线、接地、电气安全; 建筑物电气装置、照明标准; 卫生与安全相关规范等。 3. Part 02 供配电总览 从电源系统整体结构进行总览: 上级:地方电网; 工厂变电所(10kV 配电装置、变压
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值