首页 > 编程知识 正文

c语言图形化界面,c语言中windows头文件

时间:2023-05-05 19:54:06 阅读:156014 作者:39

Windows编程概述

一.从C/C到Windows编程

先前学习的C/C程序都被称为DOS程序(或Windows控制台程序),是目前大学开设的《C/C++程序设计》的内容。 因为这些程序没有涉及到Windows编程的详细内容,所以容易入门,对训练初学者的编程思想是有用和有益的。 但是,我们基本上掌握了C/C编程之后,就不能只停留在DOS下(或Windows控制台下)编写和运行程序了。 我们应该从编程思想的训练向Windows实用编程的转换。

是最简单的Windows C程序。

包括

intwinapiwinmain (hinstance hinstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow ) )。

{

messagebox(null,' HelloTurbocforwindows欢迎使用集成实验和学习环境!' ,'我的第一个Windows程序',MB_OK;

返回0;

}

程序的执行结果如下

程序分析:

1、Windows.h是所有windows程序所需的头文件。

2、WinMain函数在所有Windows C程序的入口,类似于DOS C的main函数。

3、MessageBox是Win32 API函数(API,applicationprogramminginterface APP界面),用于显示显示消息内容的对话框。 此函数的第一个参数用于指定父窗口句柄,即对话框所在的窗口句柄。 第二个参数用于显示消息的内容。 可以修改为想显示的内容。 第三个参数是对话框的标题,如本示例中的“第一个Windows程序”。 第四个参数指定对话框中显示的按钮。 请尝试将MB_OK更改为MB_OKCANCEL,然后再次更改为MB_RETRYCANCEL,看看运行程序会怎么样

请尝试将求1、2、3、…100之和的DOS C程序更改为Windows程序。

include 'stdio.h '

main () )

{

int sum=0,I;

for(I=1; i=100; I )

{

sum=sum i;

}

printf(1-100自然根数之和为%d(n ),sum );

}

参考步骤:

包括

包括

包括

intwinapiwinmain (hinstance hinstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow ) )。

{

int sum=0,I;

char str1[40]='1-100自然条数之和为',str2[10];

for(I=1; i=100; I )

{

sum=sum i;

}

ITOA(sum,str 2,10 ); /将整数变量sum的运算结果转换为字符串str2,便于显示/

strcat(str1、str2; 将str1的值(1-100自然条数之和)连接到str2上,以便于显示/

messagebox(null,str1,'第二Win32程序',MB_OK );

返回0;

}

执行结果:

二. Windows程序介绍

(1) Windows C程序配置:

1.C程序源文件,扩展名为. c或. cpp

2 .扩展名为. h的头文件

3 .扩展名为. rc的资源文件

)2)源程序的构成

Windows C程序有相对固定的基本结构,一般有条目函数WinMain和窗口函数。

1、WinMain函数

是所有Windows C程序的入口,与DOS C的main函数相似,具有完成一系列定义和初始化工作并生成消息吉鲁的功能。 消息循环是整个程序执行的核心。

WinMain函数有三个基本组成部分:函数说明、初始化和消息吉鲁

a、WinMain函数说明:

intwinapiwinmain (hinstance hinstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow ) )。

参数说明:

hinstance APP应用程序的当前实例句柄

在32位系统上,hPrevInstance的上一个实例句柄始终为空

运行szCmdLine程序时的命令行参数

iCmdShow程序在运行时的显示方式,包括最大化、最小化和隐藏。

b .初始

初始化包括窗口类的定义、注册、创建窗口实例和显示窗口四部分。

这是固定格式,所有的Windows程序基本一样,记住即可,具体参见下面的程序实例的注释。

2、窗口函数

窗口函数定义了Windows C程序对接受到的不同消息的响应,其中包含了应用程序对各种可能接收到的消息的处理过程,是消息处理分支控制语句的集合。通常窗口函数是有一个或多个switch语句组成。每一条case语句对应一种消息,当应用程序接收到一个消息时,就会执行相应case 语句下的程序模块来完成相应的功能。

窗口函数说明:

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

参数说明:

hwnd 窗口句柄

message 代表所处理消息的消息值

wParam 消息的附加参数,是message的进一步信息

lParam 消息的附加参数,是message的进一步信息

一般用法:

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{

...

switch (message)

{

case 常数1:

...

case 常数2:

...

...

case WM_DESTROY:

PostQuitMessage (0) ; //在消息队列中插入一条“退出”消息

return 0 ;

}

return DefWindowProc (hwnd, message, wParam, lParam);//执行默认的消息处理

}

窗口函数的主体是消息处理语句,该语句是有一系列case语句组成。我们学习者自需要根据窗口可能收到的消息在case语句中编写相应的处理程序即可。

三、一个简单的Windows C程序:Hello World程序

include

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; //窗口函数声明

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow) //WinMain函数说明

{

static TCHAR szAppName[] = TEXT ("HelloWin") ;

HWND hwnd ; //窗口句柄

MSG msg ; //消息结构

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 ;

//下面是窗口类的注册

if (!RegisterClass (&wndclass))//为程序窗口注册窗口类

{

return 0 ;

}

//根据窗口类创建窗口

hwnd = CreateWindow (szAppName, TEXT ("一个简单的Win32程序"),

WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT,

CW_USEDEFAULT,

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 ;

PAINTSTRUCT ps ;

RECT rect ;

switch (message)

{

case WM_PAINT:

hdc = BeginPaint (hwnd, &ps) ; //开始窗口绘制

GetClientRect (hwnd, &rect) ; //获取窗口客户区的尺寸

DrawText (hdc, TEXT ("Hello World!"), -1, &rect,

DT_SINGLELINE | DT_CENTER | DT_VCENTER) ; //显示Hello World,可以修改程序你要显示的内容

EndPaint (hwnd, &ps) ; //结束窗口绘制

return 0 ;

case WM_DESTROY:

PostQuitMessage (0) ; //在消息队列中插入一条“退出”消息

return 0 ;

}

return DefWindowProc (hwnd, message, wParam, lParam);//执行默认的消息处理

}

提示:该程序的源代码在《简单的入门程序实例》中

四、总结

所有Windows 程序的基本结构都与上面的实例相同或相近(说明:有的程序是将窗口类和窗机窗口封住成函数后调用,其实质是一样的),记住一个例子,编写其他程序时,在其上面修改即可。

说明:上面的程序没有带资源文件,在《简单的入门程序实例》中有一个带有资源文件的记事本程序源代码,程序运行界面。

一点建议:由于Windows 编程精大博深,初学者想把什么都搞明白是不可能的,要学会一点“不求甚解” ,这里说的“不求甚解”并不是指不认真学习。初学者最怕钻牛角尖:一个问题不明白,就在那里卡住,非解决它不可——这种方法是不可取的。

首先,它会严重打击你的自信心,使你丧失继续学习下去的兴趣;

其次,这样浪费了许多时间。因此学习时要给自己留一些“不懂”的余地。例如第一遍读书时要允许自己似懂非懂,用规定的时间(例如两个星期)把它看完,然后开始第二遍学习。开始时许多不明白的东西,下次就容易理解多了。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。