dポイントプレゼントキャンペーン実施中!

windowsのアプリケーションを作っているのですがどうにもうまくコンパイルできず困っています。

キャスト演算子かポインタ関係だと思うのですがいろいろ変えてみてもうまくいきませんでした。

私は朝までしかいられないため起きておられる方ですぐに答えられる方がいれば具体的にどうしたらできるようになるか答えていただけますでしょうか?
今日を逃したら大体、一ヶ月先に反応すると思うのでよろしくお願いします。

以下エラー部分です。

LRESULT CALLBACK WndProc(HWND hwnd,UINT iMsg,WPARAM wParam,LPARAM lParam)
{

HDC hdc,hdcWin;
PAINTSTRUCT ps;

int i,j;

switch(iMsg){

case WM_CREATE:

lpDIB=(LPBYTE)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(BITMAPINFO)+E*F);

lI=(LPBITMAPINFO)lpDIB;

for(i=0;i<F;i++){
alpPixel[i]=(LPDWORD)(lpDIB+sizeof(BITMAPINFO)+E*i);
}

lI->bmiHeader.biSize =sizeof(BITMAPINFOHEADER);
lI->bmiHeader.biWidth =B;
lI->bmiHeader.biHeight =-B;
lI->bmiHeader.biPlanes =1;
lI->bmiHeader.biBitCount =B;
lI->bmiHeader.biCompression =BI_RGB;

for(i=0;i<D;i++){

*(alpPixel[0]+i)=0x00ff0000;
*(alpPixel[1]+i)=0x0000ff00;
*(alpPixel[2]+i)=0x000000ff;
*(alpPixel[3]+i)=0x0000ffff;
*(alpPixel[4]+i)=0x00ffffff;
}

hdc=GetDC(hwnd);

hBMP=CreateCompatibleBitmap(hdcWin,C,C);

hdcBMP=CreateCompatibleDC(hdc);

hOldBMP=(HBITMAP)SelectObject(hdcBMP,hBMP);

for(i=0;i<A;i++){
for(j=0;j<A;j++){
StretchDIBits(hdcBMP,j*B,i*B,B,B,
0,0,B,B,alpPixel[map[j+i*A]],
lI,DIB_RGB_COLORS,SRCCOPY);
}
}

ZeroMemory(&biInfo,sizeof(BITMAPINFO));

lI->bmiHeader.biSize =sizeof(BITMAPINFOHEADER);
lI->bmiHeader.biWidth =C;
lI->bmiHeader.biHeight =-C;
lI->bmiHeader.biPlanes =1;
lI->bmiHeader.biBitCount =B;
lI->bmiHeader.biCompression =BI_RGB;

○ hBMP2=CreateDIBSection(hdc,&biInfo,DIB_RGB_COLORS,(LPVOID)(&lpPixel),NULL,0); //エラーはここ

hdcBMP2=CreateCompatibleDC(hdc);

hOldBMP2=(HBITMAP)SelectObject(hdcBMP2,hBMP2);

ReleaseDC(hwnd,hdc);

X=0;
Y=1;

return 0;

case WM_DESTROY:
~中略~

}

return DefWindowProc(hwnd,iMsg,wParam,lParam);
}

A 回答 (1件)

 エラー内容が書かれていないので確かなことは言えないけど、おそらくエラーの原因は変数が未宣言だとか、パラメータの型が違うってこと。



> ○ hBMP2=CreateDIBSection(hdc,&biInfo,DIB_RGB_COLORS,(LPVOID)(&lpPixel),NULL,0); //エラーはここ

> (LPVOID)(&lpPixel)

 記載のソース中にlpPixelの宣言がどこにもありません。
 仮にどこかにGlobalで宣言されてるにしても型が違います。
 このパラメータはビットマップへのポインタを返す領域のアドレスを入れるので、型は「void**」、あるいは「LPVOID*」でなければなりません。

この回答への補足

すばらしいです。
実はコンパイルエラーしたときにそんな感じのエラーが表示されてたてたのですが、エラーが出てた文章を書き損ねてしまい今どこかに書かれてないか探してたのです。

エラー E2034 169: 'void *' 型は 'void * *' 型に変換できない(関数 __stdcall WndProc(HWND__ *,unsigned int,unsigned int,long) )
エラー E2340 169: 4 番目のパラメータは void * * 型として定義されているので void * 型は渡せない(関数 __stdcall WndProc(HWND__ *,unsigned int,unsigned int,long) )

エラーの部分はこんな感じでした。


グローバルはこうなっています。

#include<windows.h>

#define A 4
#define B 32
#define C A*B
#define D B*B
#define E D*A

#define F 5


LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE hInst;

BYTE map[]={0,1,2,1,2,1,
2,1,0,1,3,2,
0,1,3,1,0,1,
1,0,2,1,2,0,
0,1,2,1,2,1,
2,1,0,1,3,2,
};

HBITMAP hBMP,hOldBMP;
HDC hdcBMP;

LPBYTE lpDIB;
LPBITMAPINFO lI;
LPDWORD alpPixel[5];

BITMAPINFO biInfo;
LPDWORD lpPixel;
HBITMAP hBMP2,hOldBMP2;
HDC hdcBMP2;

int X,Y;

void draw();

補足日時:2010/08/17 05:10
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!