分割バー(CSplitter)のマウスカーソル形状を変更したい

このQ&Aのポイント
  • 分割バー(CSplitter)のマウスカーソル形状を変更したい方法について教えてください。
  • スクロールバーのところに出てくる分割バーをドラッグすることにより上下や左右のビューの表示領域をコントロールしています。
  • CSamSplitクラスのOnSetCursorメソッドでマウスカーソルの形状を変えることができますが、具体的なコード例を教えてください。
回答を見る
  • ベストアンサー

分割バー(CSplitter)

スクロールバーのところに出てくる分割バーをドラッグすることにより上下や左右のビューの表示領域をコントロールしている。この分割バー上にマウスカーソルを持ってくるとマウスカーソルの形状が変わります。 このマウス形状が変わるのをやめたいのです。 以下ソースコードです。 BOOL CSamSplit::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) { ::SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW)); return 0; // return CSplitterWnd::OnSetCursor(pWnd, nHitTest, message); } 宜しくお願いします

  • MAGI
  • お礼率23% (6/26)

質問者が選んだベストアンサー

  • ベストアンサー
  • akkun2k
  • ベストアンサー率71% (5/7)
回答No.1

BOOL CSamSplit::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) { // return CSplitterWnd::OnSetCursor(pWnd, nHitTest, message); return CWnd::OnSetCursor(pWnd, nHitTest, message); } ではどうでしょうか?

MAGI
質問者

補足

早速の回答、ありがとうございます。 結果からもうしますと駄目でした^^; あの分割バーにカーソルが乗ったら どうしてもアイコンが変わってしまいますね

関連するQ&A

  • ドラッグしたときにマウスカーソルを変更するには?

    こんにちは。 VC6.0 MFCで開発しています。 マウスカーソルの形状をウィンドウをドラッグしているときとしていないときで 違ったものに変更したいのですが、うまくいきません。 ソースはこんなふうにしています。 ↓ void CTest::OnLButtonDown(UINT nFlags, CPoint point) { //変更する SetCursor(AfxGetApp()->LoadCursor( IDC_CUR2 )); CDialog::OnLButtonDown(nFlags, point); } void CTest::OnLButtonUp(UINT nFlags, CPoint point) { //元に戻す SetCursor(AfxGetApp()->LoadCursor( IDC_CUR1 )); CDialog::OnLButtonUp(nFlags, point); } どうぞ宜しくお願いします。

  • オーバーライドとオーバーロードについて

    1.CTestDlgクラスを作成 class CTestDlg : public CDialog { // コンストラクション public: BOOL Create(CWnd *pWnd); CWnd * m_pParent; CTestDlg(CWnd* pParent = NULL); // 標準のコンストラクタ・ ・ 2.メンバ関数の定義 BOOL CTestDlg::Create(CWnd *pWnd) { m_pParent = pWnd; BOOL bret = CDialog::Create( CTestDlg::IDD, m_pParent); if( bret == TRUE) { this->ShowWindow( SW_SHOW); } return bret; 以上のような場合において、 1.Create(CWnd *pWnd)は、引数が異なるため virtual BOOL Create( LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL ); をオーバーライドしたとは言わず、オーバーロードしたということで良いのでしょうか? 2.オーバーロードしたということであれば、 Create(CWnd *pWnd)と virtual BOOL Create( LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL ); の両方の関数が使えると思っていたのですが、後者方は引数が異なるとエラーが出て使えませんでした。 どうしてなのでしょうか? 以上、2点についてご教授ください。

  • カーソルを手に変更

    スタティックウインド上でカーソルを手にしているところなんだけど カーソルが手になるはずが透明になっています。 その他はうまく行っているから、スタティックウインドの外に出ると カーソルは矢印に戻ります。 ソースを直してください。 #include <windows.h> HINSTANCE hInstanceForCursor; ~ WinMain() で  wc.hInstance = hInstance;  hInstanceForCursor = hInstance; ~ WndProc()  case 101:   if(ChildWindowFromPoint(hWnd, pt) == hSWnd){    hCursor = LoadCursor(hInstanceForCursor, IDC_HAND);    SetCursor(hCursor);   }else SetCursor((HCURSOR)IDC_ARROW);  break;

  • ウィンドウタイトルの取得方法

    WIN98 MFC vc++6.0 2重起動を防止し、既に起動している時は、ウィンドウを最上位にもってくる以下のコードにて ウィンドウのタイトルを設定しているIDS_WINDOWTITLEはどこで定義し、どうやってタイトルを設定すれば良いのでしょうか? BOOL CMyApp::InitInstance() { 略  // アプリケーションの二重起動防止  ::CreateMutex(NULL, TRUE, m_pszExeName);  if( GetLastError() == ERROR_ALREADY_EXISTS) {   // 既に起動されている場合は、CWnd::FindWindow関数を使って   // 起動されているアプリケーションのウィンドウを取得し、   // そのウィンドウを最上位へ持ってくる   CString str;   str.LoadString(IDS_WINDOWTITLE);   // IDS_WINDOWTITLEにはウィンドウのタイトルを設定している   CWnd* pWnd = CWnd::FindWindow(NULL, str);   if( pWnd )   pWnd->SetForegroundWindow();   return FALSE;  }

  • c++ 電卓制作

    今使ったのはMicrosoft Visual Studio 2010のアプリ 以下のプログラムはダイアログボックス表示で0から9のボタン入れでます、普通の電卓作りたいです、計算のプログラムわからないので、どうすればいいですか? #include <windows.h> #include "resource.h" #include <tchar.h> // プロトタイプ宣言 BOOL CALLBACK DlgWndProc ( HWND , UINT , WPARAM , LPARAM ) ; void sub( int no , HWND hWnd ) ; static int cnt ; int a , b ; static int c ; // エントリポイント int APIENTRY WinMain ( HINSTANCE hInstance , HINSTANCE hPrevInstance , LPSTR lpCmdLine , int nCmdShow ) { DialogBox(hInstance , MAKEINTRESOURCE(IDD_DIALOG1) , NULL , (DLGPROC) DlgWndProc ) ; return 0 ; } /* ------ ダイアログボックスウインドウプロシージャ ----- */ BOOL CALLBACK DlgWndProc ( HWND hWnd , UINT message , WPARAM wParam , LPARAM lParam ) { TCHAR s[80] ; switch( message ) { case WM_INITDIALOG : cnt = 0 ; return TRUE ; case WM_COMMAND : switch ( LOWORD(wParam) ) { case IDC_1 : sub ( 1 , hWnd ) ; return TRUE ; case IDC_2 : sub ( 2 , hWnd ) ; return TRUE ; case IDC_3 : sub ( 3 , hWnd ) ; return TRUE ; case IDC_4 : sub ( 4 , hWnd ) ; return TRUE ; case IDC_5 : sub ( 5 , hWnd ) ; return TRUE ; case IDC_6 : sub ( 6 , hWnd ) ; return TRUE ; case IDC_7 : sub ( 7 , hWnd ) ; return TRUE ; case IDC_8 : sub ( 8 , hWnd ) ; return TRUE ; case IDC_9 : sub ( 9 , hWnd ) ; return TRUE ; case IDC_0 : sub ( 0 , hWnd ) ; return TRUE ; case IDC_CLOSE : EndDialog( hWnd , 0 ) ; return TRUE ; default : return FALSE ; } default : return FALSE ; } } /* ------------------------------------- */ /* 表示 */ /* ------------------------------------- */ void sub( int no , HWND hWnd ) { TCHAR s[20] ; cnt *= 10 ; cnt += no ; wsprintf( s , TEXT("%d") , cnt ) ; SetWindowText( GetDlgItem(hWnd , IDC_EDIT1) , s ) ; }

  • マウスの動き

    どなたか答えてください。 WM_LBUTTONDOWNにて、 マウスの位置がウィンドウの右端だった場合、 サイズ変更が出来るようにしたいのです。 ですので処理に、 SetCursor(LoadCursor(NULL, IDC_SIZEWE)); SendMessage(hWnd,WM_SYSCOMMAND,SC_SIZE | WMSZ_LEFT,0); を入れサイズ変更が出来るようにしました。 ですがそのときマウスが上下に動くのが動くのが気になります(マウスカーソルがウィンドウの外に出ることもあるので)。 それを解消したいのですがどのようにしたらいいかわかりません。 どなたかいい方法を知らないでしょうか?

  • 例外処理(初回)についてのご質問

    プログラムを実行させた時、下記の様なメッセージが出力されたあとに、特定の場所でエラーが出てしまいます。 色々と試して見たのですが、解決出来ずに困っております。何方かどの辺を調べれば良いか等のアドバイスをお願い致します。 <エラーメッセージ> "例外処理 (初回) は XXXX.exe (MFC42D.DLL) にあります: 0xC0000005: Access Violation。" <停止場所> CWnd* CWnd::GetDlgItem(int nID) const { ここです→ASSERT(::IsWindow(m_hWnd)); if (m_pCtrlCont == NULL) return CWnd::FromHandle(::GetDlgItem(m_hWnd, nID)); else return m_pCtrlCont->GetDlgItem(nID); } <エラーが発生するプログラム> BOOL CComProgramDlg::BinarySend(BYTE SendData[], unsigned long SendLength) { int Ret; unsigned long Len; ここら辺です→CStatic* pStic1 = (CStatic*)GetDlgItem(IDC_MSG_STATIC); Ret = WriteFile(m_hComm, &SendData[0], SendLength, &Len, NULL); if(!Ret)  return(FALSE); if(SendLength > Len)  return(FALSE); pStic1 -> SetWindowText("データを送信しました。"); return(TRUE); } 上記はデータシリアル通信の送信用で10回程度、このメンバ関数を通した時に急に発生します。 よろしくお願いいたします。

  • マウスカーソル Delphi

    procedure TForm1.FormKeyDown(Sender~~~); Cursor:=crCross ; procedure TForm1.FormKeyUp(Sender:~~~~); Cursor:=crDefault; 上記でキーが押されたらカーソル形状を変えたいのですが、マウス右ボタンを押されてる時は変化しません。 でも左ボタンが押されている時、どちらも押されてない時は変わります。 なにか、対処方法ありませんか? APIのSetCursor(hcur)を使うと右ボタンが押されていても変化しますが、「hcur;/* カーソルのハンドル*/」が理解できません。 実動ではカーソル形状は自作で Screen.Cursors[1] := LoadCursorFromFile('C:\TEST.cur');のように読込んでいます。

  • エディットボックスの背景の色変更方法

    C++初心者です。 どうしても、答えが出てこないことがあり質問致します。 環境 VC++Express2008 Win32API ダイアログベース ダイアログにResEditにエディットボックスを配置して あとは文字や背景の色替えをコーディングしてます。 文字は表示できるのですがその背景を色替えができません。 いろいろ、ネットで調べるも、ほとんどMFCのサンプルばかりで 意味がわかりません。 テストプログラムは以下です。 int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { hInst = hInstance; //ダイアログボックス表示 DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProc); return 0; } BOOL CALLBACK DialogProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { HDC hdc; HWND pWnd; PAINTSTRUCT ps; switch (msg) { case WM_INITDIALOG: break; case WM_PAINT: pWnd = GetDlgItem(hWnd, IDC_EDIT10); hdc = BeginPaint(pWnd,&ps); SetBkColor(hdc, RGB(0,255,0)); //←うまくいかない!! SetWindowText(pWnd, _T("aaa")); EndPaint(pWnd, &ps);       break;         以下省略 これで、テキスト"aaa"は表示されますが、背景は変わりません。 SetBkColorの使い方がまずいと思うのですが 僕のイメージ的にSetWindowTextと同じようにウィンドウハンドル指定で 背景を変える方法ってないのかなって素人ながら思うのですが、、わかりません。 あと、質問が変わってしまうのですが、ダイアログウィンドウに100個くらいのエディットボックスを 作成して、それらの背景色を替えて状態表示(点滅もあり)を行うようなものを作りたいのですが ナンセンスなのでしょうか? Rectangleで座標指定で100個の箱を作成する方がCPU負荷などもないのかなーって思います。 では、質問の内容がよくわからない点などあるかもしれませんが よろしくお願いいたします。     

  • C言語でPDFファイルのサイズと位置を変更したい

    PDFのファイルをサイズと位置を指定して開きたいのですがうまく行きません、 良い方法はありませんか? 現在のコード //v8.3 PDFのファイルのサイズと位置を変更 BOOL MovePDF(LPCTSTR lpszCloseFile) { CWnd* pWnd; CString str = lpszCloseFile; //v8.2 ウィンドウを検索してハンドルの取得 pWnd = FindWindow("AcrobatSDIWindow", str + " - Adobe Reader"); if (pWnd != NULL){ //v8.3 見つかったウィンドウのサイズと位置を変更(x,y,widh,height) pWnd->MoveWindow(0, 0, 600, 600); return TRUE; } else MessageBox("ウィンドウハンドルが取得できませんでした。"); return FALSE; } //v7.4 レイアウト図作成手順表示 BOOL MakeLayout1() { int ret; CString strFileName; strFileName = m_cFunc.GetInitDir() + "\\PDF\\レイアウト図作成手順1.pdf"; SHELLEXECUTEINFO sei = { 0 }; //構造体のサイズ sei.cbSize = sizeof(SHELLEXECUTEINFO); //起動側のウインドウハンドル sei.hwnd = m_hWnd; //起動後の表示状態 sei.nShow = SW_SHOWNORMAL; //このパラメータが重要で、セットしないとSHELLEXECUTEINFO構造体のhProcessメンバがセットされない。 sei.fMask = SEE_MASK_NOCLOSEPROCESS; //起動プログラム sei.lpFile = strFileName; //プロセス起動 if(!ShellExecuteEx(&sei) || (const int)sei.hInstApp <= 32){ TRACE("error ShellExecuteEx\n"); } else { //v8.3 入力可能状態になるまで待つ WaitForInputIdle(sei.hProcess, INFINITE); } //v8.3 サイズと位置変更 MovePDF("レイアウト図作成手順1.pdf"); return TRUE; }

専門家に質問してみよう