本文整理自网络,侵删。
Windows 编程[6] - 学习窗体生成的过程六: 最终的代码!program Project1;
uses Windows, Messages;
{回调函数; 其中要处理的消息很多, 最好用 case 语句}function WndProc(wnd: HWND; msg: UINT; wParam: Integer; lParam: Integer): Integer; stdcall;begin Result := 0; case msg of WM_DESTROY: PostQuitMessage(0); {收到 WM_DESTROY 后, 发送 WM_QUIT 消息指示退出} else {其他消息交 DefWindowProc 处理; DefWindowProc 会返回回调函数需要的返回值} Result := DefWindowProc(wnd, msg, wParam, lParam); end;end;
{登记与注册窗口类的函数}function RegMyWndClass: Boolean;var MyWndClass: TWndClass;begin {指定窗口类型} MyWndClass.style := CS_HREDRAW or CS_VREDRAW; {改变大小时重绘} MyWndClass.lpfnWndProc := @WndProc; {回调函数指针} MyWndClass.cbClsExtra := 0; {没有额外的窗口类信息} MyWndClass.cbWndExtra := 0; {没有额外的窗口信息} MyWndClass.hInstance := HInstance; {程序实例句柄} MyWndClass.hIcon := 0; {没指定图标} MyWndClass.hCursor := LoadCursor(0, IDC_ARROW); {选用了系统提供的指针} MyWndClass.hbrBackground := HBRUSH(COLOR_BTNFACE + 1); {背景色使用 Windows 默认的按钮颜色} MyWndClass.lpszMenuName := nil; {不指定默认菜单} MyWndClass.lpszClassName := 'MyWindowClass'; {给窗口类型命名}
Result := RegisterClass(MyWndClass) <> 0; {注册窗口类型}end;
{主程序}var hWnd: THandle; Msg : TMsg;begin {调用登记与注册窗口的函数} if not RegMyWndClass then begin MessageBox(0, '窗口类注册失败!', '提示', MB_OK + MB_ICONERROR); Exit; end;
{建立窗口并返回句柄; 既然有 CreateWindowEx 就不使用 CreateWindow 了} hWnd := CreateWindowEx(0, {不使用扩展风格} 'MyWindowClass', {窗口类型名} '新窗口', {标题} WS_OVERLAPPEDWINDOW, {窗口的常规样式} Integer(CW_USEDEFAULT), {默认水平位置} Integer(CW_USEDEFAULT), {默认垂直位置} Integer(CW_USEDEFAULT), {默认宽度} Integer(CW_USEDEFAULT), {默认高度} 0, {无父窗口} 0, {无主菜单} HInstance, {实例句柄} nil {无附加信息} );
if hWnd = 0 then {如果窗口建立失败} begin MessageBox(0, '窗口建立失败!', '提示', MB_OK + MB_ICONERROR); Exit; end;
{显示窗口与更新窗口} ShowWindow(hWnd, SW_SHOWNORMAL); UpdateWindow(hWnd);
{消息循环; GetMessage 在收到 WM_QUIT 消息时会返回 False, 从而终止循环} while(GetMessage(Msg, 0, 0, 0)) do begin TranslateMessage(Msg); {需要对部分键盘消息的再处理} DispatchMessage(Msg); {将消息发送给回调函数} end; Halt(Msg.wParam); {没有了消息循环程序自然会退出; 加上这句, 程序会根据退出码主动退出}end.
相关阅读 >>
Delphi android使用idhttp.get抓取https(ssl)文件
Delphi incyear、incmonth、incweek、incday、inchour、incminute、incsecond、incmillisecond �c 增时
Delphi firedac 连接sql server一些要注意的地方
Delphi twebbrowser:确定带有框架的页面何时完成
更多相关阅读请进入《Delphi》频道 >>