Windows程序设计加C语言,c语言windows程序设计自学笔记(随学习更新)

今天找到了windows程序设计一书,想来打开看看学习一下,发现很混乱,原理学的c语言和这个看起来很不象,看一个例子用了很长时间,我把例子中的语句查了一下,并标记上注释这样就好看多了,用c语言开发图形界面要做的东西比较繁琐,不过道理还是比较清晰的,比用工具直接画要理解的清楚多了。

下面看程序吧:

#include

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;    //windows消息

WNDCLASS wndclass;    //窗口类

wndclass.style = CS_HREDRAW | CS_VREDRAW;   //窗口样式

wndclass.lpfnWndProc = WndProc;   //窗口处理函数

wndclass.cbClsExtra = 0;    //窗口无类扩展

wndclass.cbWndExtra = 0;    //窗口类实例无扩展

wndclass.hInstance = hInstance;    //当前实例句柄

wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);  //窗口最小化图片为默认图标

wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);    //窗口采用箭头光标

wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);    //窗口背景为白色

wndclass.lpszMenuName = NULL;    //窗口无菜单

wndclass.lpszClassName = szAppName;   //窗口类名为”HelloWin”

/*下面是窗口类的注册*/

if (!RegisterClass(&wndclass)){

/*消息框*/

MessageBox(NULL, TEXT(“This program requires Windows NT!”),szAppName, MB_ICONERROR);

return 0;

}

/*创建窗口,并赋值给窗口句柄*/

hwnd = CreateWindow(szAppName, //窗口类名

TEXT(“第一个窗口”), //窗口标题

WS_OVERLAPPEDWINDOW, //窗口样式

CW_USEDEFAULT, //初始化窗口x坐标

CW_USEDEFAULT, //初始化窗口y坐标,x坐标和y坐标是屏幕左上角,窗口开始处

CW_USEDEFAULT, //初始化窗口宽大小

CW_USEDEFAULT, //初始化窗口高大小

NULL, //父窗口句柄

NULL, //窗口菜单句柄

hInstance,//创建此窗口的应用程序当前句柄

NULL); //创建参数

ShowWindow(hwnd, iCmdShow); //显示窗口

UpdateWindow(hwnd); //绘制用户区

/*下面是消息循环*/

while (GetMessage( & msg, NULL, 0, 0)){

TranslateMessage(&msg); //翻译消息

DispatchMessage(&msg);  //将消息传递给处理函数

}

return msg.wParam;

}

/*窗口处理函数*/

LRESULT CALLBACK WndProc(HWND hwnd,      //窗口句柄

UINT message,   //窗口所处理的消息

WPARAM wParam,   //消息附加参数

LPARAM lParam){  //消息附加参数

HDC hdc;          //设备描述表(Device Context)的句柄,设备描述表中记录和此设备相关的各种信息

PAINTSTRUCT ps;   //保存了窗口绘制客户区的一些信息,绘制客户区时是否要清除背景色,要更新的客户区的矩形区域的大小等等

RECT rect;

switch (message){

case WM_CREATE:  //窗体一生成时产生的系列动作

PlaySound(TEXT(“hellowin.wav”),   //指定播放声音的字符串

NULL,                   //应用程序的实例句柄

SND_FILENAME | SND_ASYNC);  //播放标志SND_FILENAME指定了WAVE文件名,SND_ASYNC用异步方式播放声音

return 0;

case WM_PAINT:   //WM_PAINT是Windows窗口系统中一条重要的消息,应用程序通过处理该消息实现在窗口上的绘制工作

hdc = BeginPaint(hwnd,&ps);  //beginpaint得到一个HDC的句柄和一个PAINTSTRUCT的结构,该结构包含了要重绘的各中信息

GetClientRect(hwnd,&rect);

DrawText(hdc,        //DC句柄

TEXT(“windows窗口程序”),  //画文本

-1,                   //指向字符串中的字符数

&rect,               //指向结构RECT的指针,其中包含正文将被置于其中的矩形的信息(按逻辑坐标)

DT_SINGLELINE | DT_CENTER | DT_VCENTER);    //DT_SINGLELINE只画单行,DT_CENTER文本垂直居中,DT_VCENTER水平居中

EndPaint(hwnd,&ps);    //ENDPAINT()函数告诉WINDOWS已经时无效区变为有效,防止WM_PAINT

return 0;

case WM_DESTROY:  //该讯息是使用者单击Close按钮或者在程式的系统功能表上选择

PostQuitMessage(0); //调用PostQuitMessage函数退出程序

return 0;

}

return DefWindowProc(hwnd, message, wParam, lParam);

}

win32_1.JPG

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值