模仿dos窗口下的windows窗口程序
本程序含有不明bug,有时候退格之后,再击键会不听使唤。。。也许是因为,windows其他程序对内核的占用而导致了本程序部分键盘码丢失吧,具体原因不明。
#include <windows.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("KeyView1") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow (szAppName, TEXT ("Keyboard Message Viewer #1"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static int cxClientMax, cyClientMax, cxClient, cyClient, cxChar, cyChar , cLinesMax;
HDC hdc ;
int i = 0, iType, j ;
PAINTSTRUCT ps ;
static TCHAR szBuffer[70] ; //szKeyName [32] ;
PTCHAR pcha ;
TEXTMETRIC tm ;
static RECT rectScroll ;
static int * tpmsg, *ina;
static int isz = 0;
TCHAR szTop[ 20 ] = L"请用键盘输入:" ;
switch (message)
{
case WM_CREATE:
hdc = GetDC (hwnd) ;
SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ; //等宽字体
GetTextMetrics (hdc, &tm) ;
cxChar = tm.tmAveCharWidth ;
cyChar = tm.tmHeight ;
ReleaseDC (hwnd, hdc) ;
return 0;
/*case WM_DISPLAYCHANGE: //窗口分辨率改变时会发送这个消息
// Get maximum size of client area
cxClientMax = GetSystemMetrics (SM_CXMAXIMIZED) ;
cyClientMax = GetSystemMetrics (SM_CYMAXIMIZED) ;
//窗口最大化缺省值
// Get character size for fixed-pitch font */
case WM_SIZE:
cxClient = LOWORD (lParam) ;
cyClient = HIWORD (lParam) ;
// Calculate scrolling rectangle
if( tpmsg )
free( tpmsg );
cLinesMax = cxClient / cxChar ;
tpmsg = ( int * ) malloc ( cLinesMax * sizeof( int ) ) ;
rectScroll.left = 0 ;
rectScroll.right = cxClient ;
rectScroll.top = cyChar ;
rectScroll.bottom = 2 * cyChar;
InvalidateRect (hwnd, NULL, TRUE) ;
return 0 ;
case WM_CHAR:
switch( wParam )
{
case VK_RETURN:
break;
case VK_BACK:
isz--;
InvalidateRect( hwnd, &rectScroll, TRUE ) ; //是第二行变为无效区域,并把WM_PAINT消息放入队列
UpdateWindow( hwnd ) ; //判断是否有无效区域( WM_PAINT ),如果有就立刻刷新屏幕
break;
default:
szBuffer[ isz++ ] = wParam ;
InvalidateRect( hwnd, &rectScroll, TRUE ) ; //是第二行变为无效区域,并把WM_PAINT消息放入队列
UpdateWindow( hwnd ) ; //判断是否有无效区域( WM_PAINT ),如果有就立刻刷新屏幕
break;
}
return 0;
case WM_PAINT:
hdc = BeginPaint( hwnd, &ps ) ;
SelectObject( hdc, GetStockObject( SYSTEM_FIXED_FONT ) );
SetBkMode( hdc, TRANSPARENT ) ;
if( isz > 69 )
MessageBox( hwnd, TEXT("数组越界"), TEXT("isz"), MB_OK ) ;
pcha = ( PTCHAR ) malloc ( ( 70 ) * sizeof( TCHAR ) ) ;
wcscpy( pcha, szBuffer ) ; //tchar 版本的 strcpy函数
TextOut( hdc, 0, 0, szTop, lstrlen( szTop ) ) ;
TextOut( hdc, 0, cyChar, pcha, isz ) ;
free( pcha ) ;
EndPaint( hwnd, &ps ) ;
return 0;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
模仿dos窗口下的windows窗口程序相关推荐
- wine在linux的运行效率,Wine(在Linux下执行Windows应用程序)V1.9.24稳定版
Wine(在Linux下执行Windows应用程序)V1.9.24稳定版 wine是一款优秀的Linu系统平台下的模拟器软件,wine用来将Windows系统下的软件在Linux系统下稳定运行,该软件 ...
- linux 调用 wine 程序,Wine官方版|Wine v3.8 Development在Linux下执行Windows应用程序 官方英文版 - 维维软件园...
Wine官方版下载,Wine是小编为大家整理的一款在Linux操作系统下履行有些Windows应用程序的工具程序,如果你想在Linux下运行Windows程序,Wine是你的必备工具,Wine在X和U ...
- 窗口封装类与Windows窗口实例的关系-3、CWnd如何处理窗口消息
在窗口消息处理方面,CWnd使用了窗口子类化和消息映射机制,关于消息映射的知识将在第9章详述,下面着重阐述CWnd是如何应用子类化处理窗口消息的.其实,在6.2节的示例中,CBaseWnd已经使用了与 ...
- 在DOS环境下制作Windows启动盘
制作一张系统启动盘可以在Windows系统出现问题的时候,使用启动盘来引导系统,然后再查找故障并加以解决,下面就来介绍一下制作启动盘的方法. 1.在Windows中创建启动盘 打开控制面板,双击&qu ...
- linux解决windows应用程序,关于Linux下使用Windows应用程序的尝试总结
mssqlserver数据导出到另外一个数据库 mssqlserver数据导出到另外一个数据库 准备源数据库,找到想要导出的数据库,右键选择"任务"再选择"导出数据&qu ...
- 【MFC】Windows窗口样式
00. 目录 文章目录 00. 目录 01. 框架窗口样式 02. 静态样式 03. 窗口样式 04. 扩展的窗口样式 05. 附录 01. 框架窗口样式 框架窗口样式适用于 CFrameWnd 类 ...
- 在DOS环境下win7系统与win10系统的编程、链接及运行步骤(非常适合第一次学习DOS的小萌新入手)
文中如有不足或错误之处,欢迎大家指正! 任务:编写一个简单的汇编程序(在屏幕上打印 Hello World!),使该程序能够链接.运行,最终得到正确结果. win7和win10编程时对应的资料放在以下 ...
- linux里运行windows,在Linux上运行Windows应用程序
当前位置:我的异常网» Linux/Unix » 在Linux上运行Windows应用程序 在Linux上运行Windows应用程序 www.myexceptions.net 网友分享于:2015- ...
- 解决双硬盘下一个windows两个linux操作系统的grub引导问题
问题表现:联想扬天老台式机,机械硬盘安装有windows10和UbuntuStudio,后加装一块SSD后在其上安装了Manjaro,安装的时候并未关闭机械硬盘,重启后Manjaro的grub主引导菜 ...
最新文章
- 5.2 测试计划和估算
- iOS开展——全球应对MotionEvent
- java静态内部类(嵌套类)
- 【阿里云OSS】403错误,AccessDenied:The bucket you access does not belong to you.
- 任务计划程序设置软件在电脑重启后启动
- 【092】韦达定理在一元n次方程中的推广
- 四足机器人足端轨迹规划--摆线
- 支持OnVif协议的摄像头直播推流php
- 五个最适合做博客的开源系统 开源免费大量精美模板使用!
- 深度解读物联网区块链“IOTA”:不仅解决IoT痛点,还解决区块链痛点
- HTTP状态码的含义
- 上海交大和MIT提出的软性机械手,可提供实时的触觉控制
- Android measure方法详解
- go time.after
- python 语法基础篇
- EasyPR--开发详解(9)文字定位
- 基于VHDL语言的状态机设计
- xcode怎样配置GLUT和GLTools
- spark和presto比较
- 应急响应-window入侵排查
热门文章
- Unity任意方向拉伸物体
- 什么是对齐,为什么要对齐
- 家谱文化④:江苏百岁老人多达8375人,健康长寿的秘密都写在家谱
- 自建服务器和购买云服务器的过程总结
- 未睹棺椁先哭君——谷歌墓志铭
- 第一次软工作业(构建之法)
- docker之user_remap
- 顺丰云服务器,基于华为云云原生解决方案,顺丰“快递+”这一项业务效率提升了48倍...
- python对图片颜色校正,使用Python PIL更改图像色调
- 4.3、Android Studio突破64K方法限制