《Windows程序设计》之键盘


这一章的代码有点小问题,下面贴出KEYVIEW2中的部分代码。

		if(pmsg)
			free(pmsg);http://write.blog.csdn.net/postedit
		cLinesMax=cyClientMax/cyChar;
		pmsg=(PMSG)malloc(cLinesMax*sizeof(MSG));
		cLines=0;
上面是我更改后的代码,原书中的代码如下:

		if(pmsg)
			free(pmsg);
		cLinesMax=cyClientMax/cyChar;
		pmsg=malloc(cLinesMax*sizeof(MSG));
		cLines=0;
原书中没有加入强制转换,我不知道这样是否正确,但是可以编译通过,感觉应该就是这样,如果有其它想法的朋友,欢迎指点。


我感觉有些乱的是下面的代码(只是部分代码):


	static TCHAR * szFormat[2]={TEXT("%-13s %3d %-15s%c%6u %4d %3s %3s %4s %4s"),
								TEXT("%-13s 0x%04X%1s%c %6u %4d %3s %3s %4s %4s")};
			TextOut(hdc,0,(cyClient/cyChar-1-i)*cyChar,szBuffer,
				wsprintf(szBuffer,szFormat[iType],szMessage[pmsg[i].message-WM_KEYFIRST]
				,pmsg[i].wParam,(PTSTR)(iType?TEXT(""):szKeyName),
				(TCHAR)(iType?pmsg[i].wParam: ' '),LOWORD(pmsg[i].lParam),HIWORD(pmsg[i].lParam)&0xFF,
				0x01000000&pmsg[i].lParam?szYes:szNo,
				0x20000000&pmsg[i].lParam?szYes:szNo,
				0x40000000&pmsg[i].lParam?szDown:szUp,
				0x80000000&pmsg[i].lParam?szUp:szDown));

我简单的分析一下,szFormat是用来格式化字符串的。

下面的两个函数

BOOL TextOut(HDC hdc,int nXStart,int nYStart,LPCTSTR lpString,int cbString);
hdc:设备环境的句柄;nXStart:指定字符串的X坐标;nYStart:指定字符串的Y坐标;lpString:要输出的字符串;cbString:字符串长度。

返回值:调用成功返回非0,不成功返回0。

int wsprintf(LPTSTR lpOut,LPCTSTR lpFmt,...);
lpOut:输出缓冲区;lpFmt:格式字符串;...为要输出的参数,无限制。

上面的代码中,把两个函数合起来调用,而后面的参数又很多,并且使用了?:,不太容易理解。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值