博文

hellowin(2007-10-13 10:23:00)

摘要:#include<windows.h> LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
 static TCHAR szAppName[]=TEXT("HelloWin");
 HWND hwnd; //窗口句柄
 MSG msg; //消息结构,
 WNDCLASS wndclass; //窗口类,是一个结构体,下面的这些都是结构体变量
 wndclass.style=CS_HREDRAW | CS_VREDRAW;//类风格标识符
 //这风格指定在窗口大小改变后,使整个窗口无效
 wndclass.lpfnWndProc=WndProc; //lpfn前缀代表指向函数的指针,这里指向 窗口过程函数
 wndclass.cbClsExtra=0; //cb前缀代表 count of bytes(字节数)
 wndclass.cbWndExtra=0;//这两个域用于在类结构和Windows内部保存的窗口结构中预留一些额外空间
 wndclass.hInstance=hInstance; //h前缀代表句柄,程序的实例句柄
 wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//为窗口设置的图标
 //LoadIcon 获取预先定义的图标句柄,第一个参数为null,第二个参数标识图标
 //如果是加载程序员定制的图标时(图标应该保存磁盘上的.EXE程序文件中)
 //这个参数应该是程序的实例句柄hInstance
 wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
 wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BR......

阅读全文(2411) | 评论:0

c语言中 变长参数列表(2007-10-12 18:12:00)

摘要://转载自http://blog.csdn.net/Tilix/archive/2004/09/24/115873.aspx 建立参数个数不定的函数是可能的。如标准库函数printf,它的参数个数是不定的。虽然printf至少必须用一个字符串作为其第一个参数,但是它能够接收任何个数的附加参数。printf函数的原型为: int printf(const char *format, ...);该函数原型中的省略号(...)表示这个函数接收个数不定的任何类型的参数。注意省略号必须放在参数列表的最后。 变长参数头文件stdarg.h中的宏定义(见下表)课用来建立变长参数列表。下面给出的演示程序中给出了接收可变参数个数的函数average。函数average的第一个参数是要被求平均值的数据的个数。+-----------------------------------------------------------------------------+| 在头文件stdarg.h中定义的类型和宏 |+-----------------------------------------------------------------------------+| 标识苻 | 解释 | +----------+------------------------------------------------------------------+| va_list | 用来保存va_start, va_end所需信息的一种类型。为了访问变长参数列 || | 表中的参数,必须声明va_list类型的一个对象 | +----------+------------------------------------------------------------------+| va_start | 访问变长参数列表中的参数之前使用的宏,它初始化用va_list声明的 || | 的对象,初始化结果供宏va_arg 和va_end使用。 |+----------+------------------------------------------------------------------+| va_arg | 展开成一个表达式的宏,该表达式具有变长参数列表中下一个参数的 || | 值和类型......

阅读全文(2060) | 评论:0

格式化消息框 sprintf(2007-10-12 18:11:00)

摘要:#include<windows.h>
#include<tchar.h>
#include<stdio.h> //格式化消息框
int CDECL MessageBoxPrintf(TCHAR* szCaption,TCHAR* szFormat,...)
{
 TCHAR szBuffer[1024];
 
 va_list pArgList; //或许只有va_list这种类型才能被设置为szFormat
 va_start(pArgList,szFormat);//将pArgList设置为指向szFormat
 _vsntprintf(szBuffer,sizeof(szBuffer)/sizeof(TCHAR),szFormat,pArgList);
 //_vsntprintf 是sprintf加强版,多了个size_t count指明缓冲区的大小,保证不会有内存越界的错误。  va_end(pArgList);  return MessageBox(NULL,szBuffer,szCaption,0);
} int WINAPI WinMain(HINSTANCE hlnstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
 int cxScreen,cyScreen;  cxScreen=GetSystemMetrics(SM_CXSCREEN); //得到视频显示器的宽度
 cyScreen=GetSystemMetrics(SM_CYSCREEN); //得到视频显示器的高度  MessageBoxPrintf(TEXT("ScmSize"),TEXT("The screen is % i pixels wide by % i pixels high."),
  cxScreen,cyScreen);  return 0;
} //在Windows程序中不能使用printf。 //&......

阅读全文(2656) | 评论:0

messagebox()(2007-10-12 16:01:00)

摘要:#include<windows.h> int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
 MessageBox(NULL,TEXT("hello,windows 98!"),TEXT("helloMsg"),MB_ICONSTOP);
 return 0;
}  //LPSTR lpCmdLine  lp前缀代表长指针。也可改为 PSTR  lpCmdLine,都是同一种类型,作为指向字符串的指针。另外前缀 i 表示int,sz表示 以零结束的字符串。 // #define WINAPI _stdcall 该语句指定一个约定,包括如何生成机器代码以及在堆栈中放置函数调用的参数,许多Windows函数调用声明为WINAPI //HINSTANCE hInstance 实例句柄,该句柄唯一标识该程序。?搞不明白 谁传递给它参数? //HINSTANCE hPrevInstance Windows早期版本中,同时运行同一程序多次时,您便创建了该程序的 多个实例。在32位Windows版本中,该概念已被抛弃。所以WinMain的第二个参数总是NULL(定义为0) //LPSTR lpCmdLine 用于运行程序的命令行。某些Windows应用程序使用这个参数以在程序启动时将文件加载到内存。 //int nShowCmd 程序最初显示的方式。可以是正常地,或者是最大地,或者是最小化显示在任务列表栏中。 //MsgBox 第一个参数通常是窗口句柄,第二个参数是在消息框主体中显示的字符串,第三个参数是出现在消息框标题栏中的字符串。这些字符串都被封装在一个 TEXT 宏中,你不必将所有的字符串都封装在 TEXT 宏中,但如果想将您的程序转换为Unicode字符集,这确是个好注意。第四个参数是一组以前缀 MB_开始的常数的组合。 //MsgBox 有返回值,返回值为 相应的按钮值。......

阅读全文(1919) | 评论:0