不一样的控制台程序-----在控制台中输出图片

Posted haiross

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不一样的控制台程序-----在控制台中输出图片相关的知识,希望对你有一定的参考价值。

不一样的控制台程序-----在控制台中输出图片


标签: 控制台 Console C/C++ 窗口 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。 http://vanshell.blog.51cto.com/890307/428651       做过程序设计的朋友们当然记得我们学习程序设计的控制台程序,永远是那么一个黑黑的窗口。我们在里面尽量做着我们的标准输出,但是我们是否想过控制台也有不为我们所知的一些秘密。在我的上一篇博文中,我写过控制台程序其实和我们的界面程序设计是一样的,这里我想来像大家展示并且证明一下我的观点!((*^__^*) 嘻嘻……)希望大家喜欢。        在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

以上是关于不一样的控制台程序-----在控制台中输出图片的主要内容,如果未能解决你的问题,请参考以下文章

如何在C语言中添加背景图片

控制台程序设计

C++中如何实现子进程打开控制台窗口

为啥 .json 输出中的内置指标“vus”不反映控制台输出?

用PLC控制伺服电机控制的程序

在控制台应用程序中显示图像