LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) //回调函数的声明,将在wndclass.lpfnWndProc = WndProc中用到
//主函数即入口函数
int WINAPI WinMain (HINSTANCE hInstance, //实例句柄
HINSTANCE hPrevInstance,//上一个实例句柄
PSTR szCmdLine, //指向一个0结尾的字符串
int iCmdShow) //窗口开始的大小
{
static TCHAR szAppName[] = TEXT ("HelloWin") //将"HelloWin"赋给szAppName[]
HWND hwnd //定义一个窗口句柄,用来标识窗口
MSG msg //定义一个消息结构体,该结构体包含消息的几个数据
WNDCLASS wndclass //定义一个窗口类,该窗口类也是个结构体,下面的语句是修改结构体数据
wndclass.style = CS_HREDRAW | CS_VREDRAW //窗口绘制模式为水平重绘和垂直重绘
wndclass.lpfnWndProc = WndProc //回调函数为一开始申明的函数
wndclass.cbClsExtra = 0 //类的附加内存(额外的),不需要就设为0
wndclass.cbWndExtra = 0 //窗口的附加内存,同上
wndclass.hInstance = hInstance // 当前实例为系统传递过来的实例,只能是这样,其它系统帮你做好了
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) //加载ICON图标,NULL加载系统的图标,第二个参数使系统里面图标的一个标识
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) //同上,不过是加载光标
wndclass.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH) // 设置窗口背景为白色
wndclass.lpszMenuName = NULL //因为没有菜单,所以设为空
wndclass.lpszClassName= szAppName //你为你设计的这个窗口类取个名字,在hwnd = CreateWindow(中用到
if (!RegisterClass (&wndclass)) //注册你刚刚设计好的窗口
{
//注册不成功,d出消息框,显示引号里文字
MessageBox ( NULL, //通常是窗口句柄
TEXT ("This program requires Windows NT!"), //消息框显示的文字
szAppName, //题列上的字符串
MB_ICONERROR) //消息框的按钮
return 0
}
//创建窗口
hwnd = CreateWindow( szAppName, // window class name 窗口类的名字
TEXT ("The Hello Program"), // window caption 窗口的标题
WS_OVERLAPPEDWINDOW, // window style 窗口的风格
CW_USEDEFAULT,// initial x position 默认的窗口左上角的X、Y点
CW_USEDEFAULT,// initial y position
CW_USEDEFAULT,// initial x size 默认窗口显示的宽和高
CW_USEDEFAULT,// initial y size
NULL, // parent window handle 没有父窗口
NULL, // window menu handle 没有菜单、菜单句柄为空
hInstance, // program instance handle 程序当前实例,由系统传递
NULL) // creation parameters
ShowWindow (hwnd, iCmdShow) //显示窗口
UpdateWindow (hwnd) //更新窗口
while (GetMessage (&msg, NULL, 0, 0)) //消息循环,获取消息
{
TranslateMessage (&msg) //翻译消息,
DispatchMessage (&msg) // 分发消息
}
return msg.wParam //返回消息里的一个参数,只有退出程序时该值才为0
}
//回调函数的定义
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc //定义设备上下文句柄
PAINTSTRUCT ps //一个结构体
RECT rect //定义一个矩形
switch (message)
{
case WM_CREATE: //窗口刚刚创建好时发送的消息
//PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) //播放声音
return 0 //返回
case WM_PAINT: //窗口重画时的消息
hdc = BeginPaint (hwnd, &ps) //得到设备上下文句柄
GetClientRect (hwnd, &rect) //得到当前客户区矩形
DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER) //输出引号里文字,后面参数定义它输出的方式
EndPaint (hwnd, &ps) //释放设备上下文句柄
return 0
case WM_DESTROY: //窗口销毁时的消息
PostQuitMessage (0) //退出程序
return 0
}
return DefWindowProc (hwnd, message, wParam, lParam) //对没有定义处理方法的消息,系统默认处理
}
汉字不一定就是unicode编码 ,你所看到的汉字是GB2312编码
在ASCII体系下,如果系统读取字符串时某个字节的值大于161(0Xa1),并且下一个字节的值大于176(0Xb0),那么系统会认为这是一个汉字的GB2312双字节编码,然后查询码表显示汉字
比如下面这个程序,运行后会显示“中文”两个字,因为数组a的值恰恰符合GB2312编码
#include<stdio.h>int main()
{
char a[5]={214,208,206,196,0}
printf("%s\n",a)
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)