1. 程式人生 > >C語言中在VS2017中構建圖形介面基礎知識點

C語言中在VS2017中構建圖形介面基礎知識點

一.initgraph函式(講解)轉自:https://blog.csdn.net/zhao_fu_lu/article/details/23961111

1.initgraph():初始化圖形系統

                  (1)  函式原型:void far initgraph(int far *graphdriver,int far *graphmode,char far *pathtodriver);

                                  graphdriver:上漲指向圖形驅動序號變數的指標

                                  graphmode:在graphdriver確定後,指向圖形顯示模式序號變數的指標

                                  pathtodriver:表示存放圖形驅動檔案的路徑

                  (2)   標頭檔案:graphics.h

                            不同的顯示器介面卡有不同的圖形解析度(即使是同一個顯示器介面卡,在不同模式下也有不同的解析度)

                            在未作圖之前,必須根據顯示器介面卡種類將顯示器設定成為某種圖形格式。

                           在未設定圖形格式之前,微機系統預設螢幕為文字格式(80列,25行字元模式),此時所有的圖形函式都不能工作。

                           設定螢幕為圖形模式,可以用下列圖形化初始函式:void far initgraph(int far *gdriver,int far *gmode,char *path);

                          gdriver和gmode表示圖形驅動.顯示模式,path是指圖形驅動程式所在的目錄路徑。

                          圖形驅動程式由Turbo C出版商提供,副檔名為.BGI。根據不同的圖形介面卡有不同的圖形驅動程式。

                  (3)初始化繪圖環境

                      HWWD initgraph(

                                                  int width;//繪製環境的寬度

                                                  int height;//繪製環境的高度

                                                  int flag=NULL//繪製環境的樣式,預設為NULL,可以為以下值

                                                 );

   值     NOCLOSE                                 NOMINIMIZE                               SHOWCONSOLE      

  含義  禁用繪圖環境的關閉按鈕      禁用繪圖環境的最小化按鈕                     保留原控制檯視窗









2.Turbo C提供了一個自動檢測顯示器硬體的函式,其呼叫格式為:

              void far detectgraph(int *gdriver,*gmode);其中圖形驅動和顯示模式與上面相同

              #include <graphics.h>//使用圖形初始化函式設定VGA高解析度圖形模式
            int main()
               {
                  int gdriver, gmode;
                  gdriver=VGA;
                  gmode=VGAHI;
                  initgraph(&gdriver, &gmode, "c:\\tc");

                  bar3d(100, 100, 300, 250, 50, 1); /*畫一長方體*/

                       getch();                                          

                  closegraph();
                   return 0;

                  } 

註釋:bar3d三維條形圖  用法:void far bar3d{int left,int top,//三維空間矩形長條圖正面的左上角座標

                                                                          int right,int bottom,//三維空間矩形長條圖正面的右下角圖示

                                                                          int depth,//三維空間矩形長條圖的深度(即陰影)

                                                                          int topflag//設定是否繪製三維空間長條圖的頂部

                                                                         };


      //自動進行硬體測試後進行圖形初始化

      #include <graphics.h>

  int main()
  {

  int gdriver, gmode;                                                                        /int gdriver=DETECT,gmode;

  detectgraph(&gdriver, &gmode);           /*自動測試硬體*/
  printf("the graphics driver is %d, mode is %d\n", gdriver,
  gmode);                                                 /*輸出測試結果*/
  getch();
  initgraph(&gdriver, &gmode, "c:\\tc");                                         initgraph(&gdriver,&gmode,"c:\\tc");
                                                              /* 根據測試結果初始化圖形*/
  bar3d(10, 10, 130, 250, 20, 1);
  getch();
  closegraph();
  return 0;

  } 

上述程式中先對圖形顯示器自動檢測,然後再用圖形初始化函式進行初始化設定,但Turbo C提供了一種更簡單的方法,即用gdriver=DETECT語句後再跟initgraph()函式就行了。採用了這種方法後,上例可改為:上述註解

另外,Turbo C提供了退出圖形狀態的函式closegraph(),其呼叫格式為void far closegraph();呼叫該函式後可退出圖形雜狀態而進入文字格式(Turbo C預設方式),並釋放用於儲存驅動程式和字型的系統記憶體。

       #include "graphics.h"
  #include "stdio.h"
  int main(void) 
  { 
                                                                   /* request auto detection */ 
  int gdriver = DETECT, gmode, errorcode; 
                                                                 /* initialize graphics mode */ 
  initgraph(&gdriver, &gmode, ""); 
                                                                 /* read result of initialization */ 
  errorcode = graphresult(); 
  if (errorcode != grOk) /* an error occurred */ 
  { 
  printf("Graphics error: %s\n", grapherrormsg(errorcode)); 
  printf("Press any key to halt:"); 
  getch(); 
  exit(1);                                                 /* return with error code */ 
  } 
                                                             /* draw a line */ 
  line(0, 0, getmaxx(), getmaxy()); 
                                                               /* clean up */ 
  getch(); 
  closegraph(); 
  return 0; 

  }

二.在繪製圖形色彩時候遇到的隨機函式:rand函式(線性同餘法)(產生隨機數)和srand(初始化隨機種子)

   轉自:https://blog.csdn.net/github_37287822/article/details/77392130

標頭檔案:<stdlib.h>

(1)定義函式:int rand(void)

函式功能:產生隨機數

函式說明:因為rand的內部實現是用線性同餘法做的,他不是真的隨機數,只不過是因為其週期特別長,所以,在一定的範圍裡可看成是隨機的。

                 rand()會返回一隨機數值,範圍在0至RAND_MAX 間。

               在呼叫此函式產生隨機數前,必須先利用srand()設好隨機數種子,如果未設隨機數種子,rand()在呼叫時會自動設隨機數種子為1。 

返回值: 返回0至RAND_MAX之間的隨機整數值,RAND_MAX的範圍最少是在32767之間(int),即雙位元組(16位數)。若用unsigned int 雙位元組是65535,四位元組是4294967295的整數範圍。且0-RAND_MAX每個數字被選中的機率是相同的。

rand()產生的是假隨機數字,每次執行時是相同的。若要不同,以不同的值來初始化它.初始化的函式就是srand()。

(2)srand函式

標頭檔案:<stdlib.h>

定義函式:void srand(unsigned int seed);

函式說明:srand()用來設定rand()產生隨機數時的隨機數種子。引數seed必須是個整數,通常可以利用getpid()或者time(0)的返回值來當作seed。如果每次seed都設相同值,rand()所產生的隨機數值每次就會一樣。

三.

(1)

DLL 檔案: winmm 或者 winmm.dll

  DLL 名稱: Windows Multimedia API

  描述:

  winmm.dll是Windows多媒體相關應用程式介面,用於低檔的音訊和遊戲手柄。

       #pragma comment( comment-type ,["commentstring"] )

       comment-type是一個預定義的識別符號,指定註釋的型別,應該是compiler,exestr,lib,linker之一

       commentstring是一個提供為comment-type提供附加資訊的字串。

       playsound的具體用法轉自:https://blog.csdn.net/ccx_john/article/details/12494129

(2)

 RGB(red,green,blue)

 RGB函式就是(1*R+256*G+65536*B)

 文字:settextcolor(YELLOW);(顏色)
            settextstyle(,,L”字型“);//高,寬

            outtextsy(x,y,L”“); / /out(輸出).text(文字).指定座標輸出文字

四.#include<time.h> 庫函式詳解

轉自: http://blog.csdn.net/chenyiming_1990/article/details/8682552

兩個型別:

time_t:表示距離 UTC 時間 1970-01-01 00:00:00 的秒數。也叫做日曆時,型別是  long
clock_t: 只用於程式計時,貌似其他的沒它什麼事。

struct tm:通常用於儲存本地時。

五.