1 名前:デフォルトの名無しさん [2007/09/10(月) 12:20:27 ] 1 : ◆Manna2uCLg :2005/04/15(金) 13:33:14 Visual C++入門者・初心者からの質問を、 お兄ちゃん達が優しく、時には厳しく回答してくれるスレッドです。 ■質問するにあたって ・エラーや警告のときはエラーメッセージを書きましょう。 ・開発環境も書きましょう。 ・できるだけ具体的に。 質問の仕方については次のページが大変参考になります。 www.hyuki.com/writing/techask.html myu.daa.jp/osiete/ ■回答するにあたって ・回答する場合はその答えに至るための「コツ」も書いてあげると良いでしょう。 (MSDNのどの項目だとか、何のキーワードでGoogleするとか) ・ネタや煽りは軽く流しましょう。 過去スレ、関連スレなどは>>2-5 。
677 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 05:28:25 ] >コンボボックスの▼を押してもキーボードの↓を押しても >リストが現れません。 ああこれね
678 名前:676 [2007/11/11(日) 07:36:53 ] >>677 おはようございます。 良くある質問でしょうか? 申し訳ないですが質問内容が間違ってました。 ▼ボタンを押すとドロップダウンリストは出ます。 しかし、中が空っぽです。 リソースエディタで入力した内容を反映させたいのですが。
679 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 08:28:15 ] 早まって答えなくてよかった >リストボックスではリストに文字列を追加できましたがコンボボックスでは追加されませんでした 問題はこれか
680 名前:96 [2007/11/11(日) 09:14:14 ] リソースエディタのコンボボックスまわりの内容はこんな感じです // Dialog // IDD_CONFIG DIALOG DISCARDABLE 125, 110, 194, 95 STYLE DS_SYSMODAL | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION CAPTION "CONFIG" FONT 9, "MS Pゴシック" BEGIN LTEXT "コンボボックスで値を選択してください",IDC_STATIC,7,19,77,8 PUSHBUTTON "OK",IDC_CONFIG_OK,133,14,26,15 COMBOBOX IDC_COMBO2,86,16,46,71,CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_TABSTOP END // Dialog Info // IDD_CONFIG DLGINIT BEGIN ←コンボボックスのリストに表示したい値(1〜20の数字) IDC_COMBO2, 0x403, 2, 0 0x0031, IDC_COMBO2, 0x403, 2, 0 〜〜〜〜省略〜〜〜〜〜〜〜〜 IDC_COMBO2, 0x403, 3, 0 0x3931, "\000" IDC_COMBO2, 0x403, 3, 0 0x3032, "\000" 0 END
681 名前:676=680 mailto:sage [2007/11/11(日) 09:15:52 ] 名前欄ミスしました。
682 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 09:31:42 ] リソースレベルでコンボボックスのデータを定義できるのはMFCの独自機能。 リソースビューの*.rcを選んでプロパティを見てもらえば分かるが、 'Mfc Mode'という項目が用意されている。 これをFalseにすると、コンボボックスのプロパティでData部分が無効になる。
683 名前:676 mailto:sage [2007/11/11(日) 13:38:36 ] >>682 なるほどそういうことでしたか。 ありがとうございます。 リストの値をSendDlgItemMessage()関数で追加できないと書きましたが 参考書で引数に LB_ADDSTRING を指定しているところで CB_ADDSTRING を指定するようにしたところリストに追加できました。 ありがとうございました。
684 名前:デフォルトの名無しさん [2007/11/11(日) 15:40:55 ] 質問させてください。 Visual C++ .net 2005で開発を行っています。 フォーム(Form1)やピクチャボックス(pictureBox1)に簡単なグラフを表示させたいのですが、 button1_Click等で描画すると、一度非表示になった部分の線が消えてしまいます。 Form1_Paintイベント内で描画すれば解決するのですが、毎回データを読み込んだり計算するのが 無駄に感じます。 Form1で非表示になった部分を消さないための方法はあるのでしょうか? または、なんらかのバッファに描画して、それをForm1_Paint内で毎回読み出すという方法のほうがいいのでしょうか? そのための方法等があれば教えてください。 よろしくお願いします。
685 名前:684 mailto:sage [2007/11/11(日) 15:44:04 ] 補足 線は、 Graphics^ gr = pictureBox1->CreateGraphics(); Pen^ pen1 = gcnew Pen(Color::Black,2); gr->DrawLine(pen1,10,10,200,200); こんな感じで書いています。
686 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 22:25:30 ] >>684 Imageに描いて、Paintイベントでgr->DrawImage
687 名前:648 mailto:sage [2007/11/12(月) 00:13:47 ] >686 なるほど、ありがとうございます。 Bitmapをバッファとして使い、Graphics::FromImageで取り込んだイメージに対して、 描画を行いました。おかげでうまくいきました。 ↓みたいな感じでよろしいでしょうか? 何か改善点があればご指摘お願いします。 Bitmap^ bmap1; private: System::Void mnDraw_Click(System::Object^ sender, System::EventArgs^ e) { Pen^ pen1 = gcnew Pen(Color::Black,2); Graphics^ gr1 = Graphics::FromImage(bmap1); gr1->DrawLine(pen1,10,10,100,100); // gr1->Dispose(); //なぜかエラーになる Form1::Refresh(); } private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { bmap1 = gcnew Bitmap(200,200); } private: System::Void Form1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) { e->Graphics->DrawImage(bmap1,100,100,200,200); }
688 名前:デフォルトの名無しさん [2007/11/12(月) 00:15:57 ] >>687 Bitmap^ の 「^ 」 ってどういう意味?
689 名前:若者は馬鹿者 ◆KorX0HCHGU mailto:sage [2007/11/12(月) 00:16:21 ] Win32アプリ開発で VSの出力の部分にウインドウメッセージを表示したいのですが .netでいうSystem.Diagnostics.Debug.Printに相当する機能はないですか?
690 名前:デフォルトの名無しさん [2007/11/12(月) 00:18:17 ] >>689 ドットネットの質問は他所でやれ馬鹿者!
691 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 00:24:38 ] >>690 には>>689 が”ドットネットの質問”に見えるらしいw
692 名前:684 mailto:sage [2007/11/12(月) 01:09:01 ] >688 自動でガーベージコレクションをやってくれるようです。ようは、使い終わったら勝手にメモリを開放してくれるらしい。
693 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 03:14:25 ] >>692 なるほどー 2005からの機能ですね
694 名前:デフォルトの名無しさん [2007/11/12(月) 08:44:30 ] win32APIで虫眼鏡のプログラムを作ってます。 メモリデバイスコンテキストでマウスカーソル周辺を拡大したものを ディスプレイのデバイスコンテキストに転送してるんですが、 マウスを移動させたときに先ほど拡大した部分を元に戻して 移動先のマウスカーソル周辺をまた拡大という風にしたいんです。 ですが、毎回GetDC(0)をしたとしても拡大した後のディスプレイでは初期化できないし、 hdc2という二つ目のデバイスコンテキストに拡大前の状態を退避させて hdc1に復活させようと思ったのですがうまくいきません。 さらに、メニューを開いたり新たにソフトを起動させたりと、 刻々と変化するディスプレイの状態を追いかけつつ拡大できるようにしたいのです。 探し方が悪いのかもしれませんが、 いろいろ検索しましたが良い解決法が見つかりませんでした。 それに虫眼鏡のプログラミングを解説してるサイトもなさげだし・・・。 このような場合、どのような方法を用いればいいのでしょうか? よろしくお願いします。
695 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 09:49:55 ] MSDNのサンプルじゃダメなの? /****************************** Module Header ******************************* * Module Name: zoomin.c * * Microsoft ZoomIn utility. This tool magnifies a portion of the screen, * allowing you to see things at a pixel level. * * History: * 01/01/88 Created. * 01/01/92 Ported to NT. * 03/06/92 Cleanup. * ****************************************************************************/
696 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 10:35:31 ] 一応 .netを使ったC++/CLI は、普通のC++とは全く別物 .net使いたいならC#がいいと思う
697 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 12:45:26 ] argcとargvについて教えてください。
698 名前:694 mailto:sage [2007/11/12(月) 13:27:05 ] >>695 そのページってどこを探したらありますかね? MSDNのサイト調べても見あたらなかったんですが…。 教えて君で申し訳ありません。
699 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 16:26:41 ] >>698 Platform SDKはインストールしてる?
700 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 17:51:17 ] Visual Studio 2005を使って、DirectXプログラムを作ろうとしてます。 ちなみにOSはWindowsXP Home Editionです。 ネット上の解説サイトで、Visual C++ Express Editionを使って Windowsアプリケーションを作成する場合にはPlatform SDKが必要と書いてあるんですが、 Visual Studio 2005を使う際にもPlatform SDKをインストールしておいたほうが良いでしょうか?
701 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 17:58:14 ] 今ならPlatform SDKよりWindows SDKお勧め。 DirectXには、DirectX SDKが必要。 ただし、DirectShowには上2つの内どちらかが必要。
702 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 18:04:12 ] >>701 ありがとうございます。 DirectShowが何かよくわかりませんが、 解説本がPlatform SDKで進めているので、 これとDirectX SDKでやってみます。
703 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 18:20:49 ] VisualC++ Expressでプログラム製作をしています。 プログラム実行中にコードを書き換えてAlt+F9を押すと、動的にプログラム の内容を変えてくれますが、ボタンを押しても出来ない時があります。 これは何が原因なのでしょうか?
704 名前:700 mailto:sage [2007/11/12(月) 20:24:35 ] 度々すみません。 DirectXのテストをしようと、 D:\Program Files\Microsoft DirectX SDK (November 2007)\Samples\C++\Direct3D\Tutorials\Tut01_CreateDevice\CreateDevice.cpp を自分のプロジェクトフォルダにコピー、既存の項目を追加して、 ソリューションのビルドをしてみると以下のエラーが出ました。 CreateDevice.obj : error LNK2019: 未解決の外部シンボル _Direct3DCreate9@4 が関数 "long __cdecl InitD3D(struct HWND__ *)" (?InitD3D@@YAJPAUHWND__@@@Z) で参照されました。 C:\Documents and Settings\(ユーザ名)\My Documents\Visual Studio 2005\Projects\d3dtest01\Debug\d3dtest01.exe : fatal error LNK1120: 外部参照 1 が未解決です。 そこで、Direct3DCreate9を含む「d3d9.lib」をプロジェクト名→プロパティ→リンカ→入力の「既存の依存ファイル」に追加したのですが、 まだ同じエラーが起こります。 D:\Program Files\Microsoft Platform SDK\Bin/Lib/Includeのパスは追加したのですが、 他に何が原因なんでしょうか?