这一章的代码有点小问题,下面贴出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));
下面的两个函数
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:格式字符串;...为要输出的参数,无限制。
上面的代码中,把两个函数合起来调用,而后面的参数又很多,并且使用了?:,不太容易理解。