« 日記 | メイン | LifeGame »

2005年04月28日

C++

別にC++の話題でもないんですが、

class Window {
	HWND MyHandle;
public:
	int RegiCreWindow(HINSTANCE hInstance,int nCmdShow);
	HWND Get(void){	return(MyHandle); }
};

これで、

Window MainWindow;
HWND handle = MainWindow.Get;

とすると、
error C2440: '初期化中' : 'HWND (__thiscall Window::* )(void)' から 'HWND' に変換できません。

火病を起こしてとりあえず違う方法でハンドルを入手する事に。

豆知識

別名常識。

switch文で、あるcaseの中で引数が必要なコンストラクタを持つクラスから実体を作ると、
他のcaseにて初期化されていないと怒られる。
とりあえず実体を作った部分を{ }で囲めばOKのようで。

物凄く鬱陶しいキャプションバーのサイズ。
こいつを勘案してサイズを調整してくれるナイスな関数があると聞いちゃ黙っちゃおれないってなもんです。

BOOL AdjustWindowRect(
LPRECT lpRect, // クライアント領域の座標が入った構造体へのポインタ
DWORD dwStyle, // ウィンドウスタイル
BOOL bMenu // メニューを持つかどうかの指定
);

こいつを、

RECT WinSize;
SetRect(&WinSize,0,0,width,height);
AdjustWindowRect(&WinSize,WS_OVERLAPPEDWINDOW^WS_THICKFRAME^WS_MAXIMIZEBOX,0);

こんな感じで使ってやって、
CreateWindowのサイズ指定のとこで、

WinSize.right - WinSize.left, WinSize.bottom - WinSize.top

こんな感じで指定すればOK。
CreateWindowEXを使う場合はAdjustWindowRectEXを使いましょう。

痒い所に手が届く関数があるのにそれを見つける事ができなくては使えない。
検索力が大切なのかもしれません?

落とし穴

どうも頭が全然ついていっていないっぽい。
二次元配列の動的確保という考えは間違っているようで。

http://void.seesaa.net/article/20429.html

一次元配列を二次元配列のように扱うか、全く別の方法で管理するか、どうしたものか、とりあえず寝。

投稿者 miff : 2005年04月28日 21:09

コメント



XREAAD