BeginWaitCursorについて – プログラミング – Home

通知
すべてクリア

[解決済] BeginWaitCursorについて


パステルしんちゃん
 パステルしんちゃん
(@パステルしんちゃん)
ゲスト
結合: 22年前
投稿: 3
Topic starter  

みなさん、こんにちは。

現在、ダイアログベースでアプリを作成しています。
アプリの仕様は、ボタンを押下後、検索用の別スレッドを起動し、
検索処理終了後にメッセージイベントを受けて、検索結果を画面
に表示する仕様です。
どうしても検索に時間がかかるので、ボタンを押下~検索結果の
画面表示まで、マウスカーソルを砂時計するため、ボタン押下後
にBeginWaitCursor関数を呼び出しているのですが、マウスカー
ソル砂時計になってくれません。
ダイアログベースのアプリの場合は、何か制限のようなものがあ
るのでしょうか?

何方かご存知の方おられましたら、ご教授の方お願い致します。


引用未解決
トピックタグ
汎
 汎
(@汎)
ゲスト
結合: 22年前
投稿: 43
 

CCmdTarget::BeginWaitCursor() CCmdTarget::EndWaitCursor()
CWaitCursor クラス
CWinApp::DoWaitCursor()

は1つのメッセージ処理の中でのみ有効です。

メッセージ処理をまたがってカーソルを変更する場合は、
ウィンドウクラスのカーソルを切り替えるという方法があります。
この場合、ダイアログだけでなく子ウィンドウすべてのカーソルを切り替える必要があります。

void CxxxDlg::OnStart()
{
SetClassLong(GetSafeHwnd(), GCL_HCURSOR, (long)AfxGetApp()->LoadStandardCursor
(IDC_WAIT)) ;

}

void CxxxDlg::OnEnd()
{

SetClassLong(GetSafeHwnd(), GCL_HCURSOR, (long)AfxGetApp()->LoadStandardCursor
(IDC_ARROW)) ;
}

他にも方法があったら、私にも教えてください。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

メインウィンドウのOnSetCursor()で
砂時計カーソルをセットすればOKです。


返信引用
汎
 汎
(@汎)
ゲスト
結合: 22年前
投稿: 43
 

dairygoods 様 ありがとうございます。

void CxxxDlg::OnBnClickedButtonon()
{
m_bWait = TRUE ;
}

void CxxxDlg::OnBnClickedButtonoff()
{
m_bWait = FALSE ;
}

BOOL CxxxDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
if(m_bWait) {
SetClassLong(pWnd->GetSafeHwnd(), GCL_HCURSOR, (long)
AfxGetApp()->LoadStandardCursor(IDC_WAIT)) ;
}
else {
SetClassLong(pWnd->GetSafeHwnd(), GCL_HCURSOR, (long)
AfxGetApp()->LoadStandardCursor(IDC_ARROW)) ;
}
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}

ですね。勉強になりました。


返信引用
パステルしんちゃん
 パステルしんちゃん
(@パステルしんちゃん)
ゲスト
結合: 22年前
投稿: 3
Topic starter  

汎さん、dairygoodsさん、お返事ありがとうございます。

教えて頂いた方法で、上手く動作致しました。

今回は本当にありがとうございました。m(_)m
また、何かありましたらご質問する事があるかと思いますが
その際は、宜しくお願い致します。

それでは、失礼致します。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

こんな方法でも可能です。

BOOL CxxxDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
if(m_bWait) {
::SetCursor(::LoadCursor(NULL,IDC_WAIT)) ;
return TRUE;
} else {
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}
}


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました