c语言窗口的过程函数 c语言的窗口式图形界面设计

C语言winapi编程,窗口过程函数声明,前两个标示符是什么意思

LRESULT 是这个函数的返回值类型

创新互联专注于揭阳企业网站建设,成都响应式网站建设公司,商城网站定制开发。揭阳网站建设公司,为揭阳等地区提供建站服务。全流程按需求定制网站,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务

typedef LONG_PTR LRESULT;

typedef _W64 long LONG_PTR;

LRESULT一般也就可以认为是long

CALLBACK 表示该函数是一个回掉函数

回掉函数:

怎么用C语言编写一个windows窗口?

调用window库窗口函数即可创建windows窗口。

必须使用windows的编译器,如VC,MS等等。

RegisterClassEx函数:

该函数注册在随后调用CreateWindow函数和CreateWindowEx函数中使用的窗口类。 RegisterClass函数己经由函数RegisterClassEx函数来代替,但是,如果不需要设置类的小目标则仍然可以使用RegisterClass函数。

CreateWindowEx函数:

该函数创建一个具有扩展风格的层叠式窗口、弹出式窗口或子窗口,其他与CreateWindow函数相同。关于创建窗口和其他参数的内容,请参看CreateWindow。具体仍可见微软的msdn。

消息处理函数WindowProc:

该函数是一个应用程序定义的函数。它处理发送给窗口的消息。WINDPROC类型定义了一个指向该回调函数的指针。WindowProc是用于应用程序定义函数的占位符。

函数原型:

LRESULT CALLBACK WindowProc (HWND hwnd,

UINT uMsg,

WPARAM wParam,

LPARAM lParam);

参数:

hwnd:指向窗口的句柄。

uMsg:指定消息类型。

wParam:指定其余的、消息特定的信息。该参数的内容与UMsg参数值有关。

IParam:指定其余的、消息特定的信息。该参数的内容与uMsg参数值有关。

返回值:返回值就是消息处理结果,它与发送的消息有关。

一个简单的Window的代码如下:

#include Windows.h

#include tchar.h

LRESULT WINAPI WinProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);

int WinMain( 

__in HINSTANCE hInstance, 

__in_opt HINSTANCE hPrevInstance, 

__in LPSTR lpCmdLine, 

__in int nShowCmd 

)

{

TCHAR *szName = _T("myWindow");

WNDCLASSEX wc = {0};

HWND hWnd     = NULL;

MSG Msg       = {0};

wc.cbClsExtra    = 0;

wc.cbWndExtra    = 0;

wc.cbSize        = sizeof(WNDCLASSEX);

wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//通过函数来设置一个白色的背景,这里大家设置为NULL看看,会很有趣的

wc.hCursor       = NULL;//不设置

wc.hIcon         = NULL;//不设置

wc.hIconSm       = NULL;//不设置

wc.hInstance     = hInstance;//当前程序的句柄,hInstance是有系统给传递的

wc.lpfnWndProc   = WinProc;//窗口处理过程的回调函数。

wc.lpszClassName = szName;//窗口类的名字。

wc.lpszMenuName  = NULL; 

wc.style         = CS_HREDRAW | CS_VREDRAW; 

RegisterClassEx(wc);//在系统中注册

hWnd = CreateWindowEx(WS_EX_CLIENTEDGE,szName,_T("我的窗口我喜欢"),WS_OVERLAPPEDWINDOW,

200,100,600,400,NULL,NULL,hInstance,NULL);//创建窗口,窗口标题为"我的窗口我喜欢"

if(hWnd == NULL)

{

MessageBox(NULL,_T("There's an Error"),_T("Error Title"),MB_ICONEXCLAMATION|MB_OK);

return 0;

}

ShowWindow(hWnd,nShowCmd);//显示窗口

UpdateWindow(hWnd);

//下面是对消息的循环处理,大家先不必管这些,下节课我会细说的

while(GetMessage(Msg,NULL,0,0))

{

TranslateMessage(Msg);//翻译消息

DispatchMessage(Msg);//分派消息

}

return Msg.message;

}

//消息处理函数

LRESULT WINAPI WinProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)

{

switch(Msg)//处理消息过程

{

case WM_DESTROY://响应鼠标单击关闭按钮事件

PostQuitMessage(0);//退出消息队列

return 0;//退出函数

}

return DefWindowProc(hWnd,Msg,wParam,lParam);

}

如何用C语言编程出可视化界面?

//调用api函数创建窗口

//示例:

#include windows.h

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

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)

{

static TCHAR szAppName[] = TEXT("MyWindows");//定义窗口类名

HWND hwnd;//窗口句柄

MSG msg; //

WNDCLASS wndclass;  //窗口类

wndclass.style = CS_HREDRAW | CS_VREDRAW;//指定窗口类型,各种“类风格”(详见下方↓)可以使用按位或操作符组合起来

wndclass.lpfnWndProc = WndProc;//指定窗口过程(必须是回调函数)

wndclass.cbClsExtra = 0;//预留的额外空间,一般为 0

wndclass.cbWndExtra = 0;//预留的额外空间,一般为 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))//注册窗口

{

MessageBox(NULL, TEXT("这个程序需要在 Windows NT 才能执行!"), szAppName, MB_ICONERROR);

return 0;

}

hwnd = CreateWindow(szAppName,      //创建窗口

TEXT("windows"),

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("第一个C语言窗口程序!"), -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);

}


标题名称:c语言窗口的过程函数 c语言的窗口式图形界面设计
本文地址:http://myzitong.com/article/dogsiis.html