1,Mouse |
2,Window |
APIとは、Windows(OS)が用意している関数のことです。
Mouseを特定の位置にセットするには、SetCursorPos 関数を使います。
座標は、スクリーン座標(物理座標)になります。
void CTestView::OnLButtonDblClk(UINT nFlags, CPoint point) { SetCursorPos(1024/2,768/2); CView::OnLButtonDblClk(nFlags, point); }
これは、マウスをダブルクリックするとMouseが画面の中央にきます。
(画面が1024×768の場合。)
反対にGetCursorPosを使うと現在のマウスの位置がスクリーン座標で得られます。
データを処理中にMouseが砂時計にするにはDoWaitCursorを使います。
void CTestView::OnLButtonDblClk(UINT nFlags, CPoint point) { AfxGetApp()->DoWaitCursor(1); long i; for (i=0; i<10000000; i++) ; AfxGetApp()->DoWaitCursor(0); CView::OnLButtonDblClk(nFlags, point); }
処理に時間のかかる仕事の前でDoWaitCursor(1)にしてカーソルを砂時計にします。
処理が終了したらDoWaitCursor(0)で元に戻します。
ほかにも、APIではないのですがCWaitCursorというものがあります。
これは、時間のかかる処理の前にCWaitCursor型の変数を定義するだけです。
void CTestView::OnLButtonDblClk(UINT nFlags, CPoint point) { CWaitCursor wait; long i; for (i=0; i<10000000; i++) ; CView::OnLButtonDblClk(nFlags, point); }
以上2つのどちらでも、ダブルクリックすると一瞬だけ砂時計になります。
Windowの移動にはMoveWindow関数を用います。
void CTestView::OnLButtonDblClk(UINT nFlags, CPoint point) { GetParentFrame()->MoveWindow(0,0,200,300,TRUE); CView::OnLButtonDblClk(nFlags, point); }
左クリックをすると左上にWindowが移動します。
MoveWindowの引数の1〜4番目は、Windowの左辺、上辺、幅、高さです。
最後のTrueは、再描画をするかどうかというもので、デフォルトではTRUEになっています。
ちょっとしたメッセージを表示するのに
AfxMessageBoxというものがあります。形式は、
AfxMessageBox(表示する文字,ボタンのタイプ,ヘルプコンテキストID)
3番目の引数は、ヘルプボタンを用意した場合に使います。
2番目の引数は、ボタンの種類を指定します。
ボタンの種類は以下の通りです。
MB_ABORTRETRYIGNORE | [失敗] [再試行] [無視] |
MB_OK | [OK] |
MB_OKCANCEL | [OK][キャンセル] |
MB_RETRYCANCEL | [再試行] [キャンセル] |
MB_YESNO | [はい] [いいえ] |
MB_YESNOCANCEL | [はい] [いいえ] [キャンセル] |
ボタンのところに「|」記号を使って以下のマークを付け加えることができます。
MB_ICONEXCLAMATION | ! |
MB_ICONINFORMATION | i |
MB_ICONQUESTION | ? |
MB_ICONSTOP | Stop |
この関数には戻り値があり、どのボタンが押されたかわかります。
戻り値 | ボタン |
IDOK | [OK] |
IDCANCEL | [キャンセル] |
IDABORT | [失敗] |
IDRETRY | [再試行] |
IDIGNORE | [無視] |
IDYES | [はい] |
IDNO | [いいえ] |
以下に例を示します。
void CTestView::OnLButtonDblClk(UINT nFlags, CPoint point) { if(AfxMessageBox("ダイアログボックス\nTest",MB_OKCANCEL|MB_ICONSTOP)==IDOK) ;//OKに対応するコマンド CView::OnLButtonDblClk(nFlags, point); }
これで、ダブルクリックすると次のようなダイアログボックスが表示されます。
ほかにも、APIではないのですが、MessageBoxという関数があります。 たとえば、
void CTestView::OnLButtonDblClk(UINT nFlags, CPoint point) { MessageBox("A","B",MB_OK|MB_ICONHAND); CView::OnLButtonDblClk(nFlags, point); }
を実行すると
になります。1番目の引数が本文に、2番目の引数がタイトルになります。
C++のPageに戻る