c語(yǔ)言不自帶圖形處理方面的東西。TC特有的頭文件graphics.h,其他編譯環(huán)境都用不了,可移植性是零。而且TC實(shí)在太老,與現(xiàn)在c語(yǔ)言標(biāo)準(zhǔn)差距非常大?;臼菬o(wú)法運(yùn)行現(xiàn)在的代碼。所以不太建議你用它。
創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供嵐皋網(wǎng)站建設(shè)、嵐皋做網(wǎng)站、嵐皋網(wǎng)站設(shè)計(jì)、嵐皋網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、嵐皋企業(yè)網(wǎng)站模板建站服務(wù),10余年嵐皋做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
非要用純c,可以自己寫函數(shù)調(diào)用Windows?AP和GUI接口。而且需要包含windows.h頭文件。
網(wǎng)上有個(gè)大神用c—free寫的代碼在附件里。
/*
純C通過(guò)?Windows?API?編寫的基本?Windows?圖形界面
整理加原創(chuàng),基本上每一句代碼都有注釋
通過(guò)?C-Free?3.5編譯
*/
#include?string.h?????????//這個(gè)頭文件在擴(kuò)展名為.c時(shí)是不需要加的
#include?windows.h????????//windows?api必須包含的頭文件
LRESULT?CALLBACK?WndProc(HWND,UINT,WPARAM,LPARAM);??????//窗口函數(shù)的前向聲明
//參數(shù)說(shuō)明:
//HINSTANCE?hInstance???當(dāng)前實(shí)例句柄
//HINSTANCE?hPrevInstance???以前版本的遺留產(chǎn)物,現(xiàn)在總是置為?NULL
//LPSTR?lpCmdLine???????命令行的產(chǎn)生,可以從開(kāi)始-獲得程序運(yùn)行的參數(shù),由此傳入
//int?nCmdShow??????程序最初的顯示模式,正常,最大化或最小化
//主函數(shù)的入口是WinMain,?類型為int
//WINAPI標(biāo)志是一種特定的調(diào)用,?它定義了一種生成機(jī)器代碼和放置函數(shù)參數(shù)的方式
int?WINAPI?WinMain(HINSTANCE?hInstance,HINSTANCE?hPrevInstance,LPSTR?lpcmdLine,int?nCmdShow)
{
//TCHAR,?TEXT都是統(tǒng)一單字節(jié)和雙字節(jié)字符的類型,?建議使用
static?TCHAR?szAppName[]?=?TEXT("MyFirstWindows");
static?TCHAR?szClassName[]?=?TEXT("MFWClass");
HWND?hwnd;???????//一定一個(gè)窗口句柄
MSG?msg;????????//定義一個(gè)消息結(jié)構(gòu)體
WNDCLASS?wndclass;??????//定義一個(gè)?WNDCLASS?結(jié)構(gòu)用于注冊(cè)窗口
wndclass.style?=?CS_HREDRAW?|?CS_VREDRAW;???????//窗口類的類風(fēng)格,每當(dāng)水平和垂直大小改變時(shí)完全刷新窗口
wndclass.lpfnWndProc?=?WndProc;?????//此窗口類所使用的窗口函數(shù)的入口地址
wndclass.cbClsExtra?=?0;????????//用于在類結(jié)構(gòu)中預(yù)留一些額外的空間
wndclass.cbWndExtra?=?0;????????//用于在windows內(nèi)部保存的窗口結(jié)構(gòu)中預(yù)留一些額外的空間
wndclass.hInstance?=?hInstance;?????//指定所在程序的實(shí)例句柄
wndclass.hIcon?=?LoadIcon(NULL,IDI_APPLICATION);????????//定制圖標(biāo)
wndclass.hCursor?=?LoadCursor(NULL,IDC_ARROW);??????//定制鼠標(biāo)圖形
wndclass.hbrBackground?=?(HBRUSH)GetStockObject(GRAY_BRUSH);????????//定義背景顏色
wndclass.lpszMenuName?=?NULL;???????//指定窗口類的菜單
wndclass.lpszClassName?=szClassName;????????//指定窗口類的類名
//注冊(cè)窗口,參數(shù)為指向?WNDCLASS?結(jié)構(gòu)的指針
//如果注冊(cè)不成功,則彈出一個(gè)對(duì)話框說(shuō)明情況
//MessageBox是僅有的可以在舊版本和新版本windows都可以運(yùn)行的對(duì)話框
if(!RegisterClass(wndclass))
{
MessageBox(NULL,TEXT("This?program?requires?Windows?NT?or?above!"),szAppName,MB_ICONERROR);
return?0;
}
//創(chuàng)建窗口
hwnd?=?CreateWindow(
szClassName,????????//窗口類的名稱
TEXT("Title:My?First?Windows?Program.?這里是標(biāo)題"),?????//窗口標(biāo)題
//WS_OVERLAPPEDWINDOW,???//窗口顯示風(fēng)格,這行實(shí)際是一個(gè)預(yù)定義,相當(dāng)于下面的集合,可以單獨(dú)設(shè)置
WS_OVERLAPPED?|?WS_CAPTION?|?WS_SYSMENU?|?WS_THICKFRAME?|?WS_MINIMIZEBOX?|?WS_MAXIMIZEBOX,
CW_USEDEFAULT,??????//初始?x?方向的位置
CW_USEDEFAULT,??????//初始?y?方向的位置
CW_USEDEFAULT,??????//初始?x?方向的大小
CW_USEDEFAULT,??????//初始?y?方向的大小
NULL,???????//父窗口句柄
NULL,???????//菜單句柄
hInstance,??????//程序?qū)嵗浔?/p>
NULL????);??????//創(chuàng)建參數(shù)
//顯示窗口,第一個(gè)參數(shù)?hwnd?是?CreateWindow?所創(chuàng)建的窗口的句柄
//第二個(gè)參數(shù)?nCmdShow?是主函數(shù)給的,由快捷方式獲得
ShowWindow(hwnd,nCmdShow);
//刷新窗口,給窗口函數(shù),在本程序中即?WndProc?發(fā)送一個(gè)?WM_PAINT
UpdateWindow(hwnd);
//消息循環(huán)
while(GetMessage(msg,NULL,0,0))????????//接受自己創(chuàng)建的所有窗口的所有消息
{
TranslateMessage(msg);?????//將?msg?結(jié)構(gòu)體傳給windows以進(jìn)行一些鍵盤轉(zhuǎn)換,?即將擊鍵消息轉(zhuǎn)換為字符消息
DispatchMessage(msg);??????//再次將?msg?結(jié)構(gòu)體傳給windows,由windows將該消息發(fā)送給適當(dāng)?shù)拇翱诤瘮?shù)
}
return?(int)msg.wParam;
}
//窗口函數(shù)
//參數(shù)說(shuō)明:
//HWND?hwnd,?接受消息的窗口句柄,由CreateWindow函數(shù)返回
//UINT?message,?消息標(biāo)志符,用以標(biāo)識(shí)消息,每個(gè)消息均有一個(gè)唯一對(duì)應(yīng)的消息標(biāo)識(shí)符
//WPARAM?wParam,?是?WORD?PARAM?的意思,一個(gè)32位的消息參數(shù),其含義和數(shù)值根據(jù)消息的不同而不同
//LPARAM?lParam,?是?LONG?PARAM?的意思,一個(gè)32位的消息參數(shù),其值和消息有關(guān)
//CALLBACK函數(shù)指由程序員定義,編程實(shí)現(xiàn),而由windows系統(tǒng)調(diào)用的函數(shù)
LRESULT?CALLBACK?WndProc(HWND?hwnd,UINT?message,WPARAM?wParam,LPARAM?lParam)
{
HDC?hdc;????????//定義一個(gè)設(shè)備描述表句柄結(jié)構(gòu)體
//定義一個(gè)?PAINTSTRUCT?的繪制信息結(jié)構(gòu)體,
//其包含了包含了當(dāng)前無(wú)效矩形區(qū)域的坐標(biāo)和其他信息,用于刷新用戶區(qū)的內(nèi)容
PAINTSTRUCT?ps;
RECT?rect;??????//定義一個(gè)?RECT?結(jié)構(gòu)體,其有l(wèi)eft,top,right,bottom?四個(gè)域
//處理傳進(jìn)的各種消息
switch(message)
{
//窗口創(chuàng)建
case?WM_CREATE:?MessageBox(NULL,"MessageContent?:?This?is?WM_CREATE,這是?WM_CREATE。",
"MessageTiTle?這是對(duì)話框的標(biāo)題",MB_OK);
return?0;
//窗口繪制
case?WM_PAINT:??hdc?=?BeginPaint(hwnd,ps);?????//由BeginPaint開(kāi)始,返回設(shè)備描述表以開(kāi)始繪圖
GetClientRect(hwnd,rect);??????//獲取用戶區(qū)域的大小
//格式話文本輸出
DrawText(hdc,TEXT("WindowsContent?:?I?am?a?developer.?我為計(jì)算機(jī)而生。"),
-1,rect,DT_SINGLELINE?|?DT_CENTER?|?DT_VCENTER);
EndPaint(hwnd,ps);?????//以EndPaint結(jié)束,釋放設(shè)備描述表句柄
return?0;
//窗口消亡
case?WM_DESTROY:?MessageBox(NULL,"MessageContent?:?This?is?WM_DESTROY,這是?WM_DESTROY。",
"MessageTiTle?這是對(duì)話框的標(biāo)題",MB_OK);
PostQuitMessage(0);
return?0;
}
//凡是窗口函數(shù)不予處理的消息應(yīng)交由windows默認(rèn)消息處理函數(shù)DefWindowProc處理
return?DefWindowProc(hwnd,message,wParam,lParam);
}
是處理2色值問(wèn)題的程序嗎?
我也有和你一樣的苦衷啊。。。。。。。
呵呵。。
Tc中用initgraph()函數(shù)可以切換到圖形模式,用closegraph()可以從圖形模式切換回字符模式。
initgraph()和closegraph()都是圖形函數(shù),使用圖形函數(shù)必須包括頭文件"graphics.h"。
void far i nitgraph(int far *graphdriver, int far *graphmode,char far *pathtodriver);
graphdriver是指向圖形驅(qū)動(dòng)序號(hào)變量的指針,
graphmode是在graphdriver選定后,指向圖形顯示模式序號(hào)變量的指針,
pathtodriver表示存放圖形驅(qū)動(dòng)文件的路徑。
圖形驅(qū)動(dòng)序號(hào)不同,圖形驅(qū)動(dòng)文件也不同。序號(hào)為VGA圖形驅(qū)動(dòng)對(duì)應(yīng)"egavga.bgi"這個(gè)圖形驅(qū)動(dòng)文件。
"egavga.bgi"一般在 Tc目錄下
例如:
-------
#include graphics.h
int Drive,Mode=DETECT;
initgraph(Drive,Mode,""); //圖形顯示器、顯示模式、路徑自動(dòng)檢測(cè)
運(yùn)行時(shí)需要在當(dāng)前目錄下存在 EGAVGA.BGI文件
在TC\BGI目錄底下
-------
如果編譯后的.exe文件在另外一個(gè)目錄(如編譯后的.exe文件在D:\MyTc 目錄下,而編譯器的程序和.BGI文件在C:\Turboc\bin 目錄下,則需要填上BGI文件的路徑
例如:
initgraph(Drive,Mode,"C:\\Turboc\\bgi");