|
다름이 아니라 캡쳐 프로그램을 제작중입니다.
그리고 캡쳐되는 영역을 지정하기 위해서 구멍이 뚫힌 폼을 사용하기로 했습니다.
그래서 여기서 뚫힌 폼을 만들어주는 예제를 찾아서 쓰는데 문제는 메인 폼에서 이 폼을 호출할 때마다
"Access violation at address 00000000. Read of address 0000000" 이렇게 뜨네요.
대체 뭐가 잘못 된거지 궁금합니다.
프로그램에서 사용되는 모든 폼들은 자동으로 생성되도록 된 상태고(2개뿐. 메인과 영역을 지정하는 폼) 메인폼에서 이 폼을 단지 show합니다.
각각의 코드는 다음과 같습니다.
//메인에서 captureForm을 호출하는 부분
void __fastcall TForm1::Button8Click(TObject *Sender)
{
CaptureForm->Show();
}
//captureForm의 코드부분. 이외의 코드는 없습니다.
class TCaptureForm : public TForm
{
__published: // IDE-managed Components
void __fastcall FormResize(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TCaptureForm(TComponent* Owner);
};
void __fastcall TCaptureForm::FormResize(TObject *Sender)
{
HRGN WindowRgn, HoleRgn ;
WindowRgn = 0;
GetWindowRgn(Handle, WindowRgn);
DeleteObject(WindowRgn);
WindowRgn = CreateRectRgn(0,0,Width, Height);
HoleRgn = CreateRectRgn(10, 30, Width - 10, Height - 10);
CombineRgn(WindowRgn, WindowRgn, HoleRgn, RGN_DIFF);
SetWindowRgn(Handle, WindowRgn, false);
DeleteObject(HoleRgn);
DeleteObject(WindowRgn);
}
대체 어디가 잘못된걸까요?
|