資料を読んで少しずつ理解し始めていたのですが、どうしても不可解な現象に行き当たってしまったので、
自分の手には負えず、ご教授して頂きたいです。
まず、Oriosさんのページより、スケルトンウィンドウのコードをお借りして、次のようなコードを書きました。
[ここをクリックすると内容が表示されます]
そしてこれを実行したところ、ウィンドウのクライアント領域でなく、デスクトップ画面の左上に黒い四角が表示されてしまいました。コード: 全て選択
Dim lpWcx As WNDCLASSEX
Dim hBrush As HBRUSH
Dim hMainWnd As HWND
Dim lpMsg As MSG
Dim hMainDC As HDC
hBrush = CreateSolidBrush(RGB(200,200,255))
FillMemory(VarPtr(lpWcx), Len(lpWcx), 0)
With lpWcx
.lpszClassName = "NORMAL"
.lpfnWndProc = AddressOf(MainWndProc)
.hIcon = LoadIcon(NULL,IDI_APPLICATION)
.hIconSm = LoadIcon(NULL,IDI_WINLOGO)
.hCursor = LoadCursor(NULL,IDC_ARROW)
.cbSize = SizeOf(WNDCLASSEX)
.style = CS_DBLCLKS or CS_HREDRAW or CS_VREDRAW
.hInstance = GetModuleHandle(0)
.hbrBackground = hBrush
End With
RegisterClassEx(lpWcx)
hMainWnd = CreateWindowEx(
NULL,"NORMAL","スケルトンウィンドウ",
WS_OVERLAPPEDWINDOW or WS_VISIBLE,
100, 200, 300, 200,
NULL,NULL,GetModuleHandle(0),NULL
)
While GetMessage(lpMsg, 0, 0, 0) > 0
TranslateMessage(lpMsg)
DispatchMessage(lpMsg)
Wend
DeleteDC(hMainDC)
DeleteObject(hBrush)
End
Function MainWndProc(hWnd As HWND, wMsg As DWord, wParam As DWord, lParam As DWord) As Long
Select Case wMsg
Case WM_CREATE
hMainDC = GetDC(hMainWnd)
Case WM_CLOSE
DestroyWindow(hWnd)
Case WM_DESTROY
PostQuitMessage(0)
Case WM_PAINT
BitBlt(hMainDC,20,20,16,16,0,0,0,BLACKNESS)
InvalidateRect(hMainWnd,ByVal 0,FALSE)
Case Else
MainWndProc = DefWindowProc(hWnd, wMsg, wParam, lParam)
Exit Function
End Select
MainWndProc=0
End Function
どうしてこのようなことが起るのでしょうか?
P.S.
44行目の
コード: 全て選択
hMainDC = GetDC(hMainWnd)
コード: 全て選択
hMainDC = GetDC(hWnd)
この書き方に問題があるんでしょうか?