C語言控制台窗口圖形界面編程(一)


本系列文章改編自《C語言控制台窗口界面編程(修正版)》。本系列文章會拋棄一些原文中難懂難理解且不常用的部分,並修改了部分樣例程序。只為了更加清晰地學習C語言的控制台窗口界面編程。而想要更加深入的了解本系列文章,請閱讀《C語言控制台窗口界面編程(修正版)》。

 

       《C語言控制台窗口界面編程(修正版)》下載地址:http://download.csdn.net/detail/jzqt_t/7471013

 

       在Windows操作系統下用C語言編寫控制台的窗口界面首先要獲取當前標准輸入和標准輸出設備的句柄。通過調用函數GetStdHandle可以獲取當前標准輸入以及輸出設備的句柄。函數原型為:

[cpp]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
  1. HANDLE GetStdHandle(DWORD nStdHandle);  
  2. /* 
  3. 其中,nStdHandle可以是 
  4. STD_INPUT_HANDLE    標准輸入設備句柄 
  5. STD_OUTPUT_HANDLE   標准輸出設備句柄 
  6. STD_ERROR_HANDLE    標准錯誤設備句柄 
  7. */  

       

 

       需要說明的是,“句柄”是Windows最常用的一個概念。它通常用來標識Windows資源(如菜單、 圖標、窗口等)和設備等對象。雖然可以把句柄理解為是一個指針變量類型,但它不是對象所在的地址指針,而是作為Windows系統內部表的索引值來使用 的。調用相關文本界面控制的API函數。這些函數可分為三類。一是用於控制台窗口操作的函數(包括窗口的緩沖區大小、窗口前景字符和背景顏色、窗口標題、大小和位置等);二是用於控制台輸入輸出的函數(包括字符屬性操作函數);其他的函數並為最后一類。通過調用CloseHandle函數來關閉輸入輸出句柄。

 

       示例程序:

[cpp]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
  1. #include <stdio.h>  
  2. #include <windows.h>  
  3. #include <conio.h>  
  4.   
  5. int main(int argc,char *argv[])  
  6. {  
  7.     HANDLE handle_out;                              //定義一個句柄  
  8.     CONSOLE_SCREEN_BUFFER_INFO screen_info;         //定義窗口緩沖區信息結構體  
  9.     COORD pos = {0, 0};                             //定義一個坐標結構體  
  10.     handle_out = GetStdHandle(STD_OUTPUT_HANDLE);   //獲得標准輸出設備句柄  
  11.     GetConsoleScreenBufferInfo(handle_out, &screen_info);   //獲取窗口信息  
  12.     _getch();   //輸入一個字符,不會顯示到屏幕上  
  13.     /* 
  14.     向整個緩沖區填充字符'A' 
  15.     其中填充的開始處為pos,坐標為{0, 0},也就是屏幕最左上角的字符處 
  16.     填充個數為screen_info.dwSize.X(緩沖區寬度,也就是橫坐標) * screen_info.dwSize.Y(緩沖區高度,也就是縱坐標) 
  17.     因此可以達到向整個緩沖區填充字符'A'的效果 
  18.     */  
  19.     FillConsoleOutputCharacter(handle_out, 'A', screen_info.dwSize.X * screen_info.dwSize.Y, pos, NULL);  
  20.     CloseHandle(handle_out);    //關閉標准輸出設備句柄  
  21.     return 0;  
  22. }  
[cpp]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
  1. //程序中,COORD和CONSOLE_SCREEN_BUFFER_ INFO是wincon.h定義的控制台結構體類型  
  2. //原型如下  
  3.   
  4. //坐標結構體  
  5. typedef struct _COORD  
  6. {  
  7.     SHORT X;  
  8.     SHORT Y;  
  9. }COORD;  
  10.   
  11. //控制台窗口信息結構體  
  12. typedef struct _CONSOLE_SCREEN_BUFFER_INFO  
  13. {  
  14.     COORD dwSize;               //緩沖區大小  
  15.     COORD dwCursorPosition;     //當前光標位置  
  16.     WORD wAttributes;           //字符屬性  
  17.     SMALL_RECT srWindow;        //當前窗口顯示的大小和位置  
  18.     COORD dwMaximumWindowSize;  // 最大的窗口緩沖區大小  
  19. }CONSOLE_SCREEN_BUFFER_INFO;  

 

  1. 還需要說明的是,雖然在C++中,iostream.h定義了cin和cout的標准輸入和輸出流對象。但它們只能實現基本的輸入輸出 操作,對於控制台窗口界面的控制卻無能為力,而且不能與stdio.h和conio.h友好相處,因為iostream.h和它們是C++兩套不同的輸入 輸出操作方式,使用時要特別注意。
  2. (

    jzqt_t

    )


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM