windows基本窗口

来源:互联网 发布:coc九本女王升级数据 编辑:程序博客网 时间:2024/06/14 07:26

//如题,windows窗口基本介绍。

//创建个WIN32控制台应用台程序,空的,新建一个CPP文件,把下面代码贴上去就可以看到一个最简单的窗口了~

//画线部分的学习 基于win32的应用程序

#include <windows.h>#pragma comment(lib,"winmm.lib")//导入声音头文件库//消息回调函数LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;//程序的入口函数int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow){static TCHAR szAppName[] = TEXT ("Bezier") ;    //应用程序的名字(注册窗口的类名)HWND          hwnd ;                            //窗口的句柄(窗口的唯一标识)MSG           msg ;                             //消息结构体WNDCLASS      wndclass ;                        //窗体结构体//窗体创建的步骤//1. 填写窗口结构体,设置窗口的样式,设置消息回调函数等wndclass.style        = CS_HREDRAW | CS_VREDRAW ;//水平方向大小(CS_HREDRAW),垂直方向大小(CS_VREDRAW)wndclass.lpfnWndProc= WndProc ;//依据这个类别来建立的所有窗口所使用的窗口消息处理程序的地址wndclass.cbClsExtra   = 0 ;//窗口类别结构中预留一些额外空间wndclass.cbWndExtra   = 0 ;//Windows内部保存的窗口结构中预留一些额外空间wndclass.hInstance    = hInstance ;//程序的执行实体句柄wndclass.hIcon        = LoadIcon (NULL, IDI_APPLICATION);//窗口类别建立的窗口设置一个图标wndclass.hCursor      = LoadCursor (NULL, IDC_ARROW);//加载一个预先定义的鼠标光标(命名为IDC_ARROW),并传回该游标的句柄wndclass.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH);//这个类别建立的窗口背景颜色wndclass.lpszMenuName= NULL;//窗口类别菜单wndclass.lpszClassName= szAppName;//窗口类别的文字名称//2. 注册窗口类if (!RegisterClass (&wndclass)){MessageBox (NULL, TEXT ("Program requires Windows NT!"),szAppName, MB_ICONERROR);return 0 ;}//2. 创建窗口,传入szAppName名字,设置样式,窗口名字等,返回窗口的句柄。hwnd = CreateWindow (szAppName,// window class name 程序注册的窗口类别名称TEXT ("Bezier Splines"),// window caption 「窗口标题」显示在标题列中的文字WS_OVERLAPPEDWINDOW,// window style 普通的重迭式窗口CW_USEDEFAULT,// initial x position 窗口左上角相对于屏幕左上角的初始位置CW_USEDEFAULT,// initial y position 窗口左上角相对于屏幕左上角的初始位置CW_USEDEFAULT,// initial x size 窗口的宽度CW_USEDEFAULT,// initial y size 窗口的高度NULL,// parent window handle 建立一个「最上层」窗口,如应用程序窗口时,注释为「父窗口句柄」的参数设定为NULLNULL,// window menu handlehInstance,// program instance handleNULL);// creation parameters//3. 显示窗口类ShowWindow (hwnd, iCmdShow);//4. 更新窗口UpdateWindow (hwnd);//5,进入消息循环,这些消息会在WndProc函数里面去执行while (GetMessage (&msg, NULL, 0, 0)){TranslateMessage (&msg) ;//将msg结构传给Windows,进行一些键盘转换DispatchMessage (&msg) ;//Windows将呼叫窗口消息处理程序}return msg.wParam ;}LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)//第一个参数 HWND hwnd:接收消息的窗口的句柄,它与CreateWindow函数的传回值相同//第二个参数 UINT message:与MSG结构中的message字段相同,它是标识消息的数值//第三、四个参数:32位的消息参数,提供关于消息的更多信息{switch (message){case WM_CREATE:       //窗体创建会执行的消息{}break;case WM_LBUTTONDOWN:  //左键消息{PlaySound (TEXT ("0061.wav"), NULL, SND_FILENAME | SND_ASYNC) ;//参数分别为(声音文件的名称。声音文件是一种资源时才被使用。一些选项。)}break;case WM_RBUTTONDOWN:  //右键消息{}break;case WM_MOUSEMOVE:    //鼠标移动的消息{}break;case WM_PAINT:        //绘图消息,当窗口显示区域的一部分显示内容或者全部变为「无效」,以致于必须「更新画面」时,将由这个消息通知程序。//第一条发生在WinMain中呼叫UpdateWindow时;窗口大小改变后;最小化,然后再次将窗口恢复为以前的大小时;移动窗口以致其相互重迭时{//每一次绘图,都需要一个PAINTSTRUCT结构体PAINTSTRUCT  ps;HDC hdc = BeginPaint (hwnd, &ps) ;//准备绘制时导致无效区域的背景被擦除//参数(程序的窗口句柄;指向型态为PAINTSTRUCT的结构指针)//获取窗口的大小RECT rect;GetClientRect (hwnd, &rect) ;//第二个参数是一个指标,指向一个RECT型态的rectangle结构DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect,//输出文字//第三个参数是 -1,指示字符串是以字节0终结的DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;//旗标指示了文字必须显示在一行上,水平方向和垂直方向都位于第四个参数指定的矩形中央//学习会线的功能(绘制1条线)//如果要改变线条的颜色,我们需要创建一支画笔(创建之后记得在后面删掉)HPEN penNew;penNew=CreatePen(PS_SOLID, 5, RGB(255,0,0));SelectObject(hdc,penNew);// 线MoveToEx (hdc, 100,10, NULL) ;LineTo (hdc, 500, 10) ;//绘制矩形::Rectangle(hdc,300,300,400,400);//绘制椭圆Ellipse(hdc,200,200,300,300);//输出文字char str[100];strcpy(str,"Window");//设置文字的颜色::SetTextColor(hdc,RGB(255,0,255));TextOut(hdc,100,200,str,strlen(str));//删掉画笔DeleteObject(penNew);EndPaint (hwnd, &ps) ;//释放设备内容句柄}break;case WM_DESTROY:     //窗口关闭消息{PostQuitMessage (0) ;//在程序的消息队列中插入一个WM_QUIT消息}break;}return DefWindowProc (hwnd, message, wParam, lParam) ;//窗口消息处理程序不予处理的所有消息提供内定处理}


 

原创粉丝点击