MFC的對話方塊中使用OpenGL繪圖
接寫來我將分享一點我的實現:
1、首先當然要設定好OpenGL的程式設計環境;
2、新建一個基於對話方塊的工程,我選擇VS studio平臺;
3、選著Project->add->class,新增一個新類,取名為MyOpenGL,選著基類為CWnd
4利用VS的類嚮導給MyOpenGL新增OnCreate()和OnPaint()函式;
5、在MyOpenGL.h中新增成員變數
- class MyOpenGL :
- public CWnd
- {
- public:
- MyOpenGL(void);
- ~MyOpenGL(void);
-
//////////////////////////////////////////////////////////////////////////
- //成員變數
- int MySetPixelFormat(HDC hDC);
- void Rendercene();
- HDC hdc;
- HGLRC hglrc;
- //////////////////////////////////////////////////////////////////////////
- GLfloat step,s;
- DECLARE_MESSAGE_MAP()
- public:
- afx_msg void OnPaint();
- afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
- };
6、MyOpenGL.cpp中假如以下程式碼:
6.1
-
MyOpenGL::~MyOpenGL(
- {
- wglMakeCurrent(NULL,NULL);
- wglDeleteContext(hglrc);//刪除渲染描述表
- ::ReleaseDC(m_hWnd,hdc);//釋放裝置描述表
- }
- int MyOpenGL::OnCreate(LPCREATESTRUCT lpCreateStruct)
- {
- if (CWnd::OnCreate(lpCreateStruct) == -1)
- return -1;
-
// TODO: Add your specialized creation code here
- if(MySetPixelFormat(::GetDC(m_hWnd))==FALSE)
- return 0;
- // 獲得繪圖描述表
- hdc = ::GetDC(m_hWnd);
- // 建立渲染描述表
- hglrc = wglCreateContext(hdc);
- // 使繪圖描述表為當前呼叫現程的當前繪圖描述表
- wglMakeCurrent(hdc, hglrc);
- return 0;
- }
6.3 在OnPaint()加入
- void MyOpenGL::OnPaint()
- {
- //CPaintDC dc(this); // device context for painting
- // TODO: Add your message handler code here
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清除顏色快取和深度快取
- Rendercene();
- glPopMatrix();
- glFlush();
- SwapBuffers(hdc);
- // Do not call CWnd::OnPaint() for painting messages
- }
6.4 成員函式實現程式碼
- int MyOpenGL::MySetPixelFormat(HDC hDC)
- {
- PIXELFORMATDESCRIPTOR pixelDesc;
- pixelDesc.nSize = sizeof(PIXELFORMATDESCRIPTOR);
- pixelDesc.nVersion = 1;
- pixelDesc.dwFlags = PFD_DRAW_TO_WINDOW |
- PFD_SUPPORT_OPENGL |
- PFD_DOUBLEBUFFER |
- PFD_TYPE_RGBA;
- pixelDesc.iPixelType = PFD_TYPE_RGBA;
- pixelDesc.cColorBits = 32;
- pixelDesc.cRedBits = 0;
- pixelDesc.cRedShift = 0;
- pixelDesc.cGreenBits = 0;
- pixelDesc.cGreenShift = 0;
- pixelDesc.cBlueBits = 0;
- pixelDesc.cBlueShift = 0;
- pixelDesc.cAlphaBits = 0;
- pixelDesc.cAlphaShift = 0;
- pixelDesc.cAccumBits = 0;
- pixelDesc.cAccumRedBits = 0;
- pixelDesc.cAccumGreenBits = 0;
- pixelDesc.cAccumBlueBits = 0;
- pixelDesc.cAccumAlphaBits = 0;
- pixelDesc.cDepthBits = 0;
- pixelDesc.cStencilBits = 1;
- pixelDesc.cAuxBuffers = 0;
- pixelDesc.iLayerType = PFD_MAIN_PLANE;
- pixelDesc.bReserved = 0;
- pixelDesc.dwLayerMask = 0;
- pixelDesc.dwVisibleMask = 0;
- pixelDesc.dwDamageMask = 0;
- int iPixelFormat;
- // 為裝置描述表得到最匹配的畫素格式
- if((iPixelFormat = ChoosePixelFormat(hDC, &pixelDesc)) == 0)
- {
- MessageBox("ChoosePixelFormat Failed", NULL, MB_OK);
- return FALSE;
- }
- // 設定最匹配的畫素格式為當前的畫素格式
- if(SetPixelFormat(hDC, iPixelFormat, &pixelDesc) == FALSE)
- {
- MessageBox("SetPixelFormat Failed", NULL, MB_OK);
- return FALSE;
- }
- return TRUE;
- }
- void MyOpenGL::Rendercene()
- {
- glBegin(GL_LINES);
- glVertex2f(-0.5f,-0.3f);
- glVertex2f(0.4f,0.6f);
- glEnd();
- }
7.在對話方塊的標頭檔案里加入:#include MyOpenGL.h
新增成員變數 MyOpenGL* m_GL;
然後在其OnCreate()函式中初始化:
- int CMFC_GL_TestDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
- {
- if (CDialog::OnCreate(lpCreateStruct) == -1)
- return -1;
- // TODO: Add your specialized creation code here
- // 定義OpenGL繪圖視窗的矩形大小
- //此段語句放在OnInitDialog(),或者OnCreate中
- CRect rect(0,0,300,300);
- m_GL=new MyOpenGL;//用New的方式建立
- m_GL->Create( NULL, //預設的視窗
- NULL, //無視窗名稱
- WS_CHILD|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_VISIBLE,
- // 定義視窗風格
- rect, // 視窗的大小
- this, // 指定當前對話方塊為其父視窗指標
- 0);
- return 0;
- }
接下來就可以運行了。
效果圖:
相關推薦
在MFC對話方塊中顯示網頁
用到ActiveX 控制元件,向對話方塊裡面插入一個 WebBrowser控制元件,之後使用就可以了! 利用WebBrowser控制元件建立自己的瀏覽器 ①新建一個基於對話方塊的工程,命名為test,然後在對話方塊上單擊右鍵,選擇 Insert ActiveX Contr
如何在mfc對話方塊中新增一個顯示網頁的視窗
這個要用到 ActiveX 控制元件了,向對話方塊裡面插入一個 WebBrowser控制元件,之後使用就可以了!=============================利用WebBrowser控制元件建立自己的瀏覽器①新建一個基於對話方塊的工程,命名為test,然後在對話方塊上單擊右鍵,選擇Insert A
MFC 對話方塊中顯示系統當前時間
轉載來自:http://blog.csdn.net/bbsview/article/details/7886149 對話方塊中編輯框ID為IDC_TIME,關聯變數為CString的m_time 在OnInitDialog()中新增程式碼: CString st
MFC對話方塊中改變對話方塊,Group Box, Static Text, Check Box, Edit Ctrl(disabled), Combo Box(disabled), Radio Button等控制元件背景色
VC 設定 Dialog, Group Box, Static Text, Check Box, Edit Ctrl(disabled), Combo Box(disabled), Radio Button等背景色 編寫WM_CTLCOLOR訊息的對映函式OnCtlColor
《MFC&Qt混合程式設計》 part1 MFC對話方塊中嵌入Qt視窗控制元件
《MFC&Qt混合程式設計》 part1 MFC對話方塊中嵌入Qt視窗控制元件 1、環境配置:VS2010,Qt4.8.4_win64,Qt_VS_Addin_1.1.11 2、建立的MFC對話方塊程式 3、輸出為x64的debug&r
MFC的對話方塊中使用OpenGL繪圖
接寫來我將分享一點我的實現: 1、首先當然要設定好OpenGL的程式設計環境; 2、新建一個基於對話方塊的工程,我選擇VS studio平臺; 3、選著Project->add->class,新增一個新類,取名為MyOpenGL,選著基類為CWnd 4利用VS的類嚮導給MyOpenGL新增OnC
MFC對話方塊程式中使用OpenGL
在MFC的對話方塊程式中需要使用OpenGL在某個對話方塊中作圖,綜合了網上的兩篇文章的內容(文章一,文章二),也有自己的心得體會。 首先需要配置好opengl的環境,程式中會使用到glaux中的庫和函式,這裡將它的lib,h,dll檔案的下
BCGControlBar教程:如何將MFC控制元件的BCGControlBarBCGSuite新增到對話方塊中
BCGControlBar Pro for MFC最新試用版下載請猛戳>>> 如果您正在使用我們的Windows窗體產品,那麼將我們的控制元件新增到窗體是沒有問題的:只需從Visual Studio工具箱中拖動所需的專案並將其放入窗體即可。在對話方塊中新增非標準控制元件需要一些
BCGControlBar教程:將MFC控制元件的BCGControlBar / BCGSuite新增到對話方塊中
BCGControlBar Pro for MFC最新試用版下載請猛戳>>> 如果正在使用我們的Windows Forms產品,那麼將我們的控制元件新增到窗體是沒有問題的:只需從Visual Studio工具箱中拖動所需的專案並將其拖放到窗體中即可。 但是,MFC開發人員的生活
VC/MFC 在對話方塊中建立檢視並在檢視區新增ListCtrl控制元件
自定義的view類用於顯示在對話方塊上 class CGroupMenuView : public CScrollView { protected: CGroupMenuView(); ……………… ………… }; class CWorkView :
MFC 對話方塊Picture Control(圖片控制元件)中靜態和動態顯示Bmp圖片
最近有同學問我如何實現MFC基於對話方塊在圖片控制元件中載入圖片?其實使用MFC顯示圖片的方法各種各樣,但是還是有些同學不知道怎樣顯示.以前在《數字影象處理》課程中完成的軟體都是基於單
MFC的對話方塊中怎樣加入背景音樂
第一步:新增標頭檔案與庫檔案 #include "vfw.h"#pragma comment (lib,"vfw32.lib")第二步:在對話方塊類加上變數HWND hMCI;第三步:在對話方塊初始話的地方如此hMCI = MCIWndCreate(NULL, NULL,WS
MFC學習筆記之多對話方塊中使用定時器
MFC菜鳥第一次發貼,請各位高人指教:我需要做一個基於對話方塊的程式,主對話方塊TimerTryDlg上就兩個按鈕,確定鈕按下後執行訊息處理OnFirstOK(),先初始化定時器,再開啟有模式對話方塊TestDlg,定時器時間到了執行OnTimer-在子對話方塊上的一個靜態控制元件上畫點,但OnTimer在
VS2008中MFC對話方塊介面程式設計Caption中文亂碼的解決辦法
最近在使用VS2008編寫一個基於對話方塊的程式時,在對話方塊中新增Static控制元件,編寫其Caption時寫中文的話會出現亂碼。 在預覽狀態下(快捷鍵是Ctrl+T)可能看到中文,但是編譯執行後對話方塊中的中文全是問號。 即使你用的VS2008中文版,即使
MFC的對話方塊中建立點陣圖按鈕
1.可新建一個類ImageButton(繼承自CButton),並設定其風格為自繪: ModifyStyle(0,BS_OWNERDRAW);ImageButton.h:class ImageButton : public CButton{private: public: I
MFC對話方塊程式中當滑鼠移動到控制元件上後改變形狀
處理父視窗的WM_SETCURSOR訊息: BOOL CYourDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) { // TODO: Add your me
[MFC]在程式中訪問對話方塊中的控制元件——GetDlgItem函式
1. 使用GetDlgItem函式來訪問對話方塊中的控制元件: 1) 函式原型:CWnd* CWnd::GetDlgItem(int nID) const; 2) 只要引數指定為要訪問的控制元件的ID,即可返回該控制元件的指標,但要注意的是返回的是CWnd*
MFC對話方塊程式中的OnCreate和OnInitDialog函式
最近做一個簡單的專案,需要使用到MFC。雖說這個東西已經很老舊了,但是為了專案使用,開始學它。需要將一個osg三維檔案顯示在控制元件中,這裡使用編輯框空間,除錯過程中遇到了CEdit
vs2010單文件中新增對話方塊並在對話方塊中新增屬性框(標籤框)
1.建立單文件Demo 在資源檢視Dialog中插入兩個Dialoge,Style設定為child,Border設定為chill。為兩個對話方塊分別新增類,基類為CPropertyPage,類名CP1,CP2。在P1的標頭檔案新增 #include "resource.h" 2.在類檢視中在De
vs2010對話方塊中新增屬性頁
方法一 1.建立對話方塊(style child,Border Thin),新增類CProperty 2.在主對話方塊中.cpp,包含兩個子對話方塊的標頭檔案 CPropertySheet sheet; CPage pag