適当に日々あったこととか書いてます。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
まぁ割とありがちな気がするマクロメモ。
・#define ARRAY_LENGTH(a) (sizeof(a) / sizeof(a[0]))
配列のサイズを取得する。
TCHAR tcBuff[256];
ARRAY_LENGTH(tcBuff)
でいつでも256になれる。
・#define ARRAY_LENGTH(a) (sizeof(a) / sizeof(a[0]))
配列のサイズを取得する。
TCHAR tcBuff[256];
ARRAY_LENGTH(tcBuff)
でいつでも256になれる。
PR
int GetWindowTextLength(
HWND hWnd // ウィンドウまたはコントロールのハンドル
);
指定されたウィンドウのタイトルバーテキストの文字数を返します( そのウィンドウがタイトルバーを持つ場合)。
指定したウィンドウがコントロールの場合は、コントロール内のテキストの文字数を返します。
ただし、GetWindowTextLength 関数で他のアプリケーションのエディットコントロールのテキストの長さを取得することはできません。
長いので以下は続きに~
HWND hWnd // ウィンドウまたはコントロールのハンドル
);
指定されたウィンドウのタイトルバーテキストの文字数を返します( そのウィンドウがタイトルバーを持つ場合)。
指定したウィンドウがコントロールの場合は、コントロール内のテキストの文字数を返します。
ただし、GetWindowTextLength 関数で他のアプリケーションのエディットコントロールのテキストの長さを取得することはできません。
長いので以下は続きに~
BOOL IsWindowVisible(
HWND hWnd // ウィンドウのハンドル
);
指定されたウィンドウの表示状態を調べます。
<パラメータ>
・hWnd
調査するウィンドウのハンドルを指定します。
<戻り値>
指定されたウィンドウ、その親ウィンドウ、そのさらに上位の親ウィンドウのすべてが WS_VISIBLE スタイルを持つ場合は、0 以外の値が返ります。
それ以外の場合は、0 が返ります。
戻り値が示すのは WS_VISIBLE スタイルを持つか持たないかという情報であるため、ウィンドウがその他のウィンドウに完全に隠されていて画面に表示されていなくても 0 以外の値が返る場合があります。
<解説>
ウィンドウの表示状態は、WS_VISIBLE スタイルビットにより示されます。WS_VISIBLE フラグがセットされていれば、ウィンドウは表示されており、WS_VISIBLE スタイルを失わない限りは、以降のそのウィンドウへの描画もすべて表示されます。
WS_VISIBLE スタイルを持っていても、ウィンドウがほかのウィンドウによって覆い隠されている場合や、親ウィンドウによりクリップされている場合は、実際にはそのウィンドウへの描画は一切画面に表示されません。
<対応情報>
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winuser.h で宣言、Windows.h をインクルード
インポートライブラリ:User32.lib を使用
引用:ttp://msdn.microsoft.com/ja-jp/library/cc364819.aspx
<使用メモ>
ウィンドウが可視状態か判定するために使用。
if(IsWindowVisible(hwnd)){
// 可視状態
} else {
// 不可視状態
}
って感じ。
HWND hWnd // ウィンドウのハンドル
);
指定されたウィンドウの表示状態を調べます。
<パラメータ>
・hWnd
調査するウィンドウのハンドルを指定します。
<戻り値>
指定されたウィンドウ、その親ウィンドウ、そのさらに上位の親ウィンドウのすべてが WS_VISIBLE スタイルを持つ場合は、0 以外の値が返ります。
それ以外の場合は、0 が返ります。
戻り値が示すのは WS_VISIBLE スタイルを持つか持たないかという情報であるため、ウィンドウがその他のウィンドウに完全に隠されていて画面に表示されていなくても 0 以外の値が返る場合があります。
<解説>
ウィンドウの表示状態は、WS_VISIBLE スタイルビットにより示されます。WS_VISIBLE フラグがセットされていれば、ウィンドウは表示されており、WS_VISIBLE スタイルを失わない限りは、以降のそのウィンドウへの描画もすべて表示されます。
WS_VISIBLE スタイルを持っていても、ウィンドウがほかのウィンドウによって覆い隠されている場合や、親ウィンドウによりクリップされている場合は、実際にはそのウィンドウへの描画は一切画面に表示されません。
<対応情報>
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winuser.h で宣言、Windows.h をインクルード
インポートライブラリ:User32.lib を使用
引用:ttp://msdn.microsoft.com/ja-jp/library/cc364819.aspx
<使用メモ>
ウィンドウが可視状態か判定するために使用。
if(IsWindowVisible(hwnd)){
// 可視状態
} else {
// 不可視状態
}
って感じ。
HWND GetWindow(
HWND hWnd, // 元ウィンドウのハンドル
UINT uCmd // 関係
);
指定されたウィンドウと指定された関係( またはオーナー)にあるウィンドウのハンドルを返します。
<パラメータ>
・hWnd
ウィンドウのハンドルを指定します。
このウィンドウを元に、uCmd パラメータの値に基づいてウィンドウが検索されます。
・uCmd
指定したウィンドウとハンドルを取得するウィンドウとの関係を指定します。
次の値のいずれかを指定できます。
<戻り値>
関数が成功すると、ウィンドウのハンドルが返ります。
指定した関係を持つウィンドウがない場合は、NULL が返ります。
拡張エラー情報を取得するには、 関数を使います。
<解説>
すべての子ウィンドウを取得する場合、EnumChildWindows 関数を使った方が GetWindow 関数をループ処理で呼び出すよりも信頼性の高い結果が得られます。
GetWindow 関数を呼び出してウィンドウを列挙すると、無限ループに陥ったり、すでに破棄されているウィンドウのハンドルを参照する危険性がでてきます。
<対応情報>
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winuser.h で宣言、Windows.h をインクルード
インポートライブラリ:User32.lib を使用
引用:ttp://msdn.microsoft.com/ja-jp/library/cc364757.aspx
<使用メモ>
EnumWindowsのコールバックで取得したハンドルがオーナーウィンドウ無しかどうかの判定に使用。
if(GetWindow(hwnd, GW_OWNER) == NULL){
// オーナーウィンドウ無し
}
って感じ。
オーナーウィンドウ無し=このハンドルはオーナーウィンドウ、ってことかな・・・?
HWND hWnd, // 元ウィンドウのハンドル
UINT uCmd // 関係
);
指定されたウィンドウと指定された関係( またはオーナー)にあるウィンドウのハンドルを返します。
<パラメータ>
・hWnd
ウィンドウのハンドルを指定します。
このウィンドウを元に、uCmd パラメータの値に基づいてウィンドウが検索されます。
・uCmd
指定したウィンドウとハンドルを取得するウィンドウとの関係を指定します。
次の値のいずれかを指定できます。
GW_CHILD | |
指定したウィンドウが親ウィンドウの場合は、Z オーダーが一番上の子ウィンドウのハンドルを取得します。それ以外の場合は、NULL が返ります。 この関数は、指定されたウィンドウの子ウィンドウだけを調べます。それより下位の子孫は調べません。 | |
GW_ENABLEDPOPUP | |
Windows 2000:指定したウィンドウをオーナーとする有効なポップアップウィンドウのハンドルを取得します( この検索では、GW_HWNDNEXT で見つかる最初のウィンドウを使います)。 有効なポップアップウィンドウがない場合は、指定したウィンドウのハンドルが返ります。 | |
GW_HWNDFIRST | |
指定したウィンドウと同じ種類で最も高い Z オーダーを持つウィンドウのハンドルを取得します。 指定したウィンドウが最前面ウィンドウの場合は、最も高い Z オーダーを持つ最前面ウィンドウのハンドルが返ります。 指定したウィンドウがトップレベルウィンドウの場合は、最も高い Z オーダーを持つトップレベルウィンドウのハンドルが返ります。 指定したウィンドウが子ウィンドウの場合は、最も高い Z オーダーを持つ兄弟ウィンドウのハンドルが返ります。 | |
GW_HWNDLAST | |
指定したウィンドウと同じ種類で最も低い Z オーダーを持つウィンドウのハンドルを取得します。 指定したウィンドウが最前面ウィンドウの場合は、最も低い Z オーダーを持つ最前面ウィンドウのハンドルが返ります。 指定したウィンドウがトップレベルウィンドウの場合は、最も低い Z オーダーを持つトップレベルウィンドウのハンドルが返ります。 指定したウィンドウが子ウィンドウの場合は、最も低い Z オーダーを持つ兄弟ウィンドウのハンドルが返ります。 | |
GW_HWNDNEXT | |
指定したウィンドウより Z オーダーが 1 つ下のウィンドウのハンドルを取得します。指定したウィンドウが最前面ウィンドウの場合は、1 つ下の最前面ウィンドウのハンドルが返ります。 指定したウィンドウがトップレベルウィンドウの場合は、1 つ下のトップレベルウィンドウのハンドルが返ります。 指定したウィンドウが子ウィンドウの場合は、1 つ下の兄弟ウィンドウのハンドルが返ります。 | |
GW_HWNDPREV | |
指定したウィンドウより Z オーダーが 1 つ上のウィンドウのハンドルを取得します。 指定したウィンドウが最前面ウィンドウの場合は、1 つ上の最前面ウィンドウのハンドルが返ります。 指定したウィンドウがトップレベルウィンドウの場合は、1 つ上のトップレベルウィンドウのハンドルが返ります。 指定したウィンドウが子ウィンドウの場合は、1 つ上の兄弟ウィンドウのハンドルが返ります。 | |
GW_OWNER | |
指定したウィンドウのオーナーウィンドウのハンドルを取得します。 |
<戻り値>
関数が成功すると、ウィンドウのハンドルが返ります。
指定した関係を持つウィンドウがない場合は、NULL が返ります。
拡張エラー情報を取得するには、 関数を使います。
<解説>
すべての子ウィンドウを取得する場合、EnumChildWindows 関数を使った方が GetWindow 関数をループ処理で呼び出すよりも信頼性の高い結果が得られます。
GetWindow 関数を呼び出してウィンドウを列挙すると、無限ループに陥ったり、すでに破棄されているウィンドウのハンドルを参照する危険性がでてきます。
<対応情報>
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winuser.h で宣言、Windows.h をインクルード
インポートライブラリ:User32.lib を使用
引用:ttp://msdn.microsoft.com/ja-jp/library/cc364757.aspx
<使用メモ>
EnumWindowsのコールバックで取得したハンドルがオーナーウィンドウ無しかどうかの判定に使用。
if(GetWindow(hwnd, GW_OWNER) == NULL){
// オーナーウィンドウ無し
}
って感じ。
オーナーウィンドウ無し=このハンドルはオーナーウィンドウ、ってことかな・・・?
HWND GetForegroundWindow(VOID);
フォアグラウンドウィンドウ( 現在ユーザーが作業しているウィンドウ)のハンドルを返します。
Windows システムは、フォアグラウンドウィンドウを生成したスレッドに対して、他のスレッドよりも若干高い優先順位を割り当てます。
<パラメータ>
パラメータはありません。
<戻り値>
フォアグラウンドウィンドウのハンドルが返ります。
フォアグラウンドウィンドウのハンドルは、ウィンドウがフォーカスを失ったなどの特定の状況下で NULL になる場合もあります。
<対応情報>
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winuser.h で宣言、Windows.h をインクルード
インポートライブラリ:User32.lib を使用
引用:ttp://msdn.microsoft.com/ja-jp/library/cc364732.aspx
<使用メモ>
アクティブウィンドウ(作業ウィンドウ?)のハンドル取得に使用。
フォアグラウンドウィンドウ( 現在ユーザーが作業しているウィンドウ)のハンドルを返します。
Windows システムは、フォアグラウンドウィンドウを生成したスレッドに対して、他のスレッドよりも若干高い優先順位を割り当てます。
<パラメータ>
パラメータはありません。
<戻り値>
フォアグラウンドウィンドウのハンドルが返ります。
フォアグラウンドウィンドウのハンドルは、ウィンドウがフォーカスを失ったなどの特定の状況下で NULL になる場合もあります。
<対応情報>
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winuser.h で宣言、Windows.h をインクルード
インポートライブラリ:User32.lib を使用
引用:ttp://msdn.microsoft.com/ja-jp/library/cc364732.aspx
<使用メモ>
アクティブウィンドウ(作業ウィンドウ?)のハンドル取得に使用。