文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Window程序设计——自已的窗口

Window程序设计——自已的窗口

时间:2011-03-03  来源:ManLoveGirls

program HardCore;

uses
Windows,Messages;
{窗口过程}
function WindowProc(TheWindow: HWnd; TheMessage,WParam,LParam: Longint):Longint;stdcall;export;
begin
case TheMessage of
{收到 WM_DESTROY消息后,退出程序}
WM_DESTROY:
begin
PostQuitMessage(
0);
Result :
= 0;
end;

end;
{对于所有未处理的过程调用默认的窗口过程}
Result :
= DefWindowProc(TheWindow,TheMessage,WParam,LParam);
end;


{注册窗口类}
function RegisterClass:Boolean;
var
WindowClass: TWndClass;
begin

WindowClass.Style :
= CS_HREDRAW OR CS_VREDRAW;{设置类风格}
WindowClass.lpfnWndProc:
=@WindowProc; {指向窗口过程的指针}
WindowClass.cbClsExtra :
= 0; {没有额外的类信息}
WindowClass.cbWndExtra :
=0; {没有额外的窗口信息}
WindowClass.hInstance :
=Hinstance;{程序实例}
WindowClass.hIcon :
=LoadIcon(0,IDI_APPLICATION);{载入标志}
WindowClass.hCursor :
=LoadCursor(0,IDC_UPARROW); {光标}
WindowClass.hbrBackground:
=COLOR_WINDOW;{颜色}
WindowClass.lpszMenuName:
=Nil; {菜单}
WindowClass.lpszClassName:
='Testclass';{注册类名}


{开始注册窗口}
Result :
= Windows.RegisterClass(WindowClass) <> 0;

end;

var
TheMessage: TMsg;
OurWindow: HWND;
begin
//注册新窗口类
if not RegisterClass then
begin
MessageBox(
0,'RegisterClass failed',nil,MB_OK);
Exit;
end;

//在新窗口类的基础上建立窗口

OurWindow :
= CreateWindowEx(0, //没有扩展风格
'TestClass', //窗体类名
'HardCore Window',//标题栏
WS_OVERLAPPEDWINDOW
or WS_VISIBLE, //窗口风格

CW_USEDEFAULT,
//left
CW_USEDEFAULT,
//top
CW_USEDEFAULT,
//w
CW_USEDEFAULT,
//h
0, //父窗口句柄
0, //菜单栏
hInstance,
//程序实例
nil //没有附加信息
);

//如果窗口没有建立成功,则退出程序
if OurWindow=0 then
begin
MessageBox(
0,'CreateWindow Failed',Nil,MB_OK);
exit;
end;


{标准消息循环}
while GetMessage(TheMessage,0,0,0) do
begin
TranslateMessage(TheMessage);
DispatchMessage(TheMessage);
end;
end.

创建一个窗口必须有

窗口处理过程(接收消息类型,处理消息)

function WinProc(hwnd:Hwnd;Msg:TMsg;WParam:WPARAM;lParam:LParam):LResult;stdcall;

窗口类注册(设置类的各种属性)

TwndClass 类是一个结构

在Delphi中我们可以看到

TWndClass = TWndClassA;

TWndClassA=tagWndClassA

 tagWNDCLASSA = packed record
style: UINT;
lpfnWndProc: TFNWndProc;
cbClsExtra: Integer;
cbWndExtra: Integer;
hInstance: HINST;
hIcon: HICON;
hCursor: HCURSOR;
hbrBackground: HBRUSH;
lpszMenuName: PAnsiChar;
lpszClassName: PAnsiChar;

这样我们就可以很好的声明了

var 

WindowClass:TWndClass;

注册类之后又要在系统中注册

调用

RegisterClass()函数 成功返回true 失败返回false

创建窗口

function CreateWindowEx(dwExStyle: DWORD; lpClassName: PChar;
lpWindowName: PChar; dwStyle: DWORD; X, Y, nWidth, nHeight: Integer;
hWndParent: HWND; hMenu: HMENU; hInstance: HINST; lpParam: Pointer): HWND;

返回窗口句柄

调用标准循环函数获取消息

 BOOL GetMessage(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax
  参数:
  lpMsg:指向MSG结构的指针,该结构从线程的消息队列里接收消息信息。
  hWnd:取得其消息的窗口的句柄。这是一个有特殊含义的值(NULL)。GetMessage为任何属于调用线程的窗口检索消息,线程消息通过PostThreadMessage寄送给调用线程。
  wMsgFilterMin:指定被检索的最小消息值的整数。
  wMsgFilterMax:指定被检索的最大消息值的整数。
相关阅读 更多 +
排行榜 更多 +
方块枪战战场安卓版

方块枪战战场安卓版

飞行射击 下载
战斗火力射击安卓版

战斗火力射击安卓版

飞行射击 下载
空中防御战安卓版

空中防御战安卓版

飞行射击 下载