by BingoMan » 2006年9月30日(土) 00:13
イグトランス様、早速のご返事ありがとうございます。
具体的なコードを出していなかったのでここに掲載します。
まず先頭で次のグローバル変数を定義しています。
コード: 全て選択
' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
Dim hOrgDC As HDC
Dim hOrgBmp As HBITMAP
Dim hCpyDC As HDC
Dim hCpyBmp As HBITMAP
'GetObject関数で取得する情報を格納するための変数
Dim OrgBitmap As BITMAP
Dim OrgBits As BytePtr
Dim CpyBitmap As BITMAP
Dim CpyBits As BytePtr
そしてウィンドウ生成時に次の処理を行っています。
コード: 全て選択
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
Dim hDC As HDC
Dim i As Long,j As Long
hDC=GetDC(hMainWnd)
hCpyDC=CreateCompatibleDC(hDC)
hCpyBmp=CreateCompatibleBitmap(hDC,200,200)
SelectObject(hCpyDC,hCpyBmp)
hOrgDC=CreateCompatibleDC(hDC)
hOrgBmp=LoadImage(GetModuleHandle(0),XXX_BMP1,IMAGE_BITMAP,200,200,LR_DEFAULTCOLOR)
SelectObject(hOrgDC,hOrgBmp)
ReleaseDC(hMainWnd,hDC)
GetObject(hOrgBmp,SizeOf(BITMAP),OrgBitmap)
OrgBits=OrgBitmap.bmBits'bit配列の先頭アドレスをBytePtr型変数に格納
GetObject(hCpyBmp,SizeOf(BITMAP),CpyBitmap)
CpyBits=CpyBitmap.bmBits'bit配列の先頭アドレスをBytePtr型変数に格納
/*デバッグ時にここの部分でエラーが発生
For i=0 To 199
For j=0 To 199
SetByte(CpyBits+i*200+j,GetByte(OrgBits+i*200+j))
Next
Next
*/
'代わりにGetObjectで取得したbit配列の先頭アドレスを表示
MessageBox(hMainWnd,Hex$(OrgBits),"",MB_OK)
End Sub
このプログラムを実行したところ、表示されるアドレスが常に0でした。
つまり先ほど質問した内容の
1の時点でうまくいっていないようです。
このプログラムの間違いを教えてください。よろしくお願い致します。
イグトランス様、早速のご返事ありがとうございます。
具体的なコードを出していなかったのでここに掲載します。
まず先頭で次のグローバル変数を定義しています。
[code]' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
Dim hOrgDC As HDC
Dim hOrgBmp As HBITMAP
Dim hCpyDC As HDC
Dim hCpyBmp As HBITMAP
'GetObject関数で取得する情報を格納するための変数
Dim OrgBitmap As BITMAP
Dim OrgBits As BytePtr
Dim CpyBitmap As BITMAP
Dim CpyBits As BytePtr[/code]
そしてウィンドウ生成時に次の処理を行っています。
[code]Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
Dim hDC As HDC
Dim i As Long,j As Long
hDC=GetDC(hMainWnd)
hCpyDC=CreateCompatibleDC(hDC)
hCpyBmp=CreateCompatibleBitmap(hDC,200,200)
SelectObject(hCpyDC,hCpyBmp)
hOrgDC=CreateCompatibleDC(hDC)
hOrgBmp=LoadImage(GetModuleHandle(0),XXX_BMP1,IMAGE_BITMAP,200,200,LR_DEFAULTCOLOR)
SelectObject(hOrgDC,hOrgBmp)
ReleaseDC(hMainWnd,hDC)
GetObject(hOrgBmp,SizeOf(BITMAP),OrgBitmap)
OrgBits=OrgBitmap.bmBits'bit配列の先頭アドレスをBytePtr型変数に格納
GetObject(hCpyBmp,SizeOf(BITMAP),CpyBitmap)
CpyBits=CpyBitmap.bmBits'bit配列の先頭アドレスをBytePtr型変数に格納
/*デバッグ時にここの部分でエラーが発生
For i=0 To 199
For j=0 To 199
SetByte(CpyBits+i*200+j,GetByte(OrgBits+i*200+j))
Next
Next
*/
'代わりにGetObjectで取得したbit配列の先頭アドレスを表示
MessageBox(hMainWnd,Hex$(OrgBits),"",MB_OK)
End Sub[/code]
このプログラムを実行したところ、表示されるアドレスが常に0でした。
つまり先ほど質問した内容の[b]1[/b]の時点でうまくいっていないようです。
このプログラムの間違いを教えてください。よろしくお願い致します。