
X窗口是一种用于UNIX系统的标准图形化用户界面(GUI),它是由麻省理工学院开发的。GUI是用鼠标器和键盘控制的,具有下拉菜单、在屏按钮、卷动条和为运行不同应用的重叠窗口界面。其它GUI环境的例子包括Apple的Macintosh、Microsoft的Windows和IBM的O3/2 Presentation Manager。然而,X窗口环境是一种可以在远程连接之上很好工作的客户机/服务器式的设计。
考虑到开发人员,x窗口为开发基于图形的分布式应用程序提供软件工具和标准应用程序编程接口。完成的应用是与硬件无关的,这意味着它们可以在支持x窗口环境的任何系统上运行。完整的这种环境通常被简单地称为“X”。
X窗口系统在位映射屏幕碧敬上的一个或多个窗口中运行程序。用户可以在每个窗口同时在系统上运行多个程序,并且通过用鼠标器点击它们来在窗口之间进行交换。图X-4示意了一个X窗口环境,并将在下面讨论:
称为x服务器的程序在本地工作站上运行,并且管理它的窗口和程序。
每个程序窗口都被称为x客户,并且与在同一个机器上运行的x服务器程序以客户机/服务器关系进行交互。
X服务器处理所有X客户的处理程序,以及通过消息传递系统和其它客户交互工作。X服务器控制整个本地环境,因而当访问存储器和其它系统资源时,程序间进行合作。
X服务器运行x窗口管理器程序,这个程序提供GUI界面。现在可以使用两种窗口管理器:Motif和Open Look。它们在功能上是类似的,并且运行相同的程序。
在本地机器运行的x服务器可以和远程计算机上运行的程序进行交互,并且在本地窗口显示这些程序的输出。它是一种客户机/服务器的关系,但是本地服务器具有全权控制,并且远程进程被称为客户机,而不是服务器,这是因为它们是处于这个本地的x服务器的控制之下的。
在Internet和其它广域网环境,上面最后一点是非常重要的。用户可以对运行在远程计算机上的程序进行工作。这个远程程序在它需要经常访问的资源(如磁盘数据)附近运行。只有需要修改用户屏幕的信息才被通过远程链路进行传输,从而避免了将整个程序和它的数据都传输到本地系统进行处理时可能出现的瓶颈。
X服务器和远程X客户机之间的接口是面向事件的,悔搜慎并且是基于X协议的。这种协议在传输控制协议/Internet协议(TCP/IP)之上运行。在一些情况下,一些厂商通过增加象三维图象这样的功能来增强了X窗口环境。X窗口环漏胡境的一个优势是,服务器应用程序可以在任何平台上运行,并且这个应用程序可以在公用运输协议之上与这个客户机交换一组消息。于是,开发人员就可以在许多系统上建立X窗口-认可的应用程序,并且这些应用程序可以被任何支持X窗口的工作站访问。
X窗口是开放软件基金会(OSF)的Motif和Open Look系统的用户接口。SunSoft的Solaris2 *** 作系统也实现了由AT&T开发的X窗口实现。
可以使用CreateWindow函数。
CreateWindow,Windows API宏, 在WinUser.h中根据是否已定义Unicode被分别定义为CreateWindowW和CreateWindowA,后两者又被分别定义为对CreateWindowExW和CreateWindowExA函数的调用。
函数原型:
HWND CreateWindow(
LPCTSTR lpClassName,
LPCTSTR lpWindowName,
DWORD dwStyle,
int x,
int y,
int nWidth,
int nHeight,
HWND hWndParent,
HMENU hMenu,
HANDLE hlnstance,
LPVOID lpParam);
参数:
详情
lpClassName
指向一个空结束的字符串或整型数atom。如果该参数是一个整型量,它是由此前调用theGlobalAddAtom函数产生的全局量。这个小于0xC000的16位数必须是lpClassName参数字的低16位,该参数的高位必须是0。
如果lpClassName是一个字符串,它指定了窗口的类名。这个类名可以是任何用函数RegisterClass注册的类名,或是任何预定义的控制类名。请看说明部分的列表。
LPWindowName
指向一个指定窗口名的空结束的字符串指针。
如果窗口风格指定了标题条,由lpWindowName指向的窗口标题将显示在标题条上。当使用Createwindow函数来创建控制例如按钮,选择框和静态控制时,可使用lpWindowName来指定控制文本。
dwStyle
指定创建窗口的风格。该参数可以是下列窗口风格的组合再加上说明部分的控制风格。风格意义:
WS_BORDER:创建一个带边框的窗口。
WS_CAPTION:创建一个有标题框的窗口(包括WS_BORDER风格)。
WS_CHILD:创建一个子窗口。这个风格不能与WS_POPUP风格合用。
WS_CHILDWINDOW:与WS_CHILD相同。
WS_CLIPCHILDREN:当在父窗口内绘图时,排除子窗口区域。在创建父窗槐昌口时使用这个风格。
WS_CLIPSIBLINGS:排除子窗口之间的相对区域,也就是,当一个特定的窗口绝拆接收到WM_PAINT消息时,WS_CLIPSIBLINGS 风格将所有层叠窗口排除在绘图之外,只重绘指定的子窗口。如果未指定WS_CLIPSIBLINGS风格,并且子窗口是层叠的,则在重绘子窗口的客户区时,就会重绘邻近的子窗口。
WS_DISABLED:创建一个初始状态为禁止的子窗口。一个禁止状态的窗口不能接受来自用户的输入信息。
WS_DLGFRAME:创建一个带对话框边框风格的窗口。这种风格的窗口不能带标题条。
WS_GROUP:指定一组控制的第一个控制。这个控制组由第一个控制和随后定义的控制组成,自第二个控制开始每个控制,具有WS_GROUP风格,每个组的第一个控制带有WS_TABSTOP风格,从而使用户可以在组间移动。用户随后可以使用光标在组内的控制间改变键盘焦点。
WS_HSCROLL:创建一个有水平滚动条的窗口。
WS_ICONIC:创建一个初始状态为最小化状态的窗口。与WS_MINIMIZE风格相同。
WS_MAXIMIZE:创建一个初始状态为最大化状态的窗口。
WS_MAXIMIZEBOX:创建一个具有最大化按钮的窗口。该风格不能与WS_EX_CONTEXTHELP风格同时出现,同时必须指定WS_SYSMENU风格。
WS_OVERLAPPED:产生一个层叠的窗口。一个层叠的窗口有一个标题条和一个边框。与WS_TILED风格相同。
WS_OVERLAPPEDWINDOW:创建一个具有WS_OVERLAPPED,WS_CAPTION,WS_SYSMENU WS_THICKFRAME,WS_MINIMIZEBOX,WS_MAXIMIZEBOX风格的层叠窗口,并明枣与WS_TILEDWINDOW风格相同。
WS_POPUP:创建一个d出式窗口。该风格不能与WS_CHILD风格同时使用。
WS_POPUPWINDOW:创建一个具有WS_BORDER,WS_POPUP,WS_SYSMENU风格的窗口,WS_CAPTION和WS_POPUPWINDOW必须同时设定才能使窗口某单可见。
WS_SIZEBOX:创建一个可调边框的窗口,与WS_THICKFRAME风格相同。
WS_SYSMENU:创建一个在标题条上带有窗口菜单的窗口,必须同时设定WS_CAPTION风格。
WS_TABSTOP:创建一个控制,这个控制在用户按下Tab键时可以获得键盘焦点。按下Tab键后使键盘焦点转移到下一具有WS_TABSTOP风格的控制。
WS_THICKFRAME:创建一个具有可调边框的窗口,与WS_SIZEBOX风格相同。
WS_TILED:产生一个层叠的窗口。一个层叠的窗口有一个标题和一个边框。与WS_OVERLAPPED风格相同。
WS_TILEDWINDOW:创建一个具有WS_OVERLAPPED,WS_CAPTION,WS_SYSMENU, WS_THICKFRAME,WS_MINIMIZEBOX,WS_MAXIMIZEBOX风格的层叠窗口。与WS_OVERLAPPEDWINDOW风格相同。
WS_VISIBLE:创建一个初始状态为可见的窗口。
WS_VSCROLL:创建一个有垂直滚动条的窗口。
X
指定窗口的初始水平位置。对一个层叠或d出式窗口,X参数是屏幕坐标系的窗口的左上角的初始X坐标。对于子窗口,x是子窗口左上角相对父窗口客户区左上角的初始X坐标。如果该参数被设为CW_USEDEFAULT则系统为窗口选择缺省的左上角坐标并忽略Y参数。CW_USEDEFAULT只对层叠窗口有效,如果为d出式窗口或子窗口设定,则X和y参数被设为零。
Y
指定窗口的初始垂直位置。对一个层叠或d出式窗口,y参数是屏幕坐标系的窗口的左上角的初始y坐标。对于子窗口,y是子窗口左上角相对父窗口客户区左上角的初始y坐标。对于列表框,y是列表框客户区左上角相对父窗口客户区左上角的初始y坐标。如果层叠窗口是使用WS_VISIBLE风格位创建的并且X参数被设为CW_USEDEFAULT,则系统将忽略y参数。
nWidth
以设备单元指明窗口的宽度。对于层叠窗口,nWidth或是屏幕坐标的窗口宽度或是CW_USEDEFAULT。若nWidth是CW_USEDEFAULT,则系统为窗口选择一个缺省的高度和宽度:缺省宽度为从初始X坐标开始到屏幕的右边界,缺省高度为从初始Y坐标开始到目标区域的顶部。CW_USEDEFAULT只对层叠窗口有效;如果为d出式窗口和子窗口设定CW_USEDEFAULT标志则nWidth和nHeight被设为零。
nHeight
以设备单元指明窗口的高度。对于层叠窗口,nHeight是屏幕坐标的窗口宽度。若nWidth被设为CW_USEDEFAULT,则系统忽略nHeight参数。
hWndParent
指向被创建窗口的父窗口或所有者窗口的句柄。若要创建一个子窗口或一个被属窗口,需提供一个有效的窗口句柄。这个参数对d出式窗口是可选的。Windows NT 5.0;创建一个消息窗口,可以提供HWND_MESSAGE或提供一个己存在的消息窗口的句柄。
hMenu
菜单句柄,或依据窗口风格指明一个子窗口标识。对于层叠或d出式窗口,hMenu指定窗口使用的菜单:如果使用了菜单类,则hMenu可以为NULL。对于子窗口,hMenu指定了该子窗口标识(一个整型量),一个对话框使用这个整型值将事件通知父类。应用程序确定子窗口标识,这个值对于相同父窗口的所有子窗口必须是唯一的。
hlnstance
与窗口相关联的模块实例的句柄。
lpParam
指向一个值的指针,该值传递给窗口WM_CREATE消息。该值通过在IParam参数中的CREATESTRUCT结构传递。如果应用程序调用CreateWindow创建一个MDI客户窗口,则lpParam必须指向一个CLIENTCREATESTRUCT结构。
返回值:如果函数成功,返回值为新窗口的句柄:如果函数失败,返回值为NULL。若想获得更多错误信息,请调用GetLastError函数。
例程:
// Window.cpp : Defines the entry point for the application.#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM)
int APIENTRY WinMain(HINSTANCE hInstance, //应用程序的实例句柄,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine, //命令行
int nCmdShow) //显示方式
{
MSG msg
HWND hWnd
char szTitle[]="系统信息" // The title bar text
char szWindowClass[]="popMsg" // The title bar text
WNDCLASSEX wcex={0}
wcex.cbSize = sizeof(WNDCLASSEX) //WNDCLASSEX结构体大小
wcex.style = CS_HREDRAW | CS_VREDRAW //位置改变时重绘
wcex.lpfnWndProc = (WNDPROC)WndProc //消息处理函数
wcex.hInstance = 0 //当前实例句柄
wcex.hbrBackground = (HBRUSH)COLOR_WINDOWFRAME //背景色
wcex.lpszClassName = szWindowClass //参窗口类名
wcex.hIcon =0 //图标
wcex.hCursor =LoadCursor(NULL, IDC_ARROW) //光标
wcex.lpszMenuName =0 //菜单名称
wcex.hIconSm =0 //最小化图标
RegisterClassEx(&wcex) //注册窗口类
hWnd = CreateWindow(szWindowClass, szTitle, WS_SYSMENU|WS_VISIBLE, //创建窗口
CW_USEDEFAULT,CW_USEDEFAULT, 400, 300, NULL, NULL, 0, NULL)
if (!hWnd){
return FALSE
}
ShowWindow(hWnd, nCmdShow)
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)
{
PAINTSTRUCT ps
HDC hdc
RECT rect
switch (message)
{
case WM_PAINT: //重绘消息
hdc = BeginPaint(hWnd, &ps)
GetClientRect(hWnd, &rect)
MoveToEx(hdc,10,10,0)
SelectObject( hdc,::CreatePen(PS_SOLID,1,RGB(0xFF,0,0)))
LineTo(hdc,100,200)
// DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER)
EndPaint(hWnd, &ps)
break
case WM_CREATE:
RegisterHotKey(hWnd ,1, 0 ,0x41 )
break
case WM_HOTKEY:
MessageBox(0,0,0,0)
break
case WM_TIMER:
break
case WM_DESTROY: //窗口销毁消息
PostQuitMessage(0)
break
default:
return DefWindowProc(hWnd, message, wParam, lParam)
}
return 0
}
学习c++程序基础知识学习经典入门。C++程序是一门广泛用于工业软件研发的大型语言。具有很高的复杂性和解决问题的能力。C++不仅在开发上极具价值,同时在学术界也就有很高的价值。有关旁厅洞C++的文章应该可以用浩如烟海来形容了吧。
C++的世界级经典书籍也是数不胜数。然而,目前开发语言是如此地繁荣,就连微软也在推出了新的开发语言C#。一个不可否认的现实是,在低阶程序设计领域,C++挤压着C同时也在承受着C的强烈反d,伏肆前段时间看了据说是微软 *** 作系统源代码的东东,其中很多还是C语言。而在高阶程序设计领域,Java和C#正在不断蚕食着C++的地盘。
也许Java和C#的狂潮终将迫使C++回归本位— 回到它有着根本性优势的开发领域:低级系统程序设计、高级大规模高性能应用设计、嵌入式程序设计、通用程序设计以及数值科学计算等。果真如此,我认为这未尝不是一件好事。电力系统软件所要求的高性能和大规模数值计算正是C++所擅长的。就我所接触的南瑞和鲁能,很多涉及到电力系统计算的软件如PAS等,都是用C++来开发的。
在电力系统软件开发这块阵地,运枯C++大有用武之地。C++吸引如此之多的智力投入,以至于这个领域的优秀作品,包括重量级的软件产品、程序库以及书籍等,数不胜数。在C++之父Bjarne Stroustrup的个人主页上,有一页列出了一些(全部或大部分)使用C++编写的系统、应用程序和库。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)