最初ボタンが見えない
ボタンを大きく中央に表示するプログラムを作りました。
しかし中央をクリックするまでボタンが現れません。
どうしたら最初からボタンが現れるのでしょうか?
またフォントをクリエイトし続けてリソースは尽きないのでしょうか?
#include <windows.h>
#include <stdio.h>
HWND hB;
LONG WINAPI WinProcedure(HWND hW,UINT wM,UINT wP,LONG lP)
{
RECT rt;
char s[99];
int W,H;
static HFONT hF;
switch(wM)
{
case WM_PAINT:
GetClientRect(hW,&rt);
W=rt.right-rt.left;H=rt.bottom-rt.top;
DeleteObject(hF);
hF=CreateFont(H/4,W/4,0,0,FW_NORMAL,FALSE,FALSE,FALSE,SHIFTJIS_CHARSET,OUT_TT_ONLY_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FIXED_PITCH|FF_MODERN,"MS Pゴシック");
SendMessage(hB,WM_SETFONT,(WPARAM)hF,1);
MoveWindow(hB,W/4,H/4,W/2,H/2,1);
sprintf(s,"幅=%d,高さ=%d",H,W);SetWindowText(hW,s);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default: return(DefWindowProc(hW,wM,wP,lP));
}
}
WINAPI WinMain(HINSTANCE hI,HINSTANCE,LPSTR,int)
{
WNDCLASS wc;
--略--(ここにウィンドウクラスwcをクラス名"I"で登録)
RegisterClass(&wc);
hW=CreateWindow("I","ボタンの親",WS_OVERLAPPEDWINDOW,0,0,0,0,0,0,hI,0);
hB=CreateWindow("BUTTON","子",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,0,0,0,0,hW,0,hI,0);
ShowWindow(hW,SW_SHOWMAXIMIZED);
UpdateWindow(hW);
while(GetMessage(&ms,0,0,0))
{
TranslateMessage(&ms);
DispatchMessage(&ms);
}
return (ms.wParam);
}
お礼
ありがとうございます。 hFile=CreateFile("PictureX.gif",GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); nFileSize=GetFileSize(hFile,NULL); hGlobal=GlobalAlloc(GPTR,nFileSize); ReadFile(hFile,hGlobal,nFileSize,&nReadByte,NULL); CreateStreamOnHGlobal(hGlobal,TRUE,&iStream); OleLoadPicture(iStream,nFileSize,TRUE,IID_IPicture,(LPVOID*)&iPicture); iPicture->get_Width(&lWidth); iPicture->get_Height(&lHeight); //iPicture->Render(hD,0,0,lWidth/32,lHeight/32,0,lHeight,lWidth,-lHeight,NULL); GetClientRect(hW,&rt); iPicture->Render(hD,0,0,rt.right-rt.left,rt.bottom-rt.top,0,lHeight,lWidth,-lHeight,NULL); CloseHandle(hFile); iPicture->Release(); GlobalFree(hGlobal); で一応描画できたのですがおまじないが多くて大変です。 IStream *iStream; OLE_XSIZE_HIMETRIC lWidth; OLE_YSIZE_HIMETRIC lHeight; IPicture *iPicture=NULL; と型宣言された変数が分かりません。 OLE_XSIZE_HIMETRICの構造 IPictureのメンバー関数の引数の意味 /32の意味 等々。