2003/12/14 (日)
(/_;) だいれくとえっくす
DirectDraw でフルスクリーンにでもしてみようと、こんな関数作ってみた。
void DirectDraw::ToFullScreen(const HWND hWnd,
const unsigned int width,
const unsigned int height,
const unsigned int colordepth) throw (e_directdraw)
{
HRESULT ddrval = lpDD->SetCooperativeLevel(hWnd, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
if(ddrval != DD_OK)
THROW(e_directdraw);
ddrval = lpDD->SetDisplayMode(width, height, colordepth);
if(ddrval != DD_OK)
THROW(e_directdraw);
}なお、e_directdraw は例外用のクラス。本当は std::runtime_error を継承させるのが望ましいんだけど、今は継承してません。定義は、
class e_base {
};
#define EXCEPTION(e) \
class e : public e_base \
{ \
private: \
char *m_what; \
int m_code; \
public: \
e(const char *what, const int code) { \
m_code = code; \
m_what = (char *)what; \
} \
~e() { \
} \
const char *what() const \
{ \
return m_what; \
} \
const int code() const \
{ \
return m_code; \
} \
};
EXCEPTION(e_directdraw)こんな感じ。ダメな設計なのでよい子は真似しないように。THROW マクロは、
#define THROW(e) throw e(__FILE__, __LINE__)こんなの。
だいぶずれた気がするけど、これって、自動でウィンドウモードに戻してくれるのね。タイミングは hWnd が破棄された瞬間かな?それとも lpDD が破棄された瞬間かな?(前者っぽい気がするなぁ。確かめる気もないけど。
ちなみに、HRESULT result = ::DirectDrawCreate(NULL, &lpDD, NULL); というコードが DirectDraw クラスのコンストラクタにいて、lpDD はメンバ変数なのです。
どうでもいいけど、こんな日記を書くと、中身が とかだらけになるという罠。自動変換しないと耐えられない…
ただ、VB みたいな言語ならいいんだけど、VC++ 6.0 でこのインターフェースはちょっと気持ち悪いかも。
(/_;) まじめにコード書いたあとは、
こういうふざけたコードを書きたくなる…。
#include <windows.h>
#include "debug.h" // プロトタイプ宣言を詰めてあるだけ
#define for if(0);else for
void DebugOut(const char *format, ...)
{
#ifdef _DEBUG
va_list arg;
va_start(arg, format);
for(size_t i = (size_t)1 ; i < (size_t)100 ; i++)
{
char *buf = new char[i * 1024 + 2];
if(_vsnprintf(buf, i * 1024, format, arg) > 0)
{
#ifdef DEBUG_OUT_CONSOLE
strcat(buf, "\n");
::OutputDebugString(buf);
#endif // DEBUG_OUT_CONSOLE
#ifdef DEBUG_OUT_MSGBOX
::MessageBox(NULL, buf, "Debug Message", MB_OK);
#endif // DEBUG_OUT_MSGBOX
delete [] buf;
break;
}
delete [] buf;
}
va_end(arg);
#endif // _DEBUG
}あると便利に間違いはないんだが、これ、欠点アリ。
コードに埋め込んだ
DebugOut("変数 i の値は %d だよぉ〜 ヽ(´ー`)ノ", i);とかいうのは、リリース版でも複雑すぎて inline にはしてくれないだろうな…_DEBUG が define されているときは簡単すぎる…^^;;書いてるときに気づけよな>自分、きっと。可変個の引数を持つからマクロにもできないし…。むぅ。やっぱり原始的な #ifdef _DEBUG 〜 #endif でコードを囲うしかないんだろうか。
(/_;) 昨日の痴漢置換文
よく見たら「堪忍」って、不利な立場や困難な状況を堪え忍ぶこと
っていう意味もあるのね…。観念の(2)あきらめること。覚悟すること。「もうだめだと―した」
の方が妥当な気がしなくもないんだけど、どうなんだろー。考えるの面倒だからやめ。(ぉぃ
(/_;) お買い物
久しぶり(1ヶ月ぶり?)に日本橋に行ってきた。本当は HDD とプリンタ買いにいったんだけど、HDD は目ぼしいものがなく、プリンタは見るのを忘れていたという。
その代わり、キーボード購入。Owlteck 製の 112Key キーボード。
メカニカルのカチャカチャ具合がいい感じ♪
今感じてる欠点は2つ。
- ENTER-Delete 間、BS-Insert 間が無い
- 音がすごいから仕事サボってるのがバレる
ま、どっちも運用でカバーできるかなぁ。(後者は無理か)
(/_;) 破壊
WindowsXP 吹っ飛んだ〜♪
仕方ないので再インストール
ついでに、Windows 2000 用のパーティション(10GB)を削除して、XP 用のパーティション(10GB)とくっつけて 20GB のシステムパーティションを確保しようかと思ったら、くっつけられなかった…。
KNOPPIX あたり使ったらどうにかならないかなぁ。明日会社から KNOPPIX の CD 持って帰ってやってみるか。