注册 登录
编程论坛 C++教室

《windows程序设计》上Unicode简介一章中的示例代码中有几个只是点不懂,请大家指点一下

昱菲轩 发布于 2013-05-01 14:06, 532 次点击
SCRNSIZE.C
        
/*---------------------------------------------------------------------------
        
    SCRNSIZE.C -- Displays screen size in a message box
        
                 (c) Charles Petzold, 1998
        
----------------------------------------------------------------------------*/
        
#include <windows.h>        
#include <tchar.h>           
#include <stdio.h>           
int CDECL MessageBoxPrintf (TCHAR * szCaption, TCHAR * szFormat, ...)        
{
    TCHAR   szBuffer [1024] ;        
    va_list pArgList ;        
    // The va_start macro (defined in STDARG.H) is usually equivalent to:        
    // pArgList = (char *) &szFormat + sizeof (szFormat) ;        
    va_start (pArgList, szFormat) ;        
    // The last argument to wvsprintf points to the arguments        
    _vsntprintf ( szBuffer, sizeof (szBuffer) / sizeof (TCHAR),        
                   szFormat, pArgList) ;        
    // The va_end macro just zeroes out pArgList for no good reason        
    va_end (pArgList) ;        
    return MessageBox (NULL, szBuffer, szCaption, 0) ;        
}        
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,        
                   PSTR szCmdLine, int iCmdShow)        
{        
    int cxScreen, cyScreen ;        
    cxScreen = GetSystemMetrics (SM_CXSCREEN) ;        
    cyScreen = GetSystemMetrics (SM_CYSCREEN) ;        
    MessageBoxPrintf (    TEXT ("ScrnSize"),        
                   TEXT ("The screen is %i pixels wide by %i pixels high."),        
                   cxScreen, cyScreen) ;
     return 0 ;      
}
上面的代码是《windows程序设计》上Unicode简介一章中的示例代码。
它实现了“格式化消息框”

对于上面的代码,我有一些知识点不了解:
1、在int CDECL MessageBoxPrintf(TCHAR* szCaption, TCHAR* szFormat,...)
     {
            ...
            ...
            ...
            return MessageBox(NULL,szBuffer, szCaption, 0);
     }
    中的int CDECL 是什么意思?是不是return MessageBox()的返回类型?
2、 代码
    va_list pArgList;
    va_start (pArgList, szFormat);
      _vsntprintf ( szBuffer, sizeof (szBuffer) / sizeof (TCHAR),        
                   szFormat, pArgList) ;     
    va_end (pArgList) ;
    完成的是什么工作?


初来乍到,还请多多关照!
2 回复
#2
rjsp2013-05-02 09:54
1. CDECL 只是VC定义的一个宏。__cdecl _stdcall _fastcall _thiscall 等修饰的是函数
2. 取出 可变参数(variable-argument)

都是C/C++基础知识
#3
昱菲轩2013-05-03 08:04
谢谢版主了!
1