델파이로 윈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.
/////////////////////////////////////////////////
nX,nY가 WM_CREATE시에 초기화되고, WM_PAINT메세지 들어올때 사용되어지는거 같은데 함수내에서 로컬변수로 사용하시네요... 이러면 WM_PAINT에서 사용하는 nX, nY에 뭐가 들어갈지 알수가 없죠... nX, nY로 전역으로 빼세요...
WM_PAINT받을때마다 글씨를 스크롤하는 프로그램 같은데... 변수를 전역으로 빼니까 잘 동작하는거 같네요...
^^ 항상 즐코하세요...