《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:格式字符串;...为要输出的参数,无限制。

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



你可能感兴趣的:(c,windows)