一些API函數--《windows程序設計》
《window程序設計》果然是經典,相對于MFC來說SDK簡直是返璞歸真啊。繼續摘錄一些API函數和技巧: CheckRadioButton(hwnd,IDC_SERVER1,IDC_SERVER10, wServer);
1、Selects (adds a check mark to) a given radio button in a group and clears
(removes a check mark from) all other radio buttons in the group.
在IDC_SERVER1-IDC_SERVER10中選中wServer的ID,有點像分組。 DialogBoxParam (hInst, TEXT ("Servers"), hwnd, ServerDlg, (LPARAM) szIPAddr);
2、可以在WM_INITDIALOG的LPARAM傳參數,建立模態對話框。ServerDlg為消息處理函數,szIPAddr為參數,在WM_INITDIALOG消息響應中處理LPARAM的值。typedef char * va_list;
#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
#define va_end(ap) ( ap = (va_list)0 )
3、va_list可變參數的結構,有點復雜慢慢看。#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
#define va_end(ap) ( ap = (va_list)0 )
一般的用法是這樣(個人理解)
va_list args; //聲明變量
va_start(args, fmt); //開始解析。args指向fmt后面的參數
TYPE var = va_arg(args, TYPE); //取下一個參數并返回。args指向下一個參數
va_end(args); //結束解析
http://hi.baidu.com/kang_liang/blog/item/168c9059a9a1ca2d2934f05f.html
4、wsprintf和wvsprintf的區別,從它們的參數可以看出。
int wsprintf(
LPTSTR lpOut, // output buffer
LPCTSTR lpFmt, // format-control string
// optional arguments
);
int wvsprintf( LPTSTR lpOutput, // buffer for output
LPCTSTR lpFormat, // format-control string
va_list // variable list of format-control arguments
);
LPTSTR lpOut, // output buffer
LPCTSTR lpFmt, // format-control string

);
int wvsprintf( LPTSTR lpOutput, // buffer for output
LPCTSTR lpFormat, // format-control string
va_list // variable list of format-control arguments
);
wsprintf純粹是格式化字符串,wvsprintf是以參數列表Va_list格式化字符串。
posted on 2009-10-20 22:36 gewala 閱讀(526) 評論(0) 編輯 收藏 引用 所屬分類: C++