program Project1; uses Windows, Messages; {窗口回调函数, 必须声明在使用它的程序前面} function WndProc(wnd: HWND; msg: UINT; wParam: Integer; lParam: Integer): Integer; stdcall; begin Result := 0; if msg = WM_DESTROY then {当窗口销毁时} PostQuitMessage(0) {告诉 GetMessage: 退出吧!} else Result := DefWindowProc(wnd, msg, wParam, lParam); {其他消息做默认处理} end; {主程序} var hWnd : THandle; Msg : TMsg; 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_WINDOW + 1); {背景色使用 Windows 默认的窗口颜色} MyWndClass.lpszMenuName := nil; {不指定默认菜单} MyWndClass.lpszClassName := 'MyWindowClass'; {给窗口类型命名} {注册窗口类型} RegisterClass(MyWndClass); {建立窗口并返回句柄} hWnd := CreateWindow('MyWindowClass', {窗口类型名} '新窗口', {标题} WS_OVERLAPPEDWINDOW, {窗口的常规样式} Integer(CW_USEDEFAULT), {默认水平位置} Integer(CW_USEDEFAULT), {默认垂直位置} Integer(CW_USEDEFAULT), {默认宽度} Integer(CW_USEDEFAULT), {默认高度} 0, {无父窗口} 0, {无主菜单} HInstance, {实例句柄} nil {无附加信息} ); {显示窗口} ShowWindow(hWnd, SW_SHOWNORMAL); //UpdateWindow(hWnd); {这个更新窗口要不要好像都可以} {消息循环} while(GetMessage(Msg, 0, 0, 0)) do begin TranslateMessage(Msg); {对部分键盘消息的再处理} DispatchMessage(Msg); {将消息发送给回调函数} end; end.接下来再继续完善这些代码!
Windows 编程[5] 学习窗体生成的过程五
根据前面的介绍, 可以完成一个窗口的建立了: