導航:首頁 > 編程語言 > windows編程繪圖

windows編程繪圖

發布時間:2023-08-25 09:49:37

Ⅰ VisualStudio怎麼用C語言進行圖形編程

新建一個項目、選擇win32項目,應用程序為windows程序,附加選項為空;在源代碼目錄中添加一個後綴為.c的源文件。接下來就可以寫C代碼了。

用c語言中通過調用windows的api函數,來顯示窗口、菜單、滾動條、屏幕輸出。

在《windows程序設計》一書中就有一個例子,顯示一個標準的windows窗口,並在繪圖區顯示一個字元串。代碼如下:

#include<windows.h>

LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);

intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,PSTRszCmdLine,intiCmdShow)
{
staticTCHARszAppName[]=TEXT("HelloWin");
HWNDhwnd;
MSGmsg;
WNDCLASSwndclass;

wndclass.style=CS_HREDRAW||CS_VREDRAW;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName=szAppName;

if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("ThisprogramrequiresWindowsNT!"),szAppName,MB_ICONERROR);
return0;
}
hwnd=CreateWindow(szAppName,
TEXT("TheHelloProgram"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hwnd,iCmdShow);
//UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
returnmsg.wParam;
}

LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)
{
HDChdc;
PAINTSTRUCTps;
RECTrect;

switch(message)
{
caseWM_CREATE:
//PlaySound(TEXT("C:\WindowsNotify.wav"),NULL,SND_FILENAME|SND_ASYNC);
return0;
caseWM_PAINT:
hdc=BeginPaint(hwnd,&ps);
GetClientRect(hwnd,&rect);
DrawText(hdc,TEXT("Hello,Windows98!"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
EndPaint(hwnd,&ps);
return0;
caseWM_DESTROY:
PostQuitMessage(0);
return0;
}
returnDefWindowProc(hwnd,message,wParam,lParam);
}


復制到剛才的.c文件中即可以編譯運行。

Ⅱ opengl在windows系統下編程,如何實現在窗口外繪圖

二、生成OpenGL程序的基本步驟和條件 本文將給出一個例子,這個例子是一個用OpenGL顯示圖像的Windows程序,通過這個程序我們也可以知道用OpenGL編程的基本要求。我們知道,GDI是通過設備句柄(Device Context以下簡稱"DC")來繪圖,而OpenGL則需要繪制環境(Rendering Context,以下簡稱"RC")。每一個GDI命令需要傳給它一個DC,與GDI不同,OpenGL使用當前繪制環境(RC)。一旦在一個線程中指定了一個當前RC,所有在此線程中的OpenGL命令都使用相同的當前RC。雖然在單一窗口中可以使用多個RC,但在單一線程中只有一個當前RC。本例將首先產生一個OpenGL RC並使之成為當前RC,分為三個步驟:設置窗口像素格式;產生RC;設置為當前RC。 一、首先創建工程 用AppWizard產生一個EXE文件,選擇工程目錄,並在工程名字中輸入"GLSample一",保持其他的不變;第一步、選單文檔(SDI);第二步、不支持資料庫;第三步、不支持OLE;第四步、不選中浮動工具條、開始狀態條、列印和預覽支持、幫助支持的復選框(選中也可以,本文只是說明最小要求),選中三維控制(三D Controls);第五步、選中產生源文件注釋並使用MFC為共享動態庫;第六步、保持預設選擇。按Finish結束,工程創建完畢。 二、將此工程所需的OpenGL文件 和庫加入到工程中 在工程菜單中,選擇"Build"下的"Settings"項。單擊"Link"標簽,選擇"General"目錄,在Object/Library Moles的編輯框中輸入"OpenGL三二.lib glu三二.lib glaux.lib"(注意,輸入雙引號中的內容,各個庫用空格分開;否則會出現鏈接錯誤),選擇"OK"結束。然後打開文件"stdafx.h",將下列語句插入到文件中(劃下劃線的語句為所加語句): #define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers #include // MFC core and standard components #include // MFC extensions #include #include #ifndef _AFX_NO_AFXCMN_SUPPORT #include // MFC support for Windows 95 Common Controls #endif // _AFX_NO_AFXCMN_SUPPORT 三、改寫OnPreCreate函數並給視 類添加成員函數和成員變數 OpenGL需要窗口加上WS_CLIPCHILDREN(創建父窗口使用的Windows風格,用於重繪時裁剪子窗口所覆蓋的區域)和 WS_CLIPSIBLINGS(創建子窗口使用的Windows風格,用於重繪時剪裁其他子窗口所覆蓋的區域)風格。把OnPreCreate改寫成如下所示: BOOL CGLSample一View::PreCr- eateWindow(CREATESTRUCT& cs) { cs.style |= (WS_CLIPCHI- LDREN | WS_CLIPSIBLINGS); return CView::PreCreate- Window(cs); } 產生一個RC的第一步是定義窗口的像素格式。像素格式決定窗口著所顯示的圖形在內存中是如何表示的。由像素格式控制的參數包括:顏色深度、緩沖模式和所支持的繪畫介面。在下面將有對這些參數的設置。我們先在CGLSample一View的類中添加一個保護型的成員函數BOOL SetWindowPixel-Format(HDC hDC)(用滑鼠右鍵添加),並編輯其中的代碼,見程序一。 BOOL CGLSample一View::SetWindowPixelFormat(HDC hDC) { PIXELFORMATDESCRIPTOR pixelDesc; pixelDesc.nSize = sizeof(PIXELFORMATDESCRIPTOR); pixelDesc.nVersion = 一; pixelDesc.dwFlags = PFD_DRAW_TO_WINDOW | PFD_DRAW_TO_BITMAP | PFD_SUPPORT_OpenGL | PFD_SUPPORT_GDI | PFD_STEREO_DONTCARE; pixelDesc.iPixelType = PFD_TYPE_RGBA; pixelDesc.cColorBits = 三二; pixelDesc.cRedBits = 吧; pixelDesc.cRedShift = 一陸; pixelDesc.cGreenBits = 吧; pixelDesc.cGreenShift = 吧; pixelDesc.cBlueBits = 吧; pixelDesc.cBlueShift = 0; pixelDesc.cAlphaBits = 0; pixelDesc.cAlphaShift = 0; pixelDesc.cAccumBits = 陸四; pixelDesc.cAccumRedBits = 一陸; pixelDesc.cAccumGreenBits = 一陸; pixelDesc.cAccumBlueBits = 一陸; pixelDesc.cAccumAlphaBits = 0; pixelDesc.cDepthBits = 三二; pixelDesc.cStencilBits = 吧; pixelDesc.cAuxBuffers = 0; pixelDesc.iLayerType = PFD_MAIN_PLANE; pixelDesc.bReserved = 0; pixelDesc.dwLayerMask = 0; pixelDesc.dwVisibleMask = 0; pixelDesc.dwDamageMask = 0; m_GLPixelIndex = ChoosePixelFormat( hDC, &pixelDesc); if (m_GLPixelIndex==0) // Lets choose a default index. { m_GLPixelIndex = 一; if (DescribePixelFormat(hDC, m_GLPixelIndex, sizeof(PIXELFORMATDESCRIPTOR), &pixelDesc)==0) { return FALSE; } } if (SetPixelFormat( hDC, m_GLPixelIndex, &pixelDesc)==FALSE) { return FALSE; } return TRUE; } 接著用滑鼠右鍵在CGLSample一View中添加保護型的成員變數: int m_GLPixelIndex; 四、用ClassWizard添加WM_CREATE的消息處理函數OnCreate 添加OnCreate函數後如程序一所示。 至此,OpenGL工程的基本框架就建好了。但如果你現在運行此工程,則它與一般的MFC程序看起來沒有什麼兩樣。 5、代碼解釋 現在我們可以看一看Describe-PixelFormat提供有哪幾種像素格式,並對代碼進行一些解釋: PIXELFORMATDESCRIPTOR包括了定義像素格式的全部信息。 DWFlags定義了與像素格式兼容的設備和介面。 通常的OpenGL發行版本並不包括所有的標志(flag)。wFlags能接收以下標志: PFD_DRAW_TO_WINDOW 使之能在窗口或者其他設備窗口畫圖; PFD_DRAW_TO_BITMAP 使之能在內存中的點陣圖畫圖; PFD_SUPPORT_GDI 使之能調用GDI函數(註:如果指定了PFD_DOUBLEBUFFER,這個選項將無效); PFD_SUPPORT_OpenGL 使之能調用OpenGL函數; PFD_GENERIC_FORMAT 假如這種象素格式由Windows GDI函數庫或由第三方硬體設備驅動程序支持,則需指定這一項; PFD_NEED_PALETTE 告訴緩沖區是否需要調色板,本程序假設顏色是使用二四或 三二位色,並且不會覆蓋調色板; PFD_NEED_SYSTEM_PALETTE 這個標志指明緩沖區是否把系統調色板當作它自身調色板的一部分; PFD_DOUBLEBUFFER 指明使用了雙緩沖區(註:GDI不能在使用了雙緩沖區的窗口中畫圖); PFD_STEREO 指明左、右緩沖區是否按立體圖像來組織。 PixelType定義顯示顏色的方法。PFD_TYPE_RGBA意味著每一位(bit)組代表著紅、綠、藍各分量的值。PFD_TYPE_COLORINDEX 意味著每一位組代表著在彩色查找表中的索引值。本例都是採用了PFD_TYPE_RGBA方式。 ● cColorBits定義了指定一個顏色的位數。對RGBA來說,位數是在顏色中紅、綠、藍各分量所佔的位數。對顏色的索引值來說,指的是表中的顏色數。 ● cRedBits、cGreenBits、cBlue-Bits、cAlphaBits用來表明各相應分量所使用的位數。 ● cRedShift、cGreenShift、cBlue-Shift、cAlphaShift用來表明各分量從顏色開始的偏移量所佔的位數。 一旦初始化完我們的結構,我們就想知道與要求最相近的系統象素格式。我們可以這樣做: m_hGLPixelIndex = ChoosePixelFormat(hDC, &pixelDesc); ChoosePixelFormat接受兩個參數:一個是hDc,另一個是一個指向PIXELFORMATDESCRIPTOR結構的指針&pixelDesc;該函數返回此像素格式的索引值。如果返回0則表示失敗。假如函數失敗,我們只是把索引值設為一並用DescribePixelFormat得到像素格式描述。假如你申請一個沒得到支持的像素格式,則Choose-PixelFormat將會返回與你要求的像素格式最接近的一個值。一旦我們得到一個像素格式的索引值和相應的描述,我們就可以調用SetPixelFormat設置像素格式,並且只需設置一次。 現在像素格式已經設定,我們下一步工作是產生繪制環境(RC)並使之成為當前繪制環境。在CGLSample一View中加入一個保護型的成員函數BOOL CreateViewGLContext(HDC hDC),使之如下所示: BOOL CGLSample一View::CreateView GLContext(HDC hDC) { m_hGLContext = wglCreate Context(hDC);//用當前DC產生繪制環境(RC) if (m_hGLContext == NULL) { return FALSE; } if (wglMakeCurrent(hDC, m_hGLContext)==FALSE) { return FALSE; } return TRUE; } 並加入一個保護型的成員變數HGLRC m_hGLContext;HGLRC是一個指向rendering context的句柄。 在OnCreate函數中調用此函數: int CGLSample一View::OnCreate (LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateS truct) == -一) return -一; HWND hWnd = GetSafeHwnd(); HD

Ⅲ win32編程與windows圖形編程有什麼區別

Win32程序,主要是控制台 Exe等等的文件類型的程序,它是純控制台的。比如DOS。
Windows圖形編程,是通過按鈕,滑鼠空間等圖形控制項進行編程的,具有可視化的特點。現在大部分軟體都是圖形的,比如Windows本身。

Ⅳ 關於WINDOWS圖形界面程序編程

語言:C#,C+,C++;
工具:Microsoft Visual Studio系列。
C#:讀做C-sharp,編程語言是由微軟公司的Anders Hejlsberg和 Scott Willamette領導的開發小組專門為.NET平台設計的語言,它可以使程序員移植到.NET上。這種移植對於廣大的程序員來說是比較容易的,因為C#從C,C++和Java發展而來,它採用了這三種語言最優秀的特點,並加入了它自己的特性。C#是事件驅動的,完全面向對象的可視化編程語言,我們可以使用集成開發環境來編寫C#程序。
Microsoft Visual Studio:簡稱VS,是美國微軟公司的開發工具包系列產品。VS是一個基本完整的開發工具集,它包括了整個軟體生命周期中所需要的大部分工具,如UML工具、代碼管控工具、集成開發環境(IDE)等等。所寫的目標代碼適用於微軟支持的所有平台,包括Microsoft Windows、Windows Mobile、Windows CE、.NET Framework、.NET Compact Framework和Microsoft Silverlight 及Windows Phone。

閱讀全文

與windows編程繪圖相關的資料

熱點內容
如何在伺服器上配置外網網址 瀏覽:838
阿里雲伺服器的硬體在哪裡 瀏覽:52
python自動注冊谷歌 瀏覽:329
phpini驗證碼 瀏覽:824
解壓後的文件怎麼驅動 瀏覽:326
老闆要程序員加班 瀏覽:414
泰爾pdf 瀏覽:311
視頻轉碼壓縮哪款軟體好 瀏覽:647
盯盯拍記錄儀下載什麼app 瀏覽:436
新東方新概念英語pdf 瀏覽:696
python中如何創建菜單欄 瀏覽:507
中石化app那個叫什麼名 瀏覽:706
借貸寶合集解壓密碼 瀏覽:640
python爬取網頁代碼 瀏覽:480
efs加密對微信無效 瀏覽:496
劉秀pdf 瀏覽:998
腳上長黑刺是什麼app 瀏覽:703
演算法工程師上海 瀏覽:390
php的循環語句怎麼寫 瀏覽:289
畫聖誕樹用什麼軟體python 瀏覽:452