windows基本窗口

//如题,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 建立一个「最上层」窗口,如应用程序窗口时,注释为「父窗口句柄」的参数设定为NULL
NULL,// window menu handle
hInstance,// program instance handle
NULL);// 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) ;//窗口消息处理程序不予处理的所有消息提供内定处理
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值