程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 不一樣的控制台程序-----在控制台中輸出圖片

不一樣的控制台程序-----在控制台中輸出圖片

編輯:關於C語言

      做過程序設計的朋友們當然記得我們學習程序設計的控制台程序,永遠是那麼一個黑黑的窗口。我們在裡面盡量做著我們的標准輸出,但是我們是否想過控制台也有不為我們所知的一些秘密。在我的上一篇博文中,我寫過控制台程序其實和我們的界面程序設計是一樣的,這裡我想來像大家展示並且證明一下我的觀點!(*^__^*) 嘻嘻……)希望大家喜歡。        在Windows下,我想大家都很清楚的知道我們創建了一個窗口,操作系統自然會給我們的窗口在系統內核中會有一個標識--也就是我們通常說的HWND窗口句柄)。首先,我們大家猜一下,我們的控制台程序有沒有窗口呢!呵呵…,當然它是有的,不然我的黑框框是什麼呢!它就是一個名副其實的窗口。那我們的控制台程序有沒有窗口句柄呢?我想開始大家對於這個問題肯定有點猶豫,因為我們做了很長時間的程序設計都沒見過也沒人告訴我們,我們的控制台的程序有一個句柄Hwnd)。上面說了,在操作系統內部對於每個窗口操作系統都會給予一個句柄,當然對於我們的控制台,操作系統也不會特殊對待,它同樣也有一個Hwnd。        好了,大家都知道控制台程序有窗口句柄。但是他在那裡呢?我們怎樣得到它呢?各位朋友莫急,我這就告訴大家。下面是一個簡單的獲取控制台窗口句柄的例子。  #include <stdio.h>  #include <windows.h>     typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)();   PROCGETCONSOLEWINDOW GetConsoleWindow;   Int main() {        HMODULE hKernel32 = GetModuleHandle("kernel32");        GetConsoleWindow= (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow");        HWND cmd=GetConsoleWindow(); }    首先,我們的需要的系統API在Kernel32裡面,然後我們導出GetConsoleWindow函數我們就可以實現獲得窗口句柄!那麼我們現在得到窗口句柄,我們能干什麼呢?在這裡我告訴大家一個很興奮的事,我們得到了窗口句柄,在圖像界面下能做的我們現在都可以做!如果你不信,你在窗口中畫個圓看看你就知道我沒騙你了,不過記得要改變畫刷的顏色啊!)。 下面是我在控制台中顯示一幅位圖的代碼,大家也可以試試看,絕對是可行的!(要把位圖復制到你所建Project目錄下面,並且改名為1.bmp) #include <stdio.h> #include <windows.h>   typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)(); PROCGETCONSOLEWINDOW GetConsoleWindow;   Int main() {        HMODULE hKernel32 = GetModuleHandle("kernel32");        GetConsoleWindow= (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow");        HWND cmd=GetConsoleWindow();        HDC dc = GetDC(cmd);        HBITMAP hBitmap;        hBitmap=(HBITMAP)LoadImage            (NULL,"1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);        HDC cmdmem = CreateCompatibleDC(dc);        SelectObject(cmdmem , hBitmap);        BitBlt(dc , 100 , 100 , 300 , 300 , cmdmem , 0 , 0 , SRCCOPY);        Return 1; }       現在大家覺得怎麼樣!大家同意我上一篇博文的觀點嗎!呵呵…)我們現在可以完成對控制台做你想做的一切!Do it Now!       下面在介紹一些實用的控制台函數,這裡我就不過多的介紹了,如果有興趣的朋友可以查看MSDN或者Google! GetSystenMenu-----------------------------------取得控制台的系統菜單 EnableMenuItem----------------------------------對菜單項的操作 ReadConsoleOutputCharacter-------------------從控制台緩沖區中讀出文字並保存到變量中 GetStdHandle--------------------------------------取得標准輸入,輸出,錯誤的句柄 SetConsoleCursorPosition-----------------------設置控制台光標的位置 ScrollConsoleScreenBuffer----------------------設置控制台回滾的Buffer大小 SetConsoleDisplayMode-------------------------設置控制台顯示模式是否全屏) mouse_event---------------------------------------模擬鼠標操作 ReadConsoleInput--------------------------------命令行的控制輸出,獲取命令行的信息 GetConsoleMode---------------------------------可以讓控制台支持鼠標 FillConsoleOutputAttribute---------------------彩色控制台設置輸出的顏色 SetConsoleTextAttribute------------------------設置文本顏色   如果對於控制台有不同理解的朋友,我希望可以在我的博客中和我交流,讓我們都能有更深層次的理解。

本文出自 “HelloWorld” 博客,請務必保留此出處http://vanshell.blog.51cto.com/890307/428651

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved