整體來講, 用C語言實現(xiàn)圖形化需要API函數(shù), 在windows.h中聲明.
十余年的廈門網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。營銷型網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整廈門建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“廈門網(wǎng)站設(shè)計”,“廈門網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。
但是它和C語言控制臺下編程的區(qū)別可以說除了語法一樣, 什么東西都不剩下. C庫函數(shù)能實現(xiàn)的, API函數(shù)也全部都能實現(xiàn), 而且功能更強(qiáng)大. 因此需要記憶的東西也就更多了, 但是絕對不可能把所有的API函數(shù)的用法全部知道, 只是知道大概, 一部分. 剩下不清楚, 或完全不懂的可以直接上MSDN, 百度百科或其他網(wǎng)站上去查詢. 但是如果其他網(wǎng)站與MSDN說明有出入, 一定要以MSDN的為準(zhǔn).
所以"怎么用C實現(xiàn)圖形化界面"在這里是不可能能說清的.
一) 像素函數(shù)
putpiel() 畫像素點函數(shù)
getpixel()返回像素色函數(shù)
(二) 直線和線型函數(shù)
line() 畫線函數(shù)
lineto() 畫線函數(shù)
linerel() 相對畫線函數(shù)
setlinestyle() 設(shè)置線型函數(shù)
getlinesettings() 獲取線型設(shè)置函數(shù)
setwritemode() 設(shè)置畫線模式函數(shù)
(三)、多邊形函數(shù)
rectangle() 畫矩形函數(shù)
bar() 畫條函數(shù)
bar3d() 畫條塊函數(shù)
drawpoly() 畫多邊形函數(shù)
(四)、 圓、弧和曲線函數(shù)
getaspectratio()獲取縱橫比函數(shù)
circle()畫圓函數(shù)
arc() 畫圓弧函數(shù)
ellipse()畫橢圓弧函數(shù)
fillellipse() 畫橢圓區(qū)函數(shù)
pieslice() 畫扇區(qū)函數(shù)
sector() 畫橢圓扇區(qū)函數(shù)
getarccoords()獲取圓弧坐標(biāo)函數(shù)
(五)、 填充函數(shù)
setfillstyle() 設(shè)置填充圖樣和顏色函數(shù)
setfillpattern() 設(shè)置用戶圖樣函數(shù)
floodfill() 填充閉域函數(shù)
fillpoly() 填充多邊形函數(shù)
getfillsettings() 獲取填充設(shè)置函數(shù)
getfillpattern() 獲取用戶圖樣設(shè)置函數(shù)
(六)、圖像函數(shù)
imagesize() 圖像存儲大小函數(shù)
getimage() 保存圖像函數(shù)
putimage() 輸出圖像函數(shù)
空窗口:
#include?windows.h
/*?所有的窗口輸出到這里去?*/
LRESULT?CALLBACK?WndProc(HWND?hwnd,?UINT?Message,?WPARAM?wParam,?LPARAM?lParam)?{
switch(Message)?{
/*?停止后,告訴主線程停止?*/
case?WM_DESTROY:?{
PostQuitMessage(0);
break;
}
/*?所有其他消息(很多人)都使用默認(rèn)程序處理?*/
default:
return?DefWindowProc(hwnd,?Message,?wParam,?lParam);
}
return?0;
}
/*?Win32?GUI程序的主要功能:執(zhí)行從這里開始?*/
int?WINAPI?WinMain(HINSTANCE?hInstance,?HINSTANCE?hPrevInstance,?LPSTR?lpCmdLine,?int?nCmdShow)?{
WNDCLASSEX?wc;?/*?窗口的屬性結(jié)構(gòu)?*/
HWND?hwnd;?/*?"句柄"?一個窗口的標(biāo)識符?*/
MSG?Msg;?/*?所有消息的臨時位置?*/
/*?修改結(jié)構(gòu)和設(shè)置的東西?*/
memset(wc,0,sizeof(wc));
wc.cbSize ?=?sizeof(WNDCLASSEX);
wc.lpfnWndProc ?=?WndProc;?/*?將發(fā)送消息的地方?*/
wc.hInstance ?=?hInstance;
wc.hCursor ?=?LoadCursor(NULL,?IDC_ARROW);
/*?白色,COLOR_WINDOW是系統(tǒng)定義的顏色值,其數(shù)值是5?*/
wc.hbrBackground?=?(HBRUSH)(COLOR_WINDOW+1);
wc.lpszClassName?=?"WindowClass";
wc.hIcon ?=?LoadIcon(NULL,?IDI_APPLICATION);?/*?載入一個標(biāo)準(zhǔn)圖標(biāo)?*/
wc.hIconSm ?=?LoadIcon(NULL,?IDI_APPLICATION);?/*?使用名稱“A”來作為該項目圖標(biāo)?*/
if(!RegisterClassEx(wc))?{
MessageBox(NULL,?"Window?Registration?Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
return?0;
}
hwnd?=?CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","Caption",WS_VISIBLE|WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,?/*?x?*/
CW_USEDEFAULT,?/*?y?*/
640,?/*?寬度?*/
480,?/*?高度?*/
NULL,NULL,hInstance,NULL);
if(hwnd?==?NULL)?{
MessageBox(NULL,?"Window?Creation?Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
return?0;
}
/*
所有的輸入處理和發(fā)送到窗口過程。
注意,這個塊代碼流,直到它接收到的東西,?
所以回路不會產(chǎn)生不合理的高CPU使用率。?
*/
while(GetMessage(Msg,?NULL,?0,?0)??0)?/*?如果沒有收到任何錯誤…*/
{
TranslateMessage(Msg);?/*?如果存在翻譯關(guān)鍵碼字符*/
DispatchMessage(Msg);?/*?發(fā)送它到WndProc?*/
}
return?Msg.wParam;
}
標(biāo)題、背景和前景顏色、窗口大小等等這些可以用API函數(shù)實現(xiàn)
#include?windows.h//加入頭文件就可調(diào)用API函數(shù)
int?main()
{
HWND?hWnd=GetForegroundWindow();
HANDLE?handle=GetStdHandle(STD_OUTPUT_HANDLE);
SetWindowText(hWnd,"測試");//標(biāo)題
SetConsoleTextAttribute(handle,FOREGROUND_GREEN|BACKGROUND_BLUE);//前景、背景顏色
return?0;
}
VC6.0 能夠在 XP 下很好的運行,無需進(jìn)行額外的設(shè)置,但在 Win7、Win8 和 Win10 下,安裝完成后還要修改兼容模式才可以。解決方法如下:
一、對于Win7和Win10,需要將VC6.0的兼容模式修改為 Windows XP SP3:
1、在 VC6.0 的快捷方式或開始菜單上單擊鼠標(biāo)右鍵,選擇“屬性”。
2、在彈出的對話框中,將兼容模式修改為Windows XP SP3 或 SP2,如下圖所示。
二、相比Win7和Win10,Win8稍微麻煩一些,要先將 MSDEV.EXE 重命名為 MSDEV3.EXE,再按照上面的步驟設(shè)置兼容模式。
1、找到MSDEV.EXE所在,MSDEV.EXE是 VC6.0 的主程序,位于 VC6.0 的安裝目錄下,可以在屬性面板中快速找到 MSDEV.EXE。
2、將MSDEV.EXE重命名為MSDEV3.EXE。
3、在 VC6.0 的快捷方式或開始菜單上單擊鼠標(biāo)右鍵,選擇“屬性”。
4、在彈出的對話框中,將兼容模式修改為Windows XP SP3 或 SP2,如下圖所示。
以下是graphics.h中的聲明,常用的都比較好懂,實在不行就查查MSDN吧,上面有好多名字類似的函數(shù)功能都一樣.
void far _Cdecl arc(int x, int y, int stangle, int endangle,
int radius);
void far _Cdecl bar(int left, int top, int right, int bottom);
void far _Cdecl bar3d(int left, int top, int right, int bottom,
int depth, int topflag);
void far _Cdecl circle(int x, int y, int radius);
void far _Cdecl cleardevice(void);
void far _Cdecl clearviewport(void);
void far _Cdecl closegraph(void);
void far _Cdecl detectgraph(int far *graphdriver,int far *graphmode);
void far _Cdecl drawpoly(int numpoints, int far *polypoints);
void far _Cdecl ellipse(int x, int y, int stangle, int endangle,
int xradius, int yradius);
void far _Cdecl fillellipse( int x, int y, int xradius, int yradius );
void far _Cdecl fillpoly(int numpoints, int far *polypoints);
void far _Cdecl floodfill(int x, int y, int border);
void far _Cdecl getarccoords(struct arccoordstype far *arccoords);
void far _Cdecl getaspectratio(int far *xasp, int far *yasp);
int far _Cdecl getbkcolor(void);
int far _Cdecl getcolor(void);
struct palettetype * far _Cdecl getdefaultpalette( void );
char * far _Cdecl getdrivername( void );
void far _Cdecl getfillpattern(char far *pattern);
void far _Cdecl getfillsettings(struct fillsettingstype far *fillinfo);
int far _Cdecl getgraphmode(void);
void far _Cdecl getimage(int left, int top, int right, int bottom,
void far *bitmap);
void far _Cdecl getlinesettings(struct linesettingstype far *lineinfo);
int far _Cdecl getmaxcolor(void);
int far _Cdecl getmaxmode(void);
int far _Cdecl getmaxx(void);
int far _Cdecl getmaxy(void);
char * far _Cdecl getmodename( int mode_number );
void far _Cdecl getmoderange(int graphdriver, int far *lomode,
int far *himode);
unsigned far _Cdecl getpixel(int x, int y);
void far _Cdecl getpalette(struct palettetype far *palette);
int far _Cdecl getpalettesize( void );
void far _Cdecl gettextsettings(struct textsettingstype far *texttypeinfo);
void far _Cdecl getviewsettings(struct viewporttype far *viewport);
int far _Cdecl getx(void);
int far _Cdecl gety(void);
void far _Cdecl graphdefaults(void);
char * far _Cdecl grapherrormsg(int errorcode);
void far _Cdecl _graphfreemem(void far *ptr, unsigned size);
void far * far _Cdecl _graphgetmem(unsigned size);
int far _Cdecl graphresult(void);
unsigned far _Cdecl imagesize(int left, int top, int right, int bottom);
void far _Cdecl initgraph(int far *graphdriver,
int far *graphmode,
char far *pathtodriver);
int far _Cdecl installuserdriver( char far *name, int huge (*detect)(void) );
int far _Cdecl installuserfont( char far *name );
void far _Cdecl line(int x1, int y1, int x2, int y2);
void far _Cdecl linerel(int dx, int dy);
void far _Cdecl lineto(int x, int y);
void far _Cdecl moverel(int dx, int dy);
void far _Cdecl moveto(int x, int y);
void far _Cdecl outtext(char far *textstring);
void far _Cdecl outtextxy(int x, int y, char far *textstring);
void far _Cdecl pieslice(int x, int y, int stangle, int endangle,
int radius);
void far _Cdecl putimage(int left, int top, void far *bitmap, int op);
void far _Cdecl putpixel(int x, int y, int color);
void far _Cdecl rectangle(int left, int top, int right, int bottom);
void far _Cdecl restorecrtmode(void);
void far _Cdecl sector( int X, int Y, int StAngle, int EndAngle,
int XRadius, int YRadius );
void far _Cdecl setactivepage(int page);
void far _Cdecl setallpalette(struct palettetype far *palette);
void far _Cdecl setaspectratio( int xasp, int yasp );
void far _Cdecl setbkcolor(int color);
void far _Cdecl setcolor(int color);
void far _Cdecl setfillpattern(char far *upattern, int color);
void far _Cdecl setfillstyle(int pattern, int color);
unsigned far _Cdecl setgraphbufsize(unsigned bufsize);
void far _Cdecl setgraphmode(int mode);
void far _Cdecl setlinestyle(int linestyle, unsigned upattern,
int thickness);
void far _Cdecl setpalette(int colornum, int color);
void far _Cdecl setrgbpalette(int colornum,
int red, int green, int blue);
void far _Cdecl settextjustify(int horiz, int vert);
void far _Cdecl settextstyle(int font, int direction, int charsize);
void far _Cdecl setusercharsize(int multx, int divx,
int multy, int divy);
void far _Cdecl setviewport(int left, int top, int right, int bottom,
int clip);
void far _Cdecl setvisualpage(int page);
void far _Cdecl setwritemode( int mode );
int far _Cdecl textheight(char far *textstring);
int far _Cdecl textwidth(char far *textstring);
/***** graphics drivers *****/
int _Cdecl registerbgidriver(void (*driver)(void));
int far _Cdecl registerfarbgidriver(void far *driver);
/* !! These "functions" are NOT user-callable !! */
/* !! They are there just so you can link in graphics drivers !! */
void _Cdecl CGA_driver(void);
void _Cdecl EGAVGA_driver(void);
void _Cdecl IBM8514_driver(void);
void _Cdecl Herc_driver(void);
void _Cdecl ATT_driver(void);
void _Cdecl PC3270_driver(void);
extern int far _Cdecl CGA_driver_far[];
extern int far _Cdecl EGAVGA_driver_far[];
extern int far _Cdecl IBM8514_driver_far[];
extern int far _Cdecl Herc_driver_far[];
extern int far _Cdecl ATT_driver_far[];
extern int far _Cdecl PC3270_driver_far[];
/***** graphics fonts *****/
int _Cdecl registerbgifont(void (*font)(void));
int far _Cdecl registerfarbgifont(void far *font);
/* !! These "functions" are NOT user-callable, !! */
/* !! they are there just so you can link in fonts !! */
void _Cdecl triplex_font(void);
void _Cdecl small_font(void);
void _Cdecl sansserif_font(void);
void _Cdecl gothic_font(void);
extern int far _Cdecl triplex_font_far[];
extern int far _Cdecl small_font_far[];
extern int far _Cdecl sansserif_font_far[];
extern int far _Cdecl gothic_font_far[];
1、新建一個C項目,點擊文件,新建,項目,選擇C++Win32控制臺應(yīng)用。
2、在項目向?qū)е性O(shè)置,會默認(rèn)生產(chǎn)一個項目框架。
3、可以使用color函數(shù)變化字體和窗口的顏色。
4、要在C語言中實現(xiàn)顏色的變化,需要引入windows.h頭文件,即#include windows.h方可調(diào)用color函數(shù),system("color 02")類似的,但不能先寫一個循環(huán),循環(huán)color 后面的顏色。但可以直接把color 02當(dāng)作字符串來對待,對后兩個字符串進(jìn)行循環(huán)變化。
5、這里的測試代碼如下所示:char a[9]="color 02";?? ?int i;?? ?for(i=0;i=5;i++)?? ?{?? ??? ?a[6]=(char)((int('0'))+i+2);???? //顏色交替出現(xiàn)/背景顏色?? ??? ?a[7]=(char)((int('0'))+i);?????? //字體顏色?? ??? ?system(a);?? ??? ?system("cls");?? ??? ?printf("\n\n\n\n\n\n\n\n\t\t\4 \4 \4Welcome\4 \4 \4");?? ??? ?printf("\n\n\n\n\n");?? ??? ?Sleep(1000);?????????????????? //延時1秒?? ??? ?system("cls");?? ?}?? system("cls")。
6、而上面使用到的system("cls")是清屏函數(shù),直接可以到cmd中輸入cls即可實現(xiàn)清屏的功能。下面就是測試的效果了。