16,466
社区成员
发帖
与我相关
我的任务
分享
使用c函数格式化字符串导致的问题
问题描述:TextOut的时候,格式花了一个整形。
采用的是c/c++里的函数,结果程序报废了。
_stprintf: sprintf, swprintf
注意 winwos也提供了一个api:wspintf.
别混淆
代码里是采用前者_stprintf。
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static int cxChar, cxCaps, cyChar ;
HDC hdc ;
int i ;
PAINTSTRUCT ps ;
TCHAR szBuffer [10] ;
TEXTMETRIC tm ;
switch (message)
{
case WM_CREATE:
hdc = GetDC (hwnd) ;
hdc=GetDC(hwnd);
GetTextMetrics(hdc,&tm);
//字体平均宽度
cxChar=tm.tmAveCharWidth;
//字体平均高度
cyChar=tm.tmHeight+tm.tmExternalLeading;
ReleaseDC(hwnd,hdc);
return 0 ;
case WM_PAINT :
hdc = BeginPaint (hwnd, &ps) ;
for(i=0; i<NUMLINES; i++)
{
//第0列
TextOut(hdc,0,cyChar*i,sysmetrics[i].szLabel,lstrlen(sysmetrics[i].szLabel));
//第1列
// TextOut(hdc,30*cxChar,cyChar*i,sysmetrics[i].szDesc,lstrlen(sysmetrics[i].szDesc));
//设置对数字对其
SetTextAlign(hdc,TA_RIGHT);
#ifdef _UNICODE
wmemset(szBuffer,0,10);
#else
memset(szBuffer,0,10);
#endif
TextOut(hdc,30*cxChar+40*cxChar,cyChar*i, szBuffer,_stprintf(szBuffer,TEXT("%5d"),GetSystemMetrics(sysmetrics[i].iIndex)));
SetTextAlign(hdc,TA_LEFT);
}
EndPaint (hwnd, &ps) ;
return 0 ;
case WM_DESTROY :
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
一共输出3列,结果第3列无法求出。问了几个网友都无法搞定。