ID を引数にとる場合の関数の記述方法
- MFC のダイアログベースでプログラミングをしている場合、関数内で現れる IDC_SOMETHING に相当する部分を引数とする方法が分からないです。
- 引数が文字列の場合、戻り値 関数名(CString temp) と記述することができますが、ID を引数とする場合、どのように引数を記述すればいいのでしょうか。
- お知恵をお貸しください。
- ベストアンサー
ID を引数にとる場合の記述方法
MFC のダイアログベースでプログラミングをしています。 関数について、引数の記述方法が分からずに困っています。 以下のように、関数の途中で現れる IDC_SOMOTHING に相当する 部分を引数としたいと思っています。 この場合、どのように記述すればよいのでしょうか。 戻り値 関数名(引数) { ・ ・ ・ // デバイスコンテキストの獲得 CWnd* h = GetDlgItem(IDC_SOMETHING); CDC* pDC=h->GetDC(); ・ ・ ・ } 引数が文字列なら 戻り値 関数名(CString temp){}  ̄ ̄ ̄ ̄ ̄ ̄ とできますが、ID を引数にとる場合、どのように引数を記述したらよいのでしょうか。 教えていただけると幸いです。
- k1220011_2005
- お礼率90% (69/76)
- C・C++・C#
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
UINT id
関連するQ&A
- GetDCの引数や戻り値
タイトルに記載の関数に限らないのですが、msdnなどを見ると、 同じ関数でも引数と戻り値が異なるのですが、どういう事か教えていただけないでしょうか? 例)GetDCの場合 HDC GetDC( HWND hWnd // ウィンドウのハンドル ); 一方では CDC* GetDC( ); SDKとMFCの違いという事でしょうか? もしその場合、MFCのソースにてSDKの関数は記述できないという事でしょうか? というか、MFCとかSDKっていうのは何に依存するのでしょうか? (プロジェクト?クラス?) 思いっきり初心者なのでどなたか教えてくださいm(__)m または、参考になるホームページなどがございましたらご教授願いますm(__)m
- 締切済み
- C・C++・C#
- VC++2010(MFC)OnDraw以外での描画
xxxView.cppファイル内のOnDraw以外の部分で、以下のコードを書きビルドしましたが、「'CWnd::GetDC' : 静的でないメンバー関数の呼び出しが正しくありません」というエラーと「'CWnd::ReleaseDC' : 関数に 0 個の引数を指定できません」というエラーが出てしまい、描画できません。エラーの出ない、正しいコードを教えて下さい。 CPaintDC* pDC; CWnd::GetDC(); pDC->TextOut(10,10,"テスト"); CWnd::ReleaseDC();
- 締切済み
- C・C++・C#
- VisualC++6.0にてボタンにビットマップを表示させる方法
VisualC++6.0のダイアログベースのアプリにおいて、 フォーム上に配置したボタン上にビットマップを表示 させたいと思ってます。OnPaint()の中で、以下のコード を書いたのですが、うまくいきません。 CWnd* myWnd = GetDlgItem(IDC_BUTTON1); CDC* pDC = myWnd->GetDC(); CDC myDC; CBitmap myBMP; myBMP.LoadBitmap(IDB_BITMAP); myDC.CreateCompatibleDC(pDC); CBitmap* oldBMP = myDC.SelectObject(&myBMP); pDC->BitBlt(0,0,100,100,&myDC,0,0,SRCCOPY); myDC.SelectObject(oldBMP); ビットマップはちゃんと書かれてはいますが、その上にボタンが 描かれてしまうので、ビットマップが隠されてしまいます。 解決方法を教えてくださいますでしょうか。 よろしくお願いします。 % 絵をクリックするとアクションを起こすようにしたいので、 % ピクチャーボックスでも試してみました。これだとビット % マップはちゃんと表示されますが、BN_CLICKEDを書いて % ピクチャーボックスをクリックしてもOnPict()に処理が % 移りません。
- ベストアンサー
- C・C++・C#
- LineTo,MoveToについて
MFCのダイアログベースで 変化を表すグラフを作成したのですが 線を描くときに原点復帰してしまいます。 左上のエディットに数値をいれ 実行を押すと座標(200,200)から横にエディットで入力した数値分線を引いていくというものです。 Timerを使い1秒ごとに書かせています。 void CsinDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: ここにメッセージ ハンドラー コードを追加するか、既定の処理を呼び出します。 static int count=0; static double i,x=0; char buf[100]; CString str; /*------描写設定----*/ CWnd* h = GetDlgItem(IDC_BB); CDC* pDC=h->GetDC(); //-----------------------------------// CEdit *edit = (CEdit*)GetDlgItem(IDC_EDIT1); edit->GetWindowText(str); i = atof((const char*)str); x=x+i; sprintf(buf,"%lf",x); siki_edit.SetWindowText(buf); /*---------------------------------------*/ if(count==0) pDC->MoveTo(200,200); // 座標(200,200) に移動 pDC->LineTo(200+x,200); // 座標(200+x,200) まで線を引く count++; h->ReleaseDC(pDC); CDialogEx::OnTimer(nIDEvent); } 実行結果は添付した画像のようになります。 イメージではcountが0の時だけMoveToで動かし、それ以降は座標(200,200)から横に線を引いていきたいのですが。 どのように直せばよいのでしょうか? LineToからLineToの指令ができないということでしょうか?
- 締切済み
- C・C++・C#
- MFC VC++ 6.0 使用
class patchmodel{ double a; double b; private: void Draw(); } void patchmodel::Draw(){ CDC DC; CDC* dc = GetDC(); dc->TextOut((int)a,(int)b,"HELLO"); ReleaseDC( dc ); } と 実行してみたところ エラーがでます。 error C2660: 'GetDC' : 関数が不正な 0 個の実引数をともなって呼び出されました。 error C2660: 'ReleaseDC' : 関数が不正な 1 個の実引数をともなって呼び出されました。 CModel::OnDraw(CDC* pDC) を あえて使わずに 実行したいので このように 簡単なもので 試して見たのですが、うまくいきません。 GetDC の使い方を まちがえているのでしょうか? お返事ください。
- ベストアンサー
- C・C++・C#
- Cwndクラスの派生クラスmCWndクラスのOnDrawについて
OnDraw関数が呼び出しされていません。 どうすればいいですか? よろしくお願いします。 class mCWnd :public CWnd { public: DECLARE_MESSAGE_MAP() afx_msg void OnLButtonDown(UINT nFlags,CPoint point) { AfxMessageBox("子ウインドウ"); CDC *pDC=GetDC(); pDC->TextOut(0,0,"HELLO"); ReleaseDC(pDC); Invalidate(); } virtual void OnDraw(CDC* pDC) { AfxMessageBox("OnDraw"); pDC->FillSolidRect(CRect(0,0,300,300),RGB(255,255,255)); } }; BEGIN_MESSAGE_MAP(mCWnd, CWnd) ON_WM_LBUTTONDOWN() END_MESSAGE_MAP() ------------------------------------------- //***View.cpp (mCWnd cw) void CKoDlg::OnBnClickedButton1() { CRect rect=CRect(50,50,190,250); cw.Create(NULL,"Hello",WS_CHILD|WS_VISIBLE,rect,this,5000,0); // TODO : ここにコントロール通知ハンドラ コードを追加します。 }
- ベストアンサー
- C・C++・C#
- VC++でのアイコン背景透過について
VC++2013 MFC環境です。 プログラムで○や×などの記号のアイコンを描画し、PNG,GIF,JPEGの形式でファイルに保存したいです。その時、アイコンの背景を透過したいのですがうまくいきません。 CDCクラスとCImageクラスを使用しアイコンの出力をしています。 背景透過について調べていくつか使えそうな関数があり試したのが、TransparentBltという関数で、デバイスコンテキストを二つ用意して、片方に記号を描画し、透過したい色を指定してもう片方にコピーすると指定した色が透過になる?と解釈しプログラム組みましたが結果は真っ黒の画像でした。 ここで完全に手が止まってしまい、質問させていただきます。 以下ソース CImage Image, image2; Image.Create( 50, 50, 24 ); image2.Create( 50, 50, 24 ); CDC* pDC = CDC::FromHandle( Image.GetDC( ) ); CDC* pdc2 = CDC::FromHandle( image2.GetDC( ) ); CRect rect( 0, 0, 50, 50 ); CPen BlackPen( PS_SOLID, 3, RGB( 0, 0, 0 ) ); CBrush WhitBrush( RGB( 255, 255, 255 ) ); CBrush BlackBrush( RGB( 0, 0, 0 ) ); pDC->FillRect( &rect, &WhitBrush ); pDC->SelectObject( &BlackPen ); pDC->SelectObject( &WhitBrush ); pDC->Ellipse( 5, 5, 45, 45 ); COLORREF col = Image.GetPixel( 0, 0 ); pdc2->TransparentBlt( 0, 0, 50, 50, pDC, 0, 0, 50, 50, col ); Image.SetTransparentColor( col ); image2.Save( L"c:\\icon\\maru.png" ); Image.ReleaseDC( ); image2.ReleaseDC( ); 他にも実装例があれば教えてください。 C++や画像生成に関しては経験がありません。
- ベストアンサー
- C・C++・C#
- 引数付きコンストラクタでコンパイルエラー
MFCダイアログベースアプリを作成しています。 開発環境はVC++2005です。 CtestDlgクラスのOnBnClickedOk()関数内での処理、 CtestDlg2 dlg( &hoge ); にてCtestDlg2ダイアログ起動し、CString型変数hogeを、 CtestDlg2クラスのコンストラクタに引数として渡したいのですが、 コンパイルエラーが出てしまい、何が原因か分かりません。 解決法をご存知の方おられましたら、お手数ですがご教授お願い致します。 【エラー内容】 error C2664: 'CtestDlg2 ::CtestDlg2(const CtestDlg2 &)' : 1 番目の引数を 'CString *__w64 ' から 'const CtestDlg2 &' に 変換できません。(新しい機能 ; ヘルプを参照) 理由: 'CString *__w64 ' から 'const CtestDlg2' へは 変換できません。 コンストラクタはソース型を持てません、またはコンストラクタの オーバーロードの解決があいまいです。 【CtestDlgクラス内宣言】 void CtestDlg::OnBnClickedOk(){ CString hoge = "aaa"; CtestDlg2 dlg( &hoge ); dlg.DoModal(); } 【CtestDlg2クラスコンストラクタ】 //CtestDlg2::CtestDlg2(CWnd* pParent /*=NULL*/) CtestDlg2::CtestDlg2(CString* st, CWnd* pParent /*=NULL*/) : CDialog(CtestDlg2::IDD, pParent), m_st(st) { } 【CtestDlg2クラスヘッダ内宣言】 public: CtestDlg2::CtestDlg2(CString* st, CWnd* pParent /*=NULL*/); CString* m_st;
- 締切済み
- C・C++・C#
- ピクチャーコントロールのデバイスコンテキストを取得するためには?
VC2005についてです ピクチャーコントロールのデバイスコンテキストを操作するためには どうすればよいでしょうか? void CMainFrame::OnButton() { // ここに処理を書く CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd; CButton *pButton = (CButton*)pFrame->m_wndDialogBar.GetDlgItem(IDC_BUTTON1); pButton->SetWindowText("button"); MDIGetActive()->GetDC()->TextOutA(0,0,"文字列です"); } この様にすれば、アクティブになった 子ウィンドウデバイスコンテキストを取得することができますが、 アクティブになった、この子ウィンドウの上にある ピクチャーコントロールに 描画するためには どうすればよいでしょうか? MDIで、複数のウィンドウのうちで アクティブになった ものだけを 操作したいのです。 MDIGetActive()->GetDlgItem(IDC_PICTURE1)->GetDC()->TextOutA(0,0,"文字列です"); この方法では、エラーがでます。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- オブジェクトの削除について
環境 WIN98 VC++6.0 MFC にて オブジェクトを使い終わってから削除している場合としていない場合が有るのですが、どうしてなのですか? 作ったオブジェクトはなんでもかんでも削除したほうが無難な気がしますが、本にのっているコードで削除してない場合も良く見かけます。 <削除していない>//著名な本のコード void Cxxx::OnDraw(CDC* pDC) { CBitmap bmp; bmp.LoadBitmap(nID); 略 //bmp.DeleteObject(); //■この記述が無い } <削除している>//ネット上でみかけたコード void CMainFrame::_SetBmp(CWnd* pBox,int nID,int width,int height) // 単品 { CDC* pDC=pBox->GetDC(); CDC memDC; CBitmap bmp; bmp.LoadBitmap(nID); memDC.CreateCompatibleDC(pDC); CBitmap* pOldBmp=memDC.SelectObject(&bmp); pDC->BitBlt(0,0,width,height,&memDC,0,0,SRCCOPY); memDC.SelectObject(pOldBmp); bmp.DeleteObject(); memDC.DeleteDC(); }
- ベストアンサー
- C・C++・C#
お礼
見事に動作しました! 嬉しいです!! 分かりづらい質問の意図をくみとっていただけて、よかったです!!!