カーソルファイルをフォームに描画するには? – プログラミング – Home

カーソルファイルをフォームに描画するに...
 
通知
すべてクリア

カーソルファイルをフォームに描画するには?


KANA
 KANA
(@KANA)
ゲスト
結合: 23年前
投稿: 22
Topic starter  

開発環境:Visual C++ 2008 / Windows Vista

ツールバーに,ある図形のアイコン(toolbar.bmp)を作り,それをクリックすると,
自作したカーソルファイル(cursor1.cur)を読み込み,カーソルがその図形に変わる。
ソースの一部は以下の通りです。

case WM_COMMAND:
  switch (LOWORD(wp)) {
    case ID_BUTTON1:
      HCURSOR hCur;
      hCur = (HCURSOR)LoadImage(GetModuleHandle(0),
          MAKEINTRESOURCE(IDC_CURSOR1), IMAGE_CURSOR, 0, 0,
LR_SHARED);
      SetCursor(hCur);
      Sleep(1000);
      break;

このあと,フォームに変化したカーソルを持って行き,
任意の場所でその図形を描画したい(左クリックで置くなど)のですが,方法がわかりま
せん。

アドバイスいただけるとありがたいです。
よろしくお願いします。


引用解決済
トピックタグ
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

カーソルを変えたいのかカーソルを描画したいのかtoolbar.bmpを描画したいのかよくわ
からんにゃい。

ドラッグ中を除いてSetCursorはWM_SETCURSORから呼びだす。
WM_SETCURSORの使い方を理解しておくこと。

フォームって何?

HCURSOR hCur;がWM_COMMAND内の局所変数だとだめだね。
WM_SETCURSOR内で使えなくなってるから。


返信引用
KANA
 KANA
(@KANA)
ゲスト
結合: 23年前
投稿: 22
Topic starter  

カーソルについては,矢印から自作のカーソルに変えることはできたので大丈夫なんで
す。

フォームというのは,「入力の可能なウィンドウ」っていう認識で合っているかわかり
ませんが,
要するにウィンドウっていうことでしょうか…。(逆に質問で返すのはおかしいんです
けれども)
今,まさに文章を書き込んでいるところもフォームと呼ぶと思います。
Visual C++で,Windowsフォームアプリケーションを作成するなどという呼び方もしま
す。

Visual C++で,とりあえず何も実行しないウィンドウを作ったのですが,そこのことで
す。
メニューとツールバーは作りました。

話を戻して,ツールバーに作成したアイコンをクリックしたら,
自作したcursor1.curというファイルを読み込み,その形にカーソルを変更できました。
例えば◎っていう形に変更したとします。

その後,カーソルを動かし,クリックしたら◎をポンと描画したいんです。
だから,cursor1.curで作ったものを描画したいということです。
ついでにその瞬間,元の矢印カーソルに戻せれば。
まるでスタンプを押すような感じ?

アクセサリのペイントは,ペンなどで点や線を描けますが,
似たような感じで自作したビットマップファイルやカーソルファイルを,
そのように動作できないものかと悩んでいます。

とりあえず,WM_SetCursorについて調べることと,
hCurはグローバルにしておきます。
ありがとうございました。


返信引用
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

以下は、全部カンで書いているので正しいか知らない。
カーソルなので座標にオフセットが必要だな。

HCURSOR hCur = NULL;
int type = 0;
struct Shape { int x, y, type; };
std::vector< Shape > data;

--略--
case ID_BUTTON1:
hCur = (HCURSOR)LoadImage(--略--IDC_CURSOR1--略--);
type = ID_BUTTON1;
--略--

--略--
case WM_SETCURSOR:
if(hCur != NULL) {
--略--
}
--略--

--略--
case WM_LBUTTONDOWN:
if(hCur != NULL) {
Shape s;
s.x = マウスの座標
s.y = マウスの座標
s.type = type;
data.push_back(s);
DrawIcon(hdc,s.x,s.y,hCur);
--略--
}
--略--

--略--
WM_PAINT
--略--
hCur = (HCURSOR)LoadImage(--略--IDC_CURSOR1--略--);
for(vector< Shape >::iterator i=v.begin();i!=v.end();i++) {
if(i.type == ID_BUTTON1) DrawIcon(hdc,i.x,i.y,hCur);
}
--略--


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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