Q&A

  • 델파이로 WINAPI..

델파이로 윈api를 공부하고 있습니다.
공부하면서, 여러가지 소스들을 테스트 하는데,
도저히 알수가 없어 이렇게 질문 올립니다.
좀 봐 주십시요.
글자색을 흰색, 배경을 파란색으로 하고자 하는
소스입니다.
도대체 실행이 되지 않습니다
그대로 복사하셔서 테스트 해 보실수 있습니다.

////////////////////////////////////////////////////////////

program lecture6;
{$APPTYPE CONSOLE}
uses
  Windows, Messages ;

{$R *.res}

function Lec6_WindowProc(TheWindow:HWND;TheMessage:UINT; WParam:WPARAM; LParam: LPARAM): Longint; stdcall; export;
var
  nX,nY:Integer;
  cX,cY:Integer;
  hDC:THandle;
  ps:PAINTSTRUCT;
begin

  case TheMessage of

    WM_CREATE
    :begin
        nX:=100;    nY:=10;
        Exit;
    end;

    WM_PAINT
    :begin
         hDC:=BeginPaint(TheWindow,ps);
         SetTextAlign(hDC,TA_TOP or TA_RIGHT);
         SetTextColor(hDC,RGB(255,255,255));
         SetBkColor(hDC,RGB(0,0,125));
         TextOut(hDC,nX,nY,PChar('이것은'),6);
         nY:=ny+20;
         TextOut(hDC,nX,nY,PChar('책'),2);
         nY:=ny+20;
         TextOut(hDC,nX,nY,PChar('입니다'),10);
         EndPaint(TheWindow,ps);
         Exit;
    end;

    WM_DESTROY
    :begin
        PostQuitMessage(0);
        Exit;
    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 := @Lec6_WindowProc ;
  WindowClass.cbClsExtra  := 0;
  WindowClass.cbWndExtra  := 0;
  WindowClass.hInstance   := hInstance;
  WindowClass.hIcon       := LoadIcon(0,IDI_APPLICATION);
  WindowClass.hCursor     := LoadCursor(0,IDC_ARROW);
  WindowClass.hbrBackground := COLOR_WINDOW;
  WindowClass.lpszMenuName := nil;
  WindowClass.lpszClassName:= PChar('Lecture6');
  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 := CreateWindow(PChar('Lecture6'),
                          PChar('Lecture6'),
                          WS_OVERLAPPEDWINDOW or WS_VISIBLE,
                          CW_USEDEFAULT,
                          CW_USEDEFAULT,
                          CW_USEDEFAULT,
                          CW_USEDEFAULT,
                          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.

/////////////////////////////////////////////////


2  COMMENTS
  • Profile
    최용일 2003.03.07 05:34
    안녕하세요. 최용일입니다.

    nX,nY가 WM_CREATE시에 초기화되고, WM_PAINT메세지 들어올때 사용되어지는거 같은데 함수내에서 로컬변수로 사용하시네요... 이러면 WM_PAINT에서 사용하는 nX, nY에 뭐가 들어갈지 알수가 없죠... nX, nY로 전역으로 빼세요...

    WM_PAINT받을때마다 글씨를 스크롤하는 프로그램 같은데... 변수를 전역으로 빼니까 잘 동작하는거 같네요...

    ^^ 항상 즐코하세요...

  • Profile
    맑은물 2003.03.07 20:44