打印本文 打印本文 关闭窗口 关闭窗口
簡單的Windows API示例
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2287  更新时间:2009/4/23 18:36:55  文章录入:mintao  责任编辑:mintao
p;     EndDialog(HndAbout, 1);
        Exit;
      end;
  end;
  Result := False;
end;

function WndProc(HndWnd: HWND; AMsg, WParam, LParam: LongInt): LongInt; stdcall;
var
  AMessage: TMessage;
begin
  AMessage.Msg := AMsg;
  AMessage.WParam := WParam;
  AMessage.LParam := LParam;
  AMessage.Result := 0;

  case AMsg of
    WM_PAINT:         OnPaint(HndWnd, TWMPaint(AMessage));
    WM_CHAR:          OnChar(HndWnd, TWMChar(AMessage));
    WM_SYSKEYDOWN:    OnSysKeyDown(HndWnd, TWMSysKeyDown(AMessage));
    WM_KEYDOWN:       OnKeyDown(HndWnd, TWMKeyDown(AMessage));
    WM_MOUSEMOVE:     OnMouseMove(HndWnd, TWMMouseMove(AMessage));
    WM_LBUTTONDBLCLK: OnDblClk(HndWnd, TWMLButtonDblClk(AMessage));

    WM_COMMAND:
      if WParam = cm_About then
      begin
        DialogBox(HInstance, ''''AboutDialog'''', HndWnd, @WndAbout);
        Result := DefWindowProc(HndWnd, AMsg, WParam, LParam);
        Exit;
      end;

    WM_DESTROY:       PostQuitMessage(WM_QUIT);
    else begin
      Result := DefWindowProc(HndWnd, AMsg, WParam, LParam);
      Exit;
    end;
  end;
  Result := AMessage.Result;
end;

function RegisterInstance: Boolean;
var
  AWndCls: TWndClass;
begin
  AWndCls.style := CS_VREDRAW or CS_HREDRAW or CS_DBLCLKS;
  AWndCls.lpfnWndProc := @WndProc;
  AWndCls.cbClsExtra := 0;
  AWndCls.cbWndExtra := 0;
  AWndCls.hInstance := HInstance;
  AWndCls.hIcon := LoadIcon(0, IDI_WINLOGO);
  AWndCls.hCursor := LoadCursor(0, IDC_ARROW);
  AWndCls.hbrBackground := HBrush(Color_Window);
  AWndCls.lpszMenuName := ''''WndMenu'''';
  AWndCls.lpszClassName := sCLS_NAME;

  Result := RegisterClass(AWndCls) <> 0;
end;

function CreateInstance: THandle;
var
  AHnd: THandle;
begin
  AHnd := CreateWindow(sCLS_NAME, sMSG_TITLE, WS_OVERLAPPEDWINDOW, nSYS_X,
nSYS_Y,
                         nWIDTH, nHEIGHT, 0, 0, HInstance, nil);
  if AHnd <> 0 then
  begin
    ShowWindow(AHnd, SW_SHOW );
    UpdateWindow(AHnd);
  end;

  Result := AHnd;
end;


var
  AMsg: TMsg;
begin
  if not RegisterInstance then
  begin
    MessageBox(0, sERR_REGISTER, nil, MB_OK);
    Exit;
  end;

  if CreateInstance = 0 then
  begin
    MessageBox(0, sERR_CREAT, nil, MB_OK);
    Exit;
  end;

  while GetMessage(AMsg, 0, 0, 0) do
  begin
    TranslateMessage(AMsg);
    DispatchMessage(AMsg);
  end;
end.

上一页  [1] [2] 

打印本文 打印本文 关闭窗口 关闭窗口