:: 「こんなことをするにはどうすれば良い?」というとき ::
※MSDNライブラリをよく読む。
※関連すると思われるクラスのメンバ関数を探してみる。
※そのクラスの基本クラスのメンバ関数も探してみる。
※Win32APIからも探してみる。
※WEB検索。
※たいていの問題は
>>2-3 のサイト/書籍で探せば解決。
:: 書籍 :: MFCによるWindowsプログラミング改訂新版 MFCのバイブルと呼ばれている本。 基本的なことから広範囲にわたって解説されている。 ただしデータベースやネットワーク関連クラスについては 触れられていない。 VisualC++5 パワフルテクニック大全集 テクニック集。書籍名のとおり内容は少し古い。 ワンポイント・レッスン 最新Windowsプログラミングテクニック テクニック集。書籍名のわりに内容は少し古い。 Best of MSDN magazine 上・下巻 ワンポイント〜の続編。 WinSock2.0プログラミング MFCの本では無いが、ソケット関連クラス(CAsyncSocket、CSocket) について書かれている数少ない書籍の中の一つ。
一応良く使うサイトと自分の持っている書籍などから 独断と偏見で参考サイト/書籍を挙げておきました。 これからMFC関連の新書は出ないんでしょうかね……
>>2 についてだけど、海外のサイトなのに、なぜhを抜いたりするの?
そもそも、何のためのimeなのか。
MFCの今の状況は斜陽なのかなー?
次々と新しいもんがでますから
10 :
デフォルトの名無しさん :02/05/18 12:25
ツールバーの特定のボタンに動的に色をつけたいのですが、どうすればよいでしょうか? イメージとしては、ツールバーにWordのような文字色を変更するためのボタンを作り、 色を選択するとそのボタンの色も選択した色で着色したいのです。
11 :
デフォルトの名無しさん :02/05/18 14:28
相談よろしくお願いします。 サブクラス化したコントロールをメンバに持つ親ウィンドゥがあり、 それら両方に同じメッセージに反応するハンドラを実装した場合、 試してみると親ウィンドゥのハンドラのみが呼び出されます。 これを、サブクラス化されたコントロールのハンドラも呼び出されるように する方法ってありますでしょうか? 当然、親のハンドラ内で m_MyControl.OnXXX() を呼び出したり、 メッセージを親の WindowProc() 内で処理するようにすれば実装できますが、 これでは保守性が悪いので、スマートな方法を模索しております。
>>11 ON_CONTROL_REFLECT_EXマクロを使って、ハンドラ内でFALSEを返す
のはどうかな?
これだと子→親へとメッセージがルーティングされる。
13 :
デフォルトの名無しさん :02/05/18 14:56
>>12 様
11です。
すばやい回答ありがとうございます。
まさしく、ご指摘どおりの方法で希望の動作を実現することができました。
ありがとうございました。
これで、親ウィンドゥでは通常の方法でメッセージハンドラを追加するだけで
両方のハンドラを呼び出すことができるようになりました。
ダイアログのサイズ変更時にボタン等の位置変更はどこでやればよいのでしょうか。 Button.MoveWindow()で動かしているのですが、 WM_SIZEを拾うOnSize()でやるとコンパイルは通っても実行時に止まってしまいます。 OnPaint()では縮小のみの場合書き直されないようで・・。
実行時に止まってしまうとかはデバッグして具体的にどこで止まってるなど 確認したほうがいいよ。その方が回答も得られやすいし。 この場合、たぶん始めにOnSizeが呼ばれたときはまだコントロールが 無いから、Button.MoveWindowのButtonが無いって起こられてるんだと思う。 OnSize内で if(Button){ Button.MoveWindow(・・・); } としてみては。
上記で動かせました。 起動時にもOnSizeが呼び出されるんですね。 ありがとうございました。
17 :
デフォルトの名無しさん :02/05/20 13:59
プロパティシートとタブコントロールについての相談です。 プロパティシートにプロパティページを複数張り付けて表示しています。 そのうちのプロパティシートで最初にAddされたページ(ページのINDEXは0だと思う) のタブ部分にフォーカスというか、カーソルというか、クリック後のように 文字が点線で囲まれたような状態にしたいんです。 調べたところCTabCtrl::SetCurFocusを使うのではないかと思い、 ページのOnInitDialogでやってみたのですが使い方を間違えているのか、 うまくいきませんでした。何かヒントなどあったら教えてください!お願いします。
OnInitDialog()がTRUE返してないか?
19 :
デフォルトの名無しさん :02/05/20 14:40
TRUEになってました・・・でも、FALSEにしてもやっぱりだめみたいです。
デフォルトで自動的にPage内のコントロールに フォーカスが移ってしまうみたいだね。 これを断ち切ればタブにフォーカスがセットされたままになると 思うのだけれど・・・どうしたものか。
タブ.SetFocus(); タブ.SetCurFocus( 1 ); でだめならPostMessageするしかないかな。
22 :
デフォルトの名無しさん :02/05/20 15:35
>21 そうですか・・・ありがとうございました。PostMessageですね。 やってみようと思います。
23 :
デフォルトの名無しさん :02/05/20 18:52
CSingleDocTemplateで表示されるメニューの有効/無効などを変更したり、 キャプションを変更するには どうしたらいいでしょうか?
一生懸命勉強してもMFCなどもう時代遅れ。 ホントいい加減にして欲しいよなぁ MFCが行き詰まったとか対応できなくなったとか、そんなんあるか?
23 何をしたいか書いてないから断定できないが・・・ 動的にドキュメントテンプレートのリソースが交換でないし AfxGetMainWnd()->SetWindowText ( "My Own Title" ); SetMenu();or UPDATE_COMMAND_UIのCCmdUIを使うしかなと思う。
26 :
デフォルトの名無しさん :02/05/21 13:54
MFCを使えばWin32APIを生で使った時よりも楽になりますか?
MFC AppWizardとかClassWizardとか使ってフレームワークの範囲の操作なら全然 楽です。フレームワークの範囲ならC++の知識も大して要りません。 (テストプロジェクトを作って見ればどれだけ楽か判ります) それ以外は全く同じです。
ありがとうざいましたm(..;)m
29 :
デフォルトの名無しさん :02/05/21 16:53
変形したダイアログウィンドウはどうやって作るんですか? 丸型のウィンドウとか、六角形だとか、もしくは複雑な形のウィンドウです。
有難うございます。
32 :
デフォルトの名無しさん :02/05/21 20:55
>26 大して楽になりません。結局Win32APIとMFCの関係を知らないと 困ること多し
33 :
デフォルトの名無しさん :02/05/21 23:11
CEditを全選択状態にしたいのですが、 o_edit_control.SetSel(0, -1, false); UpdateData(false); これでコンパイルは通るんですが、全選択がされません。 第2引数に5などの数を入れたり、第3をtrueにしてもダメ。 何か他に設定とかありますか?
なんでUpdateData(false); してんの? なんでUpdateData(false); してんの? なんでUpdateData(false); してんの?
35 :
デフォルトの名無しさん :02/05/22 00:39
ツールバーにテキストボックスを入れたりするのは難しいのでしょうか? 出来ればスマートな方法をお教え頂きたいのですが。
>>35 ツールバーの代わりに ReBar を使ってしまうのがスマートかと。
CToolBarを継承したクラスの中にCEditを持って、OnCreateをオーバーライドするとか。
>>35 セパレータの幅を指定することが出来るので広めのセパレータを作成し、
その領域にEditを貼り付ける。
39 :
デフォルトの名無しさん :02/05/22 19:28
MFCでTreeViewを作成したのですが、一番上の階層にもボタンが表示されてしまいます。 表示しないようにするには、どうしたらいいですか?
windowのstyleから TVS_LINESATROOT を削除
皆さんサンクスです。 教わったキーワードを元に色々調べてみます。 ありがとうございました m(_ _)m
42 :
デフォルトの名無しさん :02/05/22 23:06
アクティブビューってどうやって取得すればええんでしょう?
google検索 アクティブビューの取得
44 :
デフォルトの名無しさん :02/05/22 23:16
CListViewをレポート形式で使ってます。 ビュークラスのOnUpdate()中でサブアイテムを追加しようとすると失敗します。 何か足りないんでしょうか?こんな感じ。 void CPageNumerView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) { CListCtrl& listCtrl=GetListCtrl(); listCtrl.DeleteAllItems(); CPageNumerDoc* pDoc = GetDocument(); LV_ITEM listitem; for(int i=0; i < pDoc->m_PageNo; i++){ int iActualItem; listitem.mask = LVIF_TEXT; listitem.iItem = i; listitem.iSubItem=0; listitem.pszText=_T("サブアイテム番号0は追加成功"); iActualItem=listCtrl.InsertItem(&listitem); listitem.iItem = iActualItem; listitem.mask = LVIF_TEXT; listitem.iSubItem=3; // ここに0を指定すると正常動作 listitem.pszText=_T("追加されないよー"); listCtrl.SetItem(&listitem); } } ちなみに何故か同じ処理をOnInitialUpdate()で行うとちゃんと動きます…。
1件しかヒットしねえじゃんと思ってたら答えでした。 ありがとう。氏んでくる。
自前で解決しました。ども。
48 :
デフォルトの名無しさん :02/05/24 12:17
TreeViewの+ボタンが押されて、ツリーが展開されるのを判断するにはどうしたらいいですか? TVN_ITEMEXPANDINGを捕まえれば良いような気もしますが、これって展開か縮小かどっちか判断できませんよね?
すみません、よく調べたらactionメンバで取得できました。
めちゃくちゃ遅レスだけど 前スレ881のPtInRegionだけど解決したので一応ご報告 If (rgn.PtInRegion(point) == TRUE) これを If (rgn.PtInRegion(point) != FALSE) に変えたら直りました。 こんな落とし穴に1週間悩むなんて....鬱
51 :
デフォルトの名無しさん :02/05/25 00:10
最近のこのスレの流行は…「自分で解決」。 ま、人に話してると分かっちゃうってのは実際よくあるけど。
話すために問題を整理しているうちに..てやつだな。 よい傾向ではないか?
53 :
デフォルトの名無しさん :02/05/25 16:55
プロパティーシートを作成して, ページ1(クラスMyPage1)にEditBoxを置いています. そのEditboxの値を, CMyDlgクラス(始めに作成したクラス)のOn_Button()内で使いたいのですが. クラスが違う時はどのようにEditboxの中身を参照すればいいのでしょうか?
EditBoxにClassWizardでCString変数を割り当てておくと public宣言されるので外から参照できます。
>>50 BOOL だから安心したんだろうけど、MSDN はちゃんと読むもんだよ。
BOOL PtInRegion(HRGN hrgn, int X, int Y);
戻り値
点がリージョンの内側に含まれていたときは、0 以外の値が返ります。
点がリージョンの内側に含まれていなかったときは、0 が返ります。
TRUE が返るとは一言も書いてない。そもそも C 言語で...
if(xxx == TRUE){...
とかくのはどうかと思う。真偽しか返ってこないとわかっているなら...
if(xxx){...
と書いたほうが良いと思う。(まあ、個人的見解だけどね。)
56 :
デフォルトの名無しさん :02/05/25 20:06
>>55 漏れは前者の方が好きだが。分かり易くて良いよ。== TRUE
==TRUEはやめておいたほうがいいだろ・・・
>>56 まあ、
>>55 にも書いたが、個人的見解が色々ありそうなところではある。
ただ、
>>50 ,
>>57 の通り == TRUE は、色々危ないし != FALSE
と書く余計わかりにくくなると思うが、どうよ ?
59 :
デフォルトの名無しさん :02/05/25 22:32
ビットマップファイルを読み込むくらい簡単にJPEGファイルを読み込んで表示する方法ありませんか?
混乱の元だから==TRUEはやめたほうがいい。 BOOLはboolじゃないんだから。
「0かそれ以外」と仕様に明記してあるのに 「1かそれ以外」で判定するのはやめてくだちい。
>>59 OleLoadPicture。これ最強。
63 :
デフォルトの名無しさん :02/05/26 00:08
CScrollViewにCEditを配置したいんですけど、 CEditにいったんフォーカスを移してしまうと、ScrollViewをクリックしても KILLFOCUSされないんですよね。 これ、何か回避方法はあるのでしょうか。要はScrollView上にフリーに 文字列を書いて行くようなアプリを作りたいのですが。
>>63 ViewにEditって貼り付けるって、その考え方おかしくないか?
あり得ないと思うが。
>>64 そですか?表現が悪いのかなぁ。Winプログラミング初めてなもんで。
フォームビューにエディットボックスを貼り付けるのは普通にやりますよね。
スクロールビューにも貼り付けることは出来たんですけど、
(そもそも、貼り付けるって言う表現は適切なのかな・・・)
編集状態から抜けるためには、ビューのところをクリックしてもだめなんですよね。
>>65 ウィンドウはクリックしても自動的にフォーカスは受け取ってくれないんじゃなかったっけ?
OnLButtonUpでSetFocusじゃないかな?
ダイアログの動作 CView →CFormView(Dialog)→CEdit ビューの動作 CView →CCtrlView→CEditView(Edit)
>>67 解決しました。ありがとうございました。
OnLButtonDownじゃ駄目なんですね。なぜなんでしょう。まだ精進が足らんな。
71 :
デフォルトの名無しさん :02/05/26 18:03
CFileDialogでファイル名を複数取得すると、 謎な順番でファイル名が返ってきますけど、 アルファベット順に受け取りたい、時は、 どうすれば良いでしょう?
CTreeCtrlに構造体やオブジェクトを登録ってできますか? ツリーの選択されたノードに登録されているオブジェクトを取得ってしたいのですが。
SetItemData
75 :
デフォルトの名無しさん :02/05/27 21:11
現在、IEへD&DでファイルをアップロードするActiveXをVCで作ろうと考えています。
http://www.ne.jp/asahi/hishidama/home/tech/vcpp/dropfile.htmlをサンプルに 、
VC6++でMFC ActiveX ControlWizardでEDITを基底クラスにして、DragAcceptFiles()と DragQueryFileでDropを受け取るコンポーネントを作成し、ActiveX Control Test Container で実行したところ、問題なくエクスプローラからファイルをDropすることができました。
しかし、HTMLに貼り付けIE上から同じことをしようとしたところ、このコンポーネントはDropを受け 取ることができませんでした。
もうひとつこのコンポーネントからDialogを開き、それを「ドラッグドロップを許可」で受け取れるよ うにして実験してみても結果はおなじでした。
IEのセキュリティ上の問題なのかとも考えていますが、そういう資料がみつかりません。
SDIアプリでシリアライズするときに、ファイルの形式が旧バージョンと 変わってるときはおまえらどうしてますか? 1.旧バージョンのファイルと互換性をなくす (このことをReadme.txtなどでユーザに通知) 2.ファイルの先頭にバージョンを表すコードを埋め、 読み込み時にそのコードでファイル形式を場合分け 3.シリアライズ時にスキーマ番号でファイル形式を場合分け 実は3でやろうと思ったらスキーマ番号が反映されなくて困った。 GetObjectSchema()で番号を取得しても4294967295という変な数字しか 返ってこないのです。
77 :
デフォルトの名無しさん :02/05/29 09:14
>>76 うちは2やね。ところで実はSetObjectSchemaしてないとか言わんといてくれよ。
78 :
デフォルトの名無しさん :02/05/29 10:43
おそらくとてつもなく初心者質問ですが教えてください。 今度はいった会社にVC6.0があります。ソフト屋でないので 誰も使っていません。もちろんMSDNには入っていません。 その古いVC6.0でWin2000命令のColorRGBtoHSLが使えません おそらくダウンロードサイトいって落としてくれば良いと 思うのですが該当するファイルがわかりませんでした VCサービスパック5は落として当てていますがダメのようです 前の会社ではVC6.0 Win2000サービスパック(名前うろおぼえ) というCDがあったのでそれとは思うのですが・・・・ よろしくお願いします
76 4294967295==0xfffffffだからオブジェクトのバージョン不定とおもわれます。 CXXXDocクラスなんかはDECLER/IMPLEMNT_SERIALしてもクラス情報をファイルに 書き込まないから必ずオブジェクトのバージョン不定になります。
>>79 てことはCDocumentの派生クラス(つまりAppWizardで生成されるもの)
ではスキーマ番号によるバージョン管理はできないということですか??
80 何故ドキュメントやビューの子クラスのバージョンがー1になるかは知りません。ですが ar.SerializeClass()でクラスの情報を強制的に読み書きすればドキュメントクラスも バージョン管理ができます。(MSDNアンドキュメンテッドです) そもそもファイルのバージョンという概念がないですから(クラスのバージョンと いう概念しかない)ファイルバージョンクラスを作って管理するのが正しいやり かたかもしれません。 IMPLEMENT_SERIAL(CMyDoc, CDocument, VERSIONABLE_SCHEMA|100)//Ver1.00 void CMyDoc::Serialize(CArchive& ar) { ar.SerializeClass( RUNTIME_CLASS(CMyDoc) );//親でなく自分のクラス名 if (ar.IsStoring()) { ar << m_pObject; } else { UINT nVersion = ar.GetObjectSchema( ); ar >> m_pObject; } }
とりあえずVC++6.0で簡単なソフト作りますた。 当然マイPC(Win98)では稼動するわけだけど これってどのマシンで動くの? VBの場合ってVBランタイムってのが入ってないとだめじゃん。 他のPCで動かす場合でVC++が入ってない場合 VCで作ったプログラムもこのようなVCランタイムみたいなのが 必要なの? ちなみに95で起動エラーおこしました。
MFC限定
MFC42.DLLとか言うのが必要 もしくわスタティックリンくさす。 とよく確かめもせず答えてみる
>>84 >>85 いまいちわからんけど、とにかくありがとう。
えーっとVC++が入っているPCはDLLがはいっていて
普通に作ったデバッグフォルダの中にある完成品単独で動くんだよね。
サブマシンWin98で作ったものがメインマシンXP(VC++インストールしてある)
で単独で動きました。
ただ大学のWin95のVCはいっていないマシンで動きませんでした。
このMFCDLLってのは通常は入っていないものなの?
えーっとスタティックリンクってのもそれっぽいエラーでました
そこをなんとかすれば動きそうなんですけど。
>>85 さんのが答えなんだろうけどちょっとわかんないです。
つまりどうしたらいいのでしょうか。バカですいませんです。
VC++6Pro以上でコンパイルしたならWin95でmy.exeが単独で動くはず。 (VC++.net standard 以上と思う) スタティックリンクのオプションが通っていて、Win32 Releseになってる の確認してもうリビルドしてみたら。(my.exeはreleaseのしたにある) もしかしたらスタテックライブラリが(コンパイルマシンに)インストールされて ないかもしれないからその時は、ライブラリをインストールするか、 他のWin95or98機からMFC42.DLLをそのWin95機のwindows\systemフォルダー にコピーするだけでMY.exeが動くようになると思うけど。(未確認)
88 :
デフォルトの名無しさん :02/05/31 20:16
きょうび95ユーザーはいないだろうから まあ無理して95でうごかすつもりはないけど みなだんはVC++で作った作品を公開する場合、 どうしてるんですか?98、Me、XPで動くようにするために
89 :
デフォルトの名無しさん :02/05/31 20:29
スタティックリンクでコンパイルしたらどんなエラーが出たの?
えと、壁紙を変更するプログラムを作りたいと思ってます。 で、その壁紙で使用するJPEG画像をプログラム中に埋め込んで、ユーザが 用意せずにボタンを押すだけで変更できるようにしたいのですが。 プログラムに画像を埋め込んでそれを使用できるようにする方法はどのようにしたらよろしいでしょうか? 色々WEBで調べてみたのですが、検索の仕方が悪いのか、全然わかりません。(TT
91 :
デフォルトの名無しさん :02/05/31 21:33
CString型に代入した文字列は、何文字かであふれるわけですよね。 どうすれば莫大な文字列を格納できるでしょうか?
>>90 res://ファイル名
形式でリソースにアクセスできたはず、
ドキュメントは・・・どこで見たか忘れた。
res://C:\WINDOWS\System32\shdoclc.dll/dnserror.htm
それが壁紙に使えるかどうかは知らないけどね。
ダイアログベースのアプリケーションについて質問です。 1.プロジェクト名"Test"でダイアログアプリケーションを新規作成する。 2.リソースエディタでプッシュボタン(ハンドラ:OnButton1)を作成する。 3.それぞれのソースに下記を追記。 ・TestDlg.h class CTestDlg : public CDialog{ private: CWinThread* mpThreadList; }; ・TestDlg.ccp extern UINT gThread (void* pParam); void CTestDlg::OnButton1(){ mpThreadList = AfxBeginThread(gThread ,this); } UINT gThread (void* pParam){ UINT i,j=1; for(i=0;i<30000000;i++){ j *= j; j /= j; j++; j--; } AfxEndThread(0); return j; } 4.上記を実行し作成したプッシュボタンをクリック。 不具合) gThreadの実行中にダイアログを閉じるとメモリリークが発生する。 上記のようなメモリリークが起きて困っています。 どのように記述すればよいのでしょうか?
95 :
デフォルトの名無しさん :02/06/01 03:32
#defineの代わりにconst int NUM = 20; とやったら純粋仮想関数の定義が間違いだとえらーがでます=0とやれと。 なんで??
96 :
デフォルトの名無しさん :02/06/01 04:20
よーし今日こそはパパ、MFCやっちゃおうかな〜
>>91 生ポインタを使う。 >>94 気づいたとこだけ AfxBeginThread(gThread ,this)にはCWnd*を渡さないほうが よいといわれている。 AfxEndThread(0); return j; <-これは実行されない気がする。 あとメモリリークはオートデリートするフラグとかの関係かも 以上適当に書いてみました。バーカバーカ
>>91 あふれそうになったら、勝手に伸ばしてくれるので気にしなくてよい。
CStringは INT_MAX-1 まで。それ以上は使えません
上限まで使う心配もなさそう。。
101 :
デフォルトの名無しさん :02/06/01 06:37
>93さん ありがとうございました。 どうやら、壁紙には使えないようです>< ファイルをハードにコピッて使えるかどうか試してみます。
>>95 VCのバグ。.NETでは直ったらしいけど。
103 :
カメルーン代表 :02/06/01 10:37
ウィンドウズによく入っているGAMEPACKみたいな カラフルで絵とか使ってなめらか動画のゲームって VCでつくれます? あのピンボールとかのなめらかなアニメ−ションはどうやって やっているんだろう。 あと、音のならしかたわかんない。
VC++で作れますがカメルーン代表には難しいと思います。
105 :
デフォルトの名無しさん :02/06/01 12:55
他のスレでも書き込みましたが、ぜひ相談に乗ってください。 VBで「Dim WithEvents obj???? 〜」って宣言すると、COMコンポーネントの イベントを受け取れるじゃないですか。 このコンポーネントをVCで動かそうとしています。 VBで出来る事がVCで出来ないわけがないと思っていましたが、いわゆる インタフェイスクラス側のインプリメントは簡単に出来るんですが、 イベントハンドラ側がうまく実装できません。 タイプライブラリを指定して同コンポーネントのクラスを自動生成させた のですが、ヘッダファイル上でプロトタイプを確認すると、「引数の型が あいまいでメンバを実装できません」みたいな表示がされて、イベント ハンドラが加えられていません。ここでひとつ質問。 1、vテーブルが存在するものとしてviatual宣言の上メンバ関数を書き加えて 意味があるのでしょうか。 そこからイベントをキャッチする場合、 2、生成されたクラスを派生させて、イベント割り当て関数をオーバーライド すれば、イベントをキャッチできるのでしょうか? インタフェイス側のクラスはCoRegisterClassObject関数でハンドシェイク 出来ましたが、イベントハンドラ側は「クラスがない」といった風なエラー が発生します。 3、COMコンポーネントの設計の問題でしょうか?それともクライアント側の コーディングの問題でしょうか?それとも他に? COMコンポーネント側もある程度ソースレベルでの融通が効きます。 以上3点の解決について知恵をいただければと思います。 よろしくお願いします。
>>105 マルチポストですか。いい度胸してますね。
あなたの投稿はネタとして受け止められ、マジレスは一つもつかないでしょう。
マルチポストさえしなければねえ・・可哀想に。
107 :
デフォルトの名無しさん :02/06/01 13:26
>>106 ネタにしたいのはあなたであって、板の総意であるような書き方はお控えください。
>>107 いくら質問に答えてほしいからってバレバレの自作自演は止めろ(藁
109 :
デフォルトの名無しさん :02/06/01 13:43
106=108ですね。こういうのは自作自演とは言いません。 これを「自作自演」と称するのはあなただけであって、板の総意であるような書き方はお控えください。
105=107=109ですね。こういうのは自作自演とは言いません。 これを「自作自演」と称するのはあなただけであって、板の総意であるような書き方はお控えください。 ついでにどう言い繕おうがマルチポストは全否定されます。
111 :
デフォルトの名無しさん :02/06/01 16:44
>>110 よっぽど悔しかったんだな(w
逝ってる(w
>>86 遅レスをぶちかましますが、きっとデバッグ版だから動かないのでは。
他のマシンへ持ってくものを作るにはリリース版をビルドしましょう。
エラーの内容も書かないバカはほっとけ
>>78 おそらく古いヘッダとインラインライブラリ(及びヘルプマニュアル)しかなくて
使えないのだとお察しします。ハズしていたらスミマセンが。
新らし目のAPIを使用するには、新しい「プラットフォームSDK」が必要になりま
す。その中に必要なヘッダとインラインライブラリが含まれてきます。最新版な
ら問題なくAPIを使えるはずです。「プラットフォームSDK」は、MSDNのサブスク
リプションを購入すれば送られてきます。サブスクリプションも何種類かありま
すので、必要なものはどれかは調べてみてください。
あとね、自分で関数アドレスを取得する方法もあります。LoadLibrary,
GetProcAddressを調べてみんさい。
MSサイトからDLさせずに購入させるとは さてはMSの回し者だな? 言ってみただけだ。いわゆる一つのテストだからおーこーるーなーやー
>>115 すみません、DLできるんですね?当方、送られてくるCDでしか使用したことが
なかったので知りませんでした。つうか、ダウンロード センターで検索したん
ですが、それらしいものがなかったのですよ。他のSDK(DirectX,WMI等)は
見つかったのですが・・・。
もしよろしければ、アドレスを教えてください。
>>117 このCoreSDK(231.7 MB)ってのがそれらしいですね。でもなぜかDL出来ない。
SDK Update controlてのが必要な様ですが、指示どうりにブラウズしても
インストールできないような。他ではDLできてますか?
>>86 遅レスですが、MFCDLLは、動かす環境にあらかじめあるという前提は
立てないほうが良いです。入っていてもバージョンの古いMFCDLLなら自分の
EXEは動きません。(バージョンが違えば、ファイル名が違うことが多いので)
ちなみに、自分のEXEがリリース版ならリリース版の、デバッグ版ならデバッ
グ版のMFCDLLがそれぞれ必要になります。
自分のEXEに必要なDLL(MFCDLLも含む)を調べるのは、VC++6.0付属の
Dependency Walkerてのを使用して、自分のEXEを開きます。
依存するDLLが一気に分かり、便利ですよ。
Debugビルドしたモジュールは配布しちゃいかんよ。
>>120 Debug版のMFCDLLは再配布禁止です。
が、Debugビルドしたモジュールは場合によっては良いと思われ。
>>118 とりあえずScriptとかActiveXはオンだよね。
あとAdministrator権限と。
俺がDLしたのはかなり前だからなぁ・・
>>122 >とりあえずScriptとかActiveXはオンだよね。
>あとAdministrator権限と。
うーんおかしいなぁ。今トラぶってるのかもしれませんね。
きっとそのうち出来るようになるでしょう。多分。
とりあえず、thanks!
パフォーマンスが必要なアプリの場合、MFCは静的リンクのほうが 良いのですか? 動的リンクでも速度は変わらないですか?
なんで試しに測ってみないんだこいつ なんで試しに測ってみないんだこいつ なんで試しに測ってみないんだこいつ
>125 StandardEditionは動的リンクが出来ないのよ。 速度期待できるなら新しいの買おうかと思って・・
間違えた静的リンクが出来ないの
MFCに関して言うと、GUIのフレームワークとして使っているなら 動的だろうが静的だろうが速度に差は出ない。 出たとしても計測誤差に収まる範囲しかでない。
あるクラス情報をレジストリに保存したいのですがどうすれば良いのでしょうか? ファイルに保存するならCArchiveメンバ関数を使えばできるのですが、 レジストリに保存/復元したいのです。
129 ぐぐる レジストリ VC ・・・そもそもレジストリはストリームな構造でもないし、少量のデータしか 保管できない。
レジストリAPIの使い方を知りたいのではなく また、データ量も数百バイトと少量です。
CRegArchive ar; // 自作する if ( ar.IsStoring() ) ar << m_data; else ar >> m_data;
ATL COM コンポーネントのイベント取得についておうかがいをたてたもの ですが、方法がわかりました。 見当違いもはなはだしい状況でした。 ありがとうございました。
>97 コール先のダイアログを操作するのでCWnd*(CTestDlg*)を 渡したいのですが、とりあえずchar*を渡すようにして試し たところやはりリークが起きました。 現在はOnCancel()をオーバーライドして、スレッドが生き ている間はダイアログを閉じられないようにして暫定対策 しています。 進展あればまた報告します。
>128 便乗質問ですが、CStringなど使ってバリバリ重い計算してい る場合はパフォーマンス変わってきますか? (ちなみに俺はVC6アカデミックエディション)
CStringでばりばり計算というのがさっぱり想像付かないが、 計算結果を文字列にしてダイアログアイテムに対してDDX_とかしてるなら、 その数、その頻度が増えるほど、処理は遅くなる。 これはCStringが遅いのではなく、CPU内で完結する演算処理と、 書式化した演算結果を画面に表示するのにかかる時間が 比べものにならないくらい遅いため(普通の人間にはその差は分からないが)。 演算の経過表示を全部画面に対して行うと、MFCを使わなくても死ぬほど遅くなる。 試せるなら、 1. 演算10万回->経過表示10万回 2. 演算10万回->経過表示を間引いて100回 3. 演算10万回->結果表示1回 を比べてみなさい。 で、MFCのDDX_による画面表示が遅いのかといえば、 Win32APIを使って表示を行うのに比べてよけいな処理が増えている分遅い。 がしかし、普通の人間が見る分には、何百回〜何千回もの表示処理を行わ なければ大した違いは体感できない。 表示処理は、MFCに限らず重い。 間引けるものなら間引きなさい。 それでも重いなら、計算中に行っている重い処理、特に メモリ確保、クラスのインスタンス生成、ファイルIOなどの 回数を減らせるように、計算のアルゴリズムを変更しなさい。 MMXだとかそんな姑息な最適化をする前に、 設計段階でやるべきことはたくさんあるのだ。
厳密にはDDXそのものが表示処理を行うわけではないが、 とりあえずそんなもんだとおもっとけ。
>>135 CStringで書いていた処理を charに置き換えたら、リリース版のファイルサイズが
ばっさり減ったし、実行速度も速い。
アカデミック版ということはリリースビルドはできないけど、デバッグ版のほうが
検証コードとかも入っている分、CStringの重さが効いてくるんでない?
>>138 アカデミック版ってリリースビルドも出来ないのか・・・。
最適化が無いとは聞いていたが。
>>140 うん、最適化は無いはず。記憶違いだったらスマソ。
142 :
デフォルトの名無しさん :02/06/04 18:43
>>135 「CStringを使って重い計算」っていうのがよくわからないけど、
文字列の編集ってことだったらCStringは重いよ。
数十キロ〜数百キロの英文を、メモリに持っておいて、単語を置換したり
連結をしたりする処理を、やったことあるんだけど、
CStringをstd::stringに置き換えただけで、劇的に速くなったよ。
143 :
デフォルトの名無しさん :02/06/04 19:46
VC++を使ってプログラム組むときに MFCは使ってられない、 WIN32を組み合わせてプログラムをしてはいけない と聞きましたが本当でしょうか? 本当なら全部自分で作るしかないのですがそんな効率の悪いことはしてるのでしょうか? 言った人曰くプロなら当たり前といってました
どうせゲームプログラマだろ。
ガセネタであったと。 でもゲームならDirectXは? あれは違うのですか、と思いながらスレ違い、板違いになりそうだ
>>146 MFCが必要ならば使うし、そうでなければ使わないと思う。
実際、MFCがあると開発効率は良くなる。
しかし、特別な理由で(他プラットホームへの移植を考慮するとMFC
のライブラリコードに依存したくないとか)使わないこともあるだ
ろう、とマジレスしておく。
スマソがゲームのことは分からんぜよ。
お答え頂いた方々ありがとうございます。 確かに楽になる部分はありますしね>>MFC また何かありましたらよろしくお願いいたします。
ゲームの場合MFCはほとんど使わないよ。 型から外れるせいでVC++のウィザードが役に立たないし、 ウィンドウはたいていシンプルなやつが一つだし、 ブラシやペンを使って描画することもない。
アカデミック版はリリースビルドできることを一応明記しておこうっと。
いろいろな方アドバイス有難うございます。 速度が必要なときはCStringを使わずにcharなどを使って 記述した方が良いということですね。 あと私がVC6購入したときの(1.5年前)アカデミックエディ ションは、スタンダードエディションと全く同じ内容なので、 139さんの言う通りリリースビルドは出来ます。 詳しくはMSDNライブラリの VC++ドキュメント +--VC++6.0の新機能 +--VC++の各Edition +--VC++の各Editionの比較 を参照ください。
152 :
デフォルトの名無しさん :02/06/05 02:10
CListCtrlのSubItemHitTestメソッドって、もしやVC++6以降のみですか? VC++5だとコンパイルエラーになって、ヘルプにもそんなメソッドのってないのですが。
トロンって仕様のみじゃないの? 実装は別物。日本人が実装すれば早いだろうが。 あと漢字関係あんの?
誤爆です。。
>>152 無かったら、SendMessage(LVM_SUBITEMHITTEST)したら?
156 :
デフォルトの名無しさん :02/06/05 14:22
157 :
デフォルトの名無しさん :02/06/05 14:31
158 :
デフォルトの名無しさん :02/06/05 15:03
お金がないので、cygwinでプログラムの勉強をしたいと思うんですが、 こういう場合でも、何かのC言語のソフトを購入しないとダメなんでしょうか? メモ帳とかでプログラムって組めないんですかね? いや、ほんとにお金がないもので・・・
157 基本的にMY.EXE単独のときは、インストール簡単だからスタテックリンクかな。 ちなみに小さなSDIアプリケーションでダイナミックが30K、スタテックが300Kほど ダタ。だからネットでのDLが前提だと両方コンパイルして容量を比較して決めた ほうがいいかも。 MY.EXE、MY1.DLL、MY2.DLL・・・がそろぞれMFCを持つときはダイナミックか スタティックを検討しよう。 ちなみにOSが古いとき(95)、MFC42.DLLのバージョン不適合(?)だと 「システムに装着されたデバイスが正常に動作してません・・・」など というメッセージが出でるから、ユーザがパソコンを破壊しかねないので、 ダイナミックでEXEを配付するときは注意。
俺は一応スタティックリンク。 ただしVC++.NETではスタティックリンクしてもWin95で動かないので注意しよう。
161 :
デフォルトの名無しさん :02/06/05 15:41
>>159 それです。
じつはいま大学や自分のいろんなパソコンでためしてるのですが、
98(これで作成)、XP各マシン(自作マシンやら製品版富士通NECなどいろいろ)
で全部動いて95だけ「開始エラー」と出て、作動しませんでした。
まあ、95は非対応とすればいっか。今日び使ってるひとなんていないし。98以上ということで。
逆に98以上はどうやらほとんどのPCにDLL入っているみたいです。
そんでやっぱ別にしようかなと。
配布するときは安全を考えて、
自分の作成したdebugフォルダの中にある my.exe(これが完成品なわけですよね?)
を単品で
プログラム→「ダウンロード」みたいなかんじにして
それに
「このプログラムはMFC.dllが必要です。ない人は以下からDLしてください」
http://www.vector.co.jp/soft/win95/util/se040499.html ってのでいいのですか?。つーかベクター直リンOKだったっけな?
>自分の作成したdebugフォルダの中にある my.exe 配布するのが目的なら違います。 リリースビルド版を配布してください。
スタティックリンクにしてもいいと思うけどなぁ。 せいぜい数百KBくらいでしょ?
>>161 VC6でフリーウエアを作って配布してるんだけど、
何人かから MSVCP60.DLL がどうしたとかってエラーが出て
起動しないって報告が来てから、スタティックリンクで配布
するようにしてる。
165 :
デフォルトの名無しさん :02/06/05 16:04
>>162 初めてしりました。勉強になった。
リリースビルドだとシンボリック デバッグ情報は取り込まず 実行速度を最高速化するんですね。
あとバカ質問なんですが、スタティクリンクの方がいいとのことなんで
やってみようと思うのですが、検索してもいまいちわかりやすいサイトが
ありません。スタティクリンクのやりかたのおすすめのHPってありますか?
肝心なやりかたをしらないんですよ。
>>165 > リリースビルドだとシンボリック デバッグ情報は取り込まず 実行速度を最高速化するんですね。
というか、デバッグビルドだとデバックビルド用のDLLが必要で、
このDLLはVCを持ってない一般の人は普通持ってないので動きません。
さらにこのデバッグビルド用DLLは再頒布不可なので配布もできません。
ゆえにリリースビルドします。
> スタティクリンクのやりかたのおすすめのHPってありますか?
>>156 に載ってまっせ。
167 :
デフォルトの名無しさん :02/06/05 16:15
>>166 ありがとう!
つーかデバックとリリースコンパイルの違いをしらなかったのって
俺だけ・・?スゲー基本的で大切なことなんだからもっと
参考書はこーいうことも大きく書いて欲しいもんだ。
ほとんどの本は完成したものをその後どうするかなんて書いてないもんね。
たすかりましたー。
一般配布する完成品とは
「リリースでコンパイル&スタティクリンクしておく(特別軽くしたくなければ)」
のがいいんですね。
そういうこってす。
> ほとんどの本は完成したものをその後どうするかなんて書いてないもんね。 言われてみれば確かに
170 :
デフォルトの名無しさん :02/06/05 16:35
>158 リナックスにしる!
172 :
デフォルトの名無しさん :02/06/05 16:57
リストビューにファイルをドラッグ&ドロップしたいのですが、 リストボックスだと行けるのに…、リストビューだとダメなんです。 どうしてなんでしょう? 教えてください。または参考になるHPを教えてください。お願いします。 m(_ _)mペコリ
174 :
デフォルトの名無しさん :02/06/06 10:18
175 :
デフォルトの名無しさん :02/06/06 10:36
今しらべたらやっぱダメみたいだ。 無料でVCスタンダードエディにスタティックリンク機能を 追加するソフトはないの?パッチとか
176 :
デフォルトの名無しさん :02/06/06 11:39
おれは実行ファイルに埋め込まれるデータを消去するソフトが欲しい。
えっと。ListViewにファイルをD&Dするプログラムはできたんですが… リストのソートが入っているせいか、リスト追加時にコラム0とコラム1のデータがずれてしまいます…。 リスト追加時だけ一時的にソートを停止する為に、ソートの可・不可を設定するための関数って無いですか?
174 スタテックリンク VC.net standard には付いてるけどVC6には無いのか? (インストールしてないだけとか)
180 :
デフォルトの名無しさん :02/06/06 12:17
VCのStdってMFCのソースはついてねーのか?
181 VC.net standard にはMFCソース付いてくる。 VC6はenterprise使ってるので知らん。
>>182 VC.net standard どうよ。安くて魅力的に見える。
個人的には最適化が無いのはあまりマイナスにはならないと思うので。
professionalなんていらない?
>>177 一時的にリストビューのスタイルビットをいじってみるのはどうだろう。
ドラッグが終わったらちゃんと元に戻してさ。
SetWindowLong,LVS_SORT〜を調べてみんしゃい。
VC.net standardについて 普通のアプリケーションを作成するのに機能不足とか全然感じない。 ツールウィザードも一通りある。 VC.netに限らずVS.netはIDEの使い勝手と見てくれが全然違うからかなり戸惑う。 あと.NETのため(?)VS6に比べてメモリとHDを馬鹿食いする。
>>185 レス、thanks!
やっぱ値段以上の機能なんだね。ただ、.NETは重いのが玉に瑕、と。
自分の環境と相談しながら検討してみるよ。
>>185 どれぐらいのスペックがないと厳しいの?
188 :
デフォルトの名無しさん :02/06/06 20:57
VC6.0のヘルプより抜粋 Standard Edition 上級者向け Visual C++ ツール セットを使いなが ら、C++ 言語を学習します。Standard Edition には、Professional Edition の機能がほとんど揃っています。コードの最適化、プロファイラ、 MFC ライブラリの静的リンクの 3 機能だけがありません。
189 :
デフォルトの名無しさん :02/06/06 21:55
単純な電卓ソフトを作れといわれました。 でも作り方がわからないのです。 ソースあるところとか知りませんでしょうか? 何とか解読したいのです… ffftpの作者の電卓は複雑すぎます…
VCじゃなくVBレベルでも作り方わからんか? わからんなら諦めた方がいい。
結局言語ではないと思うんですよ、自分の悩んでいるところ。 ソースどうやるん、と思います... 最後のチャンスをください。
電卓のソースどう書くんでしょうか? コマンドプロンプトでもかけません。
>>189 MFCcalc。VC++6.0のサンプルに入ってる。
有難うございます
195 :
デフォルトの名無しさん :02/06/06 22:10
>>191 俺はお前が分らないヨ!
普段は何語を使ってらっしゃるんですか?
慣れない日本語は使わないほうがいいと思うヨ!
196 :
デフォルトの名無しさん :02/06/06 23:23
>189 >192 >194 誰が何のために君に電卓作れと言ったんだ? レスを見る限りはっきり言って現在の君では193を解読 するのは難しいと思う。 電卓勉強するより理不尽なことを言う奴を説得する勉強 をするべし。
197 :
デフォルトの名無しさん :02/06/06 23:25
電卓[の機能をもったアプリケーション]のソースはどう書くのでしょうか? コマンドプロンプト[上で動作する、GUIを持たないタイプの単純なもの]でも書けません。
198 :
デフォルトの名無しさん :02/06/06 23:41
>>197 俺はてっきりコマンドプロンプト上でプログラムを書くつもりだったのかとおもたよ。
確かにね。でも本人がソースを所望のようだからそれで良いんじゃない?
一応電卓だが、実はOLEサーバーのサンプルという罠。 ちょっとだけ複雑だったかも知れん。 他に思いつかなかったのだ、すまそ。
VBなら初めてVBさわってから1時間くらいでできたよ
>おれは実行ファイルに埋め込まれるデータを消去するソフトが欲しい。 な、なにかやばいものが埋め込まれちゃうんでしょうか?
>>203 ビルドした環境のプロダクトID、ユーザー名、ネットワーク接続があるときは
そのときのIPアドレスなどが、コンパクトなバイナリになって、実行ファイル
に分散して埋め込まれます。
205 :
デフォルトの名無しさん :02/06/07 04:14
はっきり言って電卓ソフトつくるぐらい技量があれば そうとうです
206 :
デフォルトの名無しさん :02/06/07 06:16
>>204 本当なのか・・・!かなりやな感じですね。ひょっとしてウィルス対策かね。
できれば、情報ソースとか詳細キボンヌ。
209 :
デフォルトの名無しさん :02/06/07 09:04
>208 割れ対策だろ。 >206 本当です。電卓は結構高度です。字句解析、再帰、、、設計力が必要です。 世の中のプログラマーは設計もせずtry&errorの力業で何とかプログラムを仕上げるヤツだらけです。
>>209 >字句解析、再帰、、、設計力が必要です。
これはコマンドラインか、エディットボックスで逆ポーランド記法入力する
タイプの電卓でしょ?
GUI電卓は割と簡単に作れそう。VBなら、さらなり。
>>209 >割れ対策だろ。
???ハッキングツールの出所を特定するって言う意味?
>>209 数式入力する程度なら簡単に作れますが。
電卓程度の構文解析で「相当」扱いされてたら身が持たん。
>>209 その程度で高度といわれても・・・(´ー`;)
>211 VC++のピーコだろ。
216 :
デフォルトの名無しさん :02/06/07 11:08
誰か逆ポーランドの電卓製作して公開してみてよ。 >209あたりが製作して公開してくれるとみんな納得すると思うし。 >209もこのままあおられて終わるのも面白くないでしょう。 どうよ、おめぇら
スーパープログラマ求む (なんて募集に応募してみようかな。今日代休でひまだし)
>216 ハァ? それをいうなら簡単を連発してる奴らだろ。
>209 私はあなたの実力を知りたい。 出来るのなら出せるはずでは... 別にVBでもよいですけど。
>>216 検索すれば簡単に見つかりそうなもんを、
「作れ」って煽っても…
オレ様は簡単に作れるがここでそんなもん簡単だと 豪語する連中が先ず作るべきだな。
>>220 209は作れるのかな?
209は本当に楽といっている奴らが作ったら作る機あるのかと、小一時間(略
つーか、そんなことで喧嘩するなYO・・・。 みんな、自分の腕にプライドを持っているからこそ、なのかな・・・。
お前ら電卓程度で何をそんなに熱くなってるんだよ(w
せっかく今スレから
>>2-3 に参考サイトと書籍を載せたんだからちょっとは見て欲しいと思う。
「MFCによるWindowsプログラミング」P485
ダイアログアプリのサンプルとして逆ポーランド記法電卓が載ってる。
MFCスレだしちょうどいいサンプルだと思われ。
227 :
デフォルトの名無しさん :02/06/07 14:06
質問です 一般的に とりあえずC++の言語仕様は知っているかも(はじめてのC++とかで学んだ) なんていう甘い考えの人間がVC++を使ったら何ヶ月くらいで物になると思いますか? Windowsのプログラムは VM_hogeなどのメッセージが来てそれに対応するOnhogeというメンバ関数に処理を記述する などのさわりしか知りません。 1 プログラムできるというのはAPIやクラスライブラリを理解していて、 2 言語仕様を知っていて、 3 開発ツールを使える ことかとおもいますが 3は特に問題ないと思います。 なめきった質問かもしれませんがよろしくお願いいたします。
VM_hogeって何ですか?
>>227 ウイザードが作る雛型をベースに作る程度だったら、
チュートリアルとかサンプルをがんばって勉強すれば
そんなに時間はかからないと思う。
ExcelみたいなUI作るとなると、スゲーたいへん。
>>229 有難うございます
>>228 WM_PAINT OnPaintなどのことです、手抜きしてすみません。
>>227 作る内容によって大幅に変わるでしょうね。
1.Windowsのメッセージベースプログラミングを理解する。
(コンソールベースのプログラムしか作らないなら必要なし)
2.Windowsの流儀(APIの使い方など)を理解する。
(MFCを使えば、場合によっては必要なし、いや必要か。)
3.MFCなどのクラスライブラリなどを理解する。
(使わないなら当然必要なし。)
4.言語ツールに習熟すること。
5.技術情報を引き寄せるための、情報収集力、咀嚼力。あと英語の読解力。
これはそれなりでも可だと思う。
どれもこれも、すぐ習得というわけには行かず、むしろ同時にこれらを
勉強しなければならない、という煩雑さがあると思う。
簡単なアプリを自力で!書けるようになるまでは、数ヶ月見たほうが
良いんじゃないかな。
あと、先生の存在かな。問いに的確に答えてくれる身近な人の存在。
これ大事。学習のペースに影響でかいよ。
初心者のときは、「知っててあたりまえ」なことにも気が付きにくいことって
あるよね?経験者に聞けば一発で分かるという。。。
あとは、ある程度力がつけば、自力で必要な情報を得て鍛えていけると思う。
独学のみでもできるけど、ペースは落ちるだろうね。
でもこういうの聞いてどうすんだろ。 ほかのスレでもたまに見かけるけど 「○○を習得するにはどのくらいかかりますか?」 「○○歳なんですが今からやるにはどのくらいかかりますか?」 とか。 本人の努力次第だと思うし、習得したいなら努力すべきだと思うんだけど。
>232 そういうのは元気付けて欲しいんだよ。 やさしく’あきらめろ’っていってやんな。
一番大事なのは、それを「好きになること」と「やる気」かな。 これがあれば、少々の飲み込みの悪さやテクニックのまずさ・・・は 徐々に克服できると思う。
>>235 それってどうなるんだ・・・。まさか、変な方向に暴走するとか?
ビットマップを印刷しようとしているのですが、一部のプリンタで印刷ができません。 (PS プリンタでERROR:undefined OFFENDING COMMAND:getがでる) 何が問題なのかご教授頂ければ幸いです。 : LPBITMAPINFO lpbi; LPTSTR lpBits = NULL; #define WIDTHBYTES(bits) ((((bits) + 31) / 32) * 4) // Fill in the BITMAPINFOHEADER lpbi = (LPBITMAPINFO) new BYTE[sizeof(BITMAPINFOHEADER)]; lpbi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); lpbi->bmiHeader.biWidth = rect.Width(); lpbi->bmiHeader.biHeight = rect.Height(); lpbi->bmiHeader.biPlanes = 1; lpbi->bmiHeader.biBitCount = 24; lpbi->bmiHeader.biCompression = BI_RGB; lpbi->bmiHeader.biSizeImage = WIDTHBYTES(rect.Width()) * rect.Height(); lpbi->bmiHeader.biXPelsPerMeter = 0; lpbi->bmiHeader.biYPelsPerMeter = 0; lpbi->bmiHeader.biClrUsed = 0; lpbi->bmiHeader.biClrImportant = 0;
続き hBitmap = CreateDIBSection(pDC->m_hDC, lpbi, DIB_RGB_COLORS, (void **)&lpBits, NULL, 0); // DSPメモリ デバイスコンテキスト作成 DCMem.CreateCompatibleDC(pDC); Soh = (HBITMAP)SelectObject(DCMem.m_hDC, hBitmap); // ビットマップ複写 DCMem.BitBlt(0, 0, rect.Width(), rect.Height(), pDC, 0, 0, NOTSRCCOPY); CPrintDialog* dlg = new CPrintDialog( FALSE, PD_ALLPAGES | PD_USEDEVMODECOPIES | PD_NOPAGENUMS | PD_NOSELECTION,//[全ページ]選択,[部数],[ページ指定]使用不能,[選択した部分]使用不能 this); if( !dlg->GetDefaults() ) { return 0L; } DWORD dwSaveFlags = dlg->m_pd.Flags; dlg->m_pd.Flags &= ~PD_RETURNDEFAULT; LPDEVMODE pDM = dlg->GetDevMode(); pDM->dmCopies = 1; pDM->dmOrientation = DMORIENT_LANDSCAPE; pDM->dmFields |= DM_ORIENTATION; pDM->dmTTOption = DMTT_SUBDEV; DCPrn.CreateDC(dlg->GetDriverName(), dlg->GetDeviceName(), dlg->GetPortName(), pDM); TEST*/ DCPrn.ResetDC(lpDevMode); DocInfo.cbSize = sizeof(DOCINFO); DocInfo.lpszDocName = "hogehoge"; DocInfo.lpszOutput = (LPSTR)NULL; DocInfo.lpszDatatype = NULL; DocInfo.fwType = DI_APPBANDING; : if (DCPrn.StartDoc(&DocInfo) != -1) { : DCPrn.StretchBlt(iOffset_X, iOffset_Y, iBitMap_X, iBitMap_Y, &DCMem, 0, 0, rect.Width(), rect.Height(), SRCCOPY); : retval=DCPrn.EndDoc(); } DCPrn.DeleteDC(); :
あるプリンタで印刷できて、あるプリンタでエラーがでるなら、 単にデバイスがStretchBlt()をサポートしてないだけとか。 デバイス依存ぽいし・・・
StretchBlt ってデバイス依存なんですか?!(しらなかった)
デバイス依存ってのはディスプレイのコンパチDCから プリンタDCに書き込むところ。(断言は出来んけど) DIB系の関数つかったほうがいいような。 あと BitBlt() GetDeviceCaps() SetDIBitsToDevice() StretchBlt() StretchDIBits() は使えるデバイス使えないデバイスがあるそうです。 詳しくはGetDeviceCaps()に聞いて下さい
>>242 誤報じゃないのかな?ワード文書とかにIDが埋め込まれるって話は聞いたこと
があるけど。マクロウィルス騒ぎの時に報道されたから覚えてる。
どう見ても要らん文字列がバイナリに埋め込まれてる気がするのは漏れだけ?
釣ろうとしたつもりは無いが、釣れてしまった、と言ってみるテスト... 違う環境でビルドした実行ファイル比較しても、1バイト程度違うことがあるけど、 まったく同じファイルが出来上がりますです。
>>247 OK。まぁ、いい大人になっても割れやってるヤシは(以下略 ってこった。
>>245 バイナリエディタで見ると途中に関数名みたいのがずらずらと。
あれホントにいるのかなと思ったんで。
>249 インポートテーブルじゃろ。ダイナミックリンクする関数名が入ってる。 95持ってたらクイックビューアで見てみるとよろし。
序数リンクで充分じゃねーの、ってことを言いたいのでは?
252 :
デフォルトの名無しさん :02/06/08 13:36
質問。すこしガイシュツなのですが、 ビットマップ絵をなめらかアニメーションでスーーっと動かしたいです。 当然「タイマーイベントを使え」って言うかもしれませんが、 自分なりに調べたのですがわかりません。タイマーについて やさしく教えてくれる人やHP教えてくれる人大募集。お返事待ってます。 今はたとえば A→―――→B地点 の物体の移動アニメ作りたいんだけどタイマーがないので、一瞬で移動して終わりです。 タイマーをつかえばウィンドウズゲームパックみたいなグtラフィカルななめらかアニメ な動きが作れるはずなのですが・・おねがいします。
>>252 SetTimerとKillTimer調べてみ。
254 :
デフォルトの名無しさん :02/06/08 16:09
>>253 なんだか時計とかのやつがたくさんでてきてしまいました。
一応関係るのかな・・
BASICでいうwait10とかあったでしょ。あーいうのだと思うんだけど。
ゲームパックのあのなめらかアニメーションはどうやって実現しているのかな。
なにかサンプルがあればいいんだけどなあ
255 :
デフォルトの名無しさん :02/06/08 16:20
>>254 一応、ここはMFCの相談室なんだけど、言語は何を使用していますか?
CまたはC++ですか?MFCは使ってますか?
あと、SetTimerとかを使用するときには、ウィンドウのメッセージを
一応知っとかなきゃならないけど、その辺は大丈夫?
おそらく何も知らないのだと思われ。 調べたっていってもネットでちょこっと検索しただけだと思われ。 入門書の一つでも買うことを強くおすすめする。
C++です。 ウィンドウで動くドラクエみたいな絵をコマコマごとに 動かすやつができるじょうたいのミニゲームを作れるレベルです。 ただこれが、動きがとびとびなのでこれをスーっとアニメして動かしたい。 入門書は何冊かあるけどこのあたりは書いてない。 あんまり使わないからかな。
絶対載ってるって・・・ あるいは本の対象範囲が違うんじゃないかな。
つーか > なんだか時計とかのやつがたくさんでてきてしまいました。 > 一応関係るのかな・・ とか言ってるようじゃ無理だろ 関係あるに決まってんだろ 時計の針(または数字)を動かすのと絵をコマごとに動かすのは全く同じことじゃねーかよ
タイマの載ってない本って何よ?
262 :
デフォルトの名無しさん :02/06/08 16:39
割と簡単すぎて逆に載ってないのかもね。
>>257 SetTimer(hwnd, // handle to main window
1, // timer identifier
1000, // 1-second interval
(TIMERPROC) NULL); // no timer callback
これでhwndにWM_TIMERメッセージが1秒間隔で届く。
hwndウィンドウプロシージャ内では、こんな風に。
case WM_TIMER: // WM_TIMERメッセージを検出
// 一秒間隔でここに制御が来るので、
// やりたいアニメーションの処理をする。
最後に、タイマーをきりたいときは、KillTimer(hwnd,1);
こんな感じにすること。これは忘れないように。
これで検討がつかない場合は、ウィンドウメッセージのこととかも
ちゃんと勉強したほうがいいよ。
>>259 それが参考になるならスレ違い。
このスレにはMFCって書いてあるだろ。
>>262 KillTimer忘れたらどうなんの?
ウィンドウとともに死滅してくれたほうがうれしいんだけど、してくれないの?
>入門書は何冊かあるけどこのあたりは書いてない。 何冊も持っててタイマが載ってないって絶対金の無駄遣いだって。
ここの掲示板の人は乱暴な人が多いようですね。
>>256 >>260 パソコンばかりやっててモラルがないのかな。
自分が中学の時に微分積分もできねーのか!って先生言われても
相手にとっちゃ常識で屁みたいなものだろうけど
こっちはわかんないよって状態の気持ち考えてみてよ。
今からさぐりさぐり勉強しようと努力はしてるのに。
こんなのもわかんねーのか発言はいやです。
267 :
デフォルトの名無しさん :02/06/08 16:46
>>264 プロシージャがなくなるので、タイマーメッセージ自体はこなくなるけど、
ウィンドウやコンとロールを破棄してる最中のような変なタイミングで
タイマーがくると困るので、適切なタイミングで殺すのが良いんじゃない
かな、くらいの意味。
>>262 あ、超ありがとうございます。
ほんとにありがとうございました。
そーいうのですハイ!
>>266 教えて厨がモラルを語るな。
とりあえずタイマが載ってないという持ってる書籍名あげてみろ。
>>269 いや・・だって相談室だから相談したんだけど・・
質問したらダメなの?ここ。
私みたいなアリん子にそんなムキになっちゃだめだよ。
なにかストレスあるの?
>>270 煽りウザイ。
質問するのは「ちゃんと」調べてもわからなかった人だけの特権。
272 :
262だが :02/06/08 16:53
そんなことで喧嘩すんなよ。
>>270 君の言い分もわかるが、あおるような書き方は
やめてよ。
ごめんなさい。 本は今大学においてあって手元にないです。 月曜日もう一回確認しますね。
>>271 そだね。
がっこの先生は教えるのが仕事、ここは相談室であって教室ではないよ。
276 :
262だが :02/06/08 16:59
あ、学生さんか、勉強がんばってね。 あと、262丸写しじゃなくて、一応、意味を理解したほうがいいと思うので そこんとこヨロシク。
>>262 を丸写しで動くならやっぱりスレ違いだなと言ってみるテスト。
ちょっと質問です。 .netのMFCで吐いたコードって、Win95で動きますか? (MFCはスタティックリンクで)
動かないそうです
>>279 え、マジですか。
IEのバージョン揚げてDLL更新しても駄目なのか…ショボーン。
>>280 どうして、そこまでの結論がでるの?
実際に動かないってこと?
まともなプログラマならそのへんまで推察(早とちり)しないとダメだということを暗に伝えたかったのでは
283 :
デフォルトの名無しさん :02/06/08 18:39
なんだ、厨房祭りは終わりか…。
いや、質問スレで答えないで文句逝ってる奴が厨房。 そんな奴はカキコしねーでいいよ
直後に答えてるのに教えて厨が「わかんない」の連発してるからだろ。 あげくのはてに欲しがってた答えはMFCじゃないし。
SetTimerというキーワードを貰ったら、MSDNで該当個所を読み、タイマー使ってるサンプル見つけてきて 実際にコンパイルして動作を確認するくらいのことはして欲しいなあ。
「MFC SetTimer アニメーション」くらいをぐーぐることもしてほしい。
>>253-254 を見ればわかるが30分くらいしか検索してなくて、
しかも探し方が悪いのかヒット数が多すぎて調べるのが嫌になったのが見え見え。
さらに気になるのはMFCを使ってるかどうかってこと。
>>255 でも聞いてるけどC++を使ってるとは書いてるけどMFCかどうかは答えてないんだよな。
>>259 、
>>268 あたりを見るとに非MFCに思えてならない。
いずれにせよ
>>270 の逆ギレ&煽りの時点で厨決定。
>>288 >さらに気になるのはMFCを使ってるかどうかってこと。
それは俺が悪かったよ、こう書けば何の問題もなかった。
WM_TIMER
↓
CFoo::OnTimer();
以下のやつ、なぜかXYZしか表示されん。なんで? pDC2を全部pDCにかえると、ABCも表示されて、 コピー(BitBlt)先にもABCが表示されるんやけど…? ちなみに VisualC++ .NET void CMemoPp3View::OnDraw(CDC* pDC) { CDC dcMem; CDC* pDC2; dcMem.CreateCompatibleDC(pDC); pDC2 = &dcMem; // pDC2 = pDC; // ここを有効にすると両方かかれる。 pDC2->TextOut(1,1,"ABC"); pDC->TextOut(1,20,"XYZ"); pDC->BitBlt(100, 100, 60, 20, pDC2, 1, 1, SRCCOPY); dcMem.DeleteDC( ); }
>>290 んなもん
>> pDC2->TextOut(1,1,"ABC");
pDC2( = &dcMem )
に描画してるからに決まってるだろ、アフォ?
つーか座標が(1,1)から始まってるみたいなのも激しく萎えるんだが
いや、その後で BitBlt()やってるのに、なんでってことっす。
>>292 ぐふ・・・逝ってくる・・・
行く前に、
dcMemにちゃんとBitmap選択しれ
それと座標は(0,0)から始めてくれ
・・・んじゃ逝ってくる
逝く前にもう一声。 これ試しに作ってるだけやから、座標(1,1)とか適当やけど (0,0)にしなきゃいけない意味あるん? Bitmap選択って何? pDCには普通にテキスト書き込めてるから、 CreateCompatibleDC(pDC)ってやれば、 pDC2はpDCのクーロンみたいなもんやから 特になにもせんでも、書き込めると 思ってたんやけど、そこが、そもそも俺の勘違い? void CMemoPp3View::OnDraw(CDC* pDC) { CDC dcMem; CDC* pDC2; dcMem.CreateCompatibleDC(pDC); pDC2 = &dcMem; pDC2->TextOut(0,0,"ABC"); pDC->TextOut(0,20,"XYZ"); pDC->BitBlt(100, 100, 60, 20, pDC2, 0, 0, SRCCOPY); dcMem.DeleteDC( ); }
>>294 君はまずAPIからやった方がいいんじゃないか?
API勉強するなら、猫でもわかる〜っていう良いサイトがあるぞ。逝ってみれ。
>>294 黄泉の国から帰ってきた
ん〜〜なんつーのかな。
たとえが悪いけど、DCは車で言うエンジンとすると、
CreateCompatibleDCはエンジンだけ複製するわけ。
タイヤやシャーシは自分で選ぶわけ。
CreateCompatibleBitmap( pDC, Width, Height );
使って作ったビットマップをdcMemに選択してやらにゃならんのよ
座標の(0,0)は個人的要望。
なるほど… あっちこっちで出てくる例はビットマップリソースを 貼り付けるやつばっかりで、CreateCompatibleBitmap を使ってなかったんで、分からんかったんやけど、 そういう仕組みだったとは…。 CreateCompatibleDCでpDCに設定されてるすべての要素が コピーされるんやと思ったんやけど違うんやね。 #Unixのforkなみ(これも例えわりぃ〜)に、それを呼んだ #時点で、その時点でのDCに関する情報が全部コピーされ #ると思ってたっす。代わりに逝ってきます。 下でとりあえず動いた。 void CMemoPp3View::OnDraw(CDC* pDC) { CDC dcMem; CDC* pDC2; dcMem.CreateCompatibleDC(pDC); pDC2 = &dcMem; CBitmap bmp; bmp.CreateCompatibleBitmap( pDC, 200, 200 ); CBitmap* pOldBitmap = dcMem.SelectObject(&bmp); pDC2->TextOut(0,0,"ABC"); pDC->TextOut(0,20,"XYZ"); pDC->BitBlt(100, 100, 60, 20, pDC2, 0, 0, SRCCOPY); dcMem.SelectObject(pOldBitmap); bmp.DeleteObject(); dcMem.DeleteDC( ); }
>>297 座標を(1,1)にするか(0,0)にするかって言われたら、
(0,0)で即決なのがC/C++プログラマの正しい姿っしょ。
『個人的要望』なんてヌルいことといわずに、
『C/C++プログラマの総意』ぐらい言ってもバチはあたらんと思うぞ。
>>299 >座標を(1,1)にするか(0,0)にするかって言われたら、
>(0,0)で即決なのがC/C++プログラマの正しい姿っしょ。
それは作るものに応じて変わってくるのでは。わざとやることだってあるし。
見た目、デザイン的にわざとはみださせたい、とかね。
それに問題の本質とは関係ないと思われ。
301 :
デフォルトの名無しさん :02/06/09 11:22
MFCってなに?と、俺も質問してみたりする。 VC++で作るウィンドウズプログラムのことじゃないの?それ以外になんかある? 入門者の赤子の素朴な質問に答えもせず、ただ「こいつは厨房だほっとけ」 とだけ書くだけのは、マルチ重複質問してるのと同レベルだぞ。
MFC使わずにVC++でウィンドウズプログラム作ってますが何か。
>>301 VC++でウィンドウズのプログラムを作る際に使われる、
「便利な機能を集めた、プログラムの部品」のことです。
C++の言語から使用することが出来ます。
「便利な機能を集め」ているため、これを使用すると、開発のスピードが
あがることが多いです。
>301 ライブラリみたいなモンだよ。 クラスライブラリ。APIをラッピングしたのがほとんど つーかAPIの知識なしに使うと危険かも
>>301 だからそれは「MFCとは」なんかを検索した上での質問なのかと。
さらに入門書などは読んだのかと。
調べれば簡単に見つかったりたいていの入門書に書いてあることを
質問するから嫌われるんだよ。
>>305 自分でまず調べるのは最低限必要だが、それでも分からないってことも
多いだろ。
検索ページや本に書いてあることが多い、
「MFCは、Microsoft Foudation Class ライブラリの略でWindowsAPIと
VisualC++がうんぬんかんぬん」といった説明では、まったくの初心者で
は歯が立たない。そんな相手がMFCを幾分でも理解するために、
「まずWindowsAPIとC++やライブラリの概念を覚えろ」とかいうのも酷だ
と思うし。
自分で調べずに質問するのは論外だが、(これは305のことではないが)
質問相手が、調べずに質問していると決め付けている一方的な態度の人
が多いと思うのは俺だけではあるまい。
>>307 俺は別に何も知らない初心者が悪いと言ってるのではない。
ただ、仮にMFCを検索して
> 「MFCは、Microsoft Foudation Class ライブラリの略でWindowsAPIと
> VisualC++がうんぬんかんぬん」
というのが出てその意味がわからなかったとしたら、その文のどこが
わからないのかを書くべき。
(本当に知りたいんだったらわかる文章が出てくるまで検索するか
分からない単語を再検索するのが筋ってもんだと思うけど)
質問者はわからないから質問してるのは承知してるが、それと同様に回答者も
質問者がどの程度まで知ってて何がわからないのかはわからない。
というかこんなこと改めて言うまでも無く、技術系掲示板やMLでは常識だと思うんだが。
優しい人が低姿勢で教えるスレきぼーん
スレタイにわざわざ「MFC限定」と書いてあるのに 全然気にならなかったのだろうかと素朴な疑問。
次からは Visual C++(MFC限定)相談室じゃなくて MFC相談室にすれ
>>308 おっしゃる通り。そちらの言い分はまったく常識的だと思う。
ただ、
>質問者はわからないから質問してるのは承知してるが、それと同様に回答者も
>質問者がどの程度まで知ってて何がわからないのかはわからない。
俺はある程度(雰囲気程度)の理解でも良いなら抽象的な「MFCってなんですか」て
質問もアリだと思う。その場合、答える側としては、「抽象的な質問だから、
だいたいの抽象的な答えで良いんだろうな」という理解でOKと思うが。
(当然、事前に自分で調べて分からなかった場合に限るが)
質問者がその答えでは困るようでは再度「さらに具体的な質問」をしてくるだ
ろう。でもその場合は最初から書いてくれってのは、勿論あるが。
>>312 あぁ、俺もその考え方にほぼ同意だ。結局
> でもその場合は最初から書いてくれってのは、勿論あるが。
に集約されてる気がする。
それで例えば先のタイマーアニメーションの質問者が「さらに具体的な質問」を
してきたかといえばしてないだろうというのが俺の見解。
>>301 に関しては本当に何も知らない入門者なら
>>303 でいいだろうし
C++知ってる程度なら
>>304 の内容でいいだろうし。
ただ、
> VC++で作るウィンドウズプログラムのことじゃないの?それ以外になんかある?
と言ってるようじゃ検索すらしてないんだろうなというのが俺の見解。
314 :
デフォルトの名無しさん :02/06/09 15:27
なんでもありのスーパー初心者向け
ここだけ教えて君マルチOK超初心者!無法地帯VC
スレ作ってはだめなの?つくっちゃう?
用は上級者はここでアホ質問する素人初心者が邪魔なんでしょ?
こっちにとっちゃあ、そんなもんすぐわかるだろ級の内容が
>>301 くんとか素人にとっちゃあマジなわけだ。
別スレだったら問題ないよね?
それってとかすごくくだらない質問スレとか過去ログ読まずに質問スレじゃない? 問題なのは本人にとってその質問がぜんぜんくだらなくないことと、過去ログなんてそもそも眼中にないことだね
>>313 >それで例えば先のタイマーアニメーションの質問者が「さらに具体的な質問」を
>してきたかといえばしてないだろうというのが俺の見解。
いや、
>>254 で結構具体的にしてると思うが・・・。
>BASICでいうwait10とかあったでしょ。あーいうのだと思うんだけど。
>なにかサンプルがあればいいんだけどなあ
とか。それより、このタイマーアニメーションの件を問題にしているとはわか
らなかったよ。MFCの方を問題にしているかとばかり。
>> VC++で作るウィンドウズプログラムのことじゃないの?それ以外になんかある?
>と言ってるようじゃ検索すらしてないんだろうなというのが俺の見解。
これに関しては、検索で得た知識で誤解したってことも考えられるけど・・・。
結局、本当に検索したかは書かなかったら本人にしか分からないし、答えるほう
も自分の見解に基づいて仮説(!=事実)を考えるしかない、という根本的な部
分が問題ということでOK?
>>314 そんなのが許されるのは検索の仕方も知らないような全くのPC初心者が
Windowsの基本的なことを質問するような程度のものだけ。
プログラミングを志す人間なら、ある程度自己解決ができて当たり前。
まあ
>>301 は門外漢がネタで書いてるだけだろ。ただの厨房の可能性も否定できんが。
検索っつっても
>>254 の
> なんだか時計とかのやつがたくさんでてきてしまいました。
> 一応関係るのかな・・
なんてのは検索したうちに入らんよ。
>>317 そうでもない。
学校教育の問題(わからないことがあったらなんでも先生に聞きなさい)で自己解決能力の無い子供は多い。
(かく言う俺も初めのころは目を覆いたくなるような恥ずい質問もした)
こういうのは身をもって身につけていくもんだと思う。
だから俺はくだらない質問を叩くのもいいと思うよ。
(ただし、ただ叩くんで無くて「ぐぐれ」の一言でもつけくわえて)
叩かれたら自分の質問が恥ずいって気づくでしょ。
安息の地を提供すべきではないと思う。
320 :
デフォルトの名無しさん :02/06/09 16:17
,.,.,、,....,、、., 、,、..,_ /i ;'`;、、:、. .:、:, :,.: ::`゙:.:゙:`''':,'.´ -‐i /'、;: ...: ,:. :.、.;;.. .:: _;.;;.::‐'゙ ヽ  ̄ !:::: `"゙' ''`゙ ゙`´´´` ::::::::::::::::} ミ:::::::;;;;、;ノ''''''''ヽ,,,,.;;;;;;;;::::::::::::::) {:::::/ ..、,、,..,,、、., 、,、..,_ / /ヘ ,>、; .'`;、、:、. .:、:, :,.: ::`゙:.:゙:`''':,'.´ -‐i !(`| '、;: ...: ,:. :.、.;;.. .:: _;.;;.::‐'゙  ̄ ________ . ヽハ `"゙' ''`゙ ゙`´´´` / / . `ヘ -====- ,/~ < おまえら喧嘩やめろ。と言ってみるテスト ___. ヽ、  ̄ ̄ ,イ \ |逮 捕| ,,-|::`-、__ _,,-'~:::|ヽ、  ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ _,-' ! ::::::::::::::: / !''‐-、,,_ _,,-''' i \ :::::: / | ~'''‐- -''''~ | /\\ //\ / エビフライ職人
近頃は恥ずいと思わずに逆ギレして煽るようです
,.,.,、,....,、、., 、,、..,_ /i ;'`;、、:、. .:、:, :,.: ::`゙:.:゙:`''':,'.´ -‐i /'、;: ...: ,:. :.、.;;.. .:: _;.;;.::‐'゙ ヽ  ̄ !:::: `"゙' ''`゙ ゙`´´´` ::::::::::::::::} ミ:::::::;;;;、;ノ''''''''ヽ,,,,.;;;;;;;;::::::::::::::) {:::::/ ..、,、,..,,、、., 、,、..,_ / /ヘ ,>、; .'`;、、:、. .:、:, :,.: ::`゙:.:゙:`''':,'.´ -‐i !(`| '、;: ...: ,:. :.、.;;.. .:: _;.;;.::‐'゙  ̄ ________ . ヽハ `"゙' ''`゙ ゙`´´´` / / . `ヘ -====- ,/~ < マジ喧嘩ワラタ。と言ってみるテスト ___. ヽ、  ̄ ̄ ,イ \ |逮 捕| ,,-|::`-、__ _,,-'~:::|ヽ、  ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ _,-' ! ::::::::::::::: / !''‐-、,,_ _,,-''' i \ :::::: / | ~'''‐- -''''~ | /\\ //\ / エビフライ職人
VC初心者スレを復活させるか?
以前あったが落ちたんだよな。
でもなぁ、そういうスレすら探さないかもなぁ。
>>1 にVC系スレの相互リンクでもあれば誘導できるんだろうけど。
325 :
デフォルトの名無しさん :02/06/09 16:33
>>324 【 0から始めるVC++ 初心者 】
で、だれかたてて。
ここみたいな規制はあんまりなしにしてね。
どんな素人でもどんどん質問できるスレで。
ここも規制があるわけじゃないんだけどな。
ここ(というかほとんどの言語スレ)は一般の技術系BBS/MLのスタンスで、
>>325 のは2chぽくほとんどなんでもアリってスタンスかな。
立てるならもうちょい案をつめないか。
>>1 用のテンプレとか。
>>324 >>325 VC++のことだけじゃなく、具ぐるの初心者講座も必要かな。
もしよかったら、書くよ。
重複質問やリファレンスに載ってるような関数の使い方を聞かれても 親切丁寧に教えるスレってことだよな? 回答者の根気が続くだろうか…
明らかにネタと思えるものにもマジレスしなきゃいけないの?
ま、試験的に立ててみるか。 タイトル:【初心者】0から始めるVC++バージョン1 1のテンプレ: 自分は初心者だと思う方や検索しても意味がよくわからなかったという方 のためのスレです。なるべく自分の状況を詳しく書いて質問してください。 回答者も詳しく丁寧に教えてあげてください。
回答者の善意に依存する以上、ネタはカンベンしてホスイ・・・。
>>330 もう少し環境・状況を詳しく書いてください
ってレス大量発生の予感
単に質問に答えるスレではなく、初心者の自立を助けるスレに育ってホスイ。。。
>>332 環境はどのスレでもほとんど書いてないから大丈夫だろう。
状況を詳しく書くことが大事ってことをそこで学んでもらえれば・・・
答えを直に書くんじゃなくて、 その答えにたどり着くまでの道のりを答えるスレにして欲しい MSDNのココにある、とか、ぐぐるでキーワード〜〜で検索すれ、 とか
タイトル:【ようこそ】VC++初心者駆け込み寺 Ver1.0【虎の穴へ】
1に追加希望 質問者3か条 ・エラーのときは必ずそのエラーメッセージを書きましょう ・問題の発生するプログラムを示すときは勝手に編集せず、出来るだけ問題の再現する状態でコピーしましょう ・なぜそう思ったのか、疑問の根拠を書きましょう
いっそのこと1に質問用テンプレも書いちゃおうか。 ------------------ 質問の例 環境:Windows2000+サービスパック2、IE5.5+サービスパック2 ○○をしようと思ったのですが、実行時に「***」という内容の エラーダイアログが表示されて実行できません。 どうすればよいのでしょうか? ○○をしようと思ったのですが、やり方がわかりません。 「××」というキーワードでGoogle検索し、「***」という ところまでわかったのですが、「###」の部分がわかりませんでした。 ○○のやり方を教えてください。 ×××× ○○○ ****** というコードを書いたのですが、2行目で「##」というエラーメッセージが 出てビルドできませんでした。 どうすればよいのでしょうか。 ------------------ って全然2chぽくないな。
なんだか初心者用スレに限らずどの質問スレにもあてはまるような 良テンプレの予感。
>>338 いいね。これも追加してはいかが?
××××
○○○
******
というコードを書き、コンパイル、リンクともにうまくいきました。
しかし、意図した通りに動きません。〜のように動いて欲しいのですが、
どうすればよいのでしょうか。
>>340 最後の
> 〜のように動いて欲しいのですが、
がミソだね。
「意図したとおりに動かない」ばっかり言って、どう意図しているのか書かないやつが多すぎるから。
>>337 の方がシンプルでいいかもしれん。
質問の具体例は2とかに書いた方がいいね。
2以降にgoogleの誰かが言ってた基本的な使い方や
初心者用参考サイト/書籍なんかもあったら便利かも。
>>337 と同じく回答者にも
>>335 のように
・回答する場合はその答えに至るための「コツ」も書いてくれると助かります。
(MSDNのどの項目だとか、何のキーワードでGoogleするとか)
とかあったらいいかもね。
>>345 その他C++/VC++スレ(こことか)へのリンク忘れてる
こっちから誘導するのはわかるがあっちからもリンクいるか・・・?
>>345 ブラボー!
Google,こんなんで良いかな。。。。
検索エンジンGoogleの使い方
http://www.google.com/intl/ja/ プログラム作成で問題が起こったとき、サンプルコードが見たいとき、
あるいはプログラムのアイデアが欲しいとき、検索エンジンは大きな
力を貸してくれます。ここでは、Googleの効果的な使用方法を簡単に
示したいと思います。
Googleでは言葉を使った検索を行いますが、検索後の該当ページが多
すぎたり、関係のないページが大量に表示されたりすることもあります。
こんなときに、以下のような方法で検索対象を絞り込むことが出来ます。
1.AND 検索
AND 検索では、指定した複数の言葉を含むページを検索します。
例)CString CMap
上記のように、複数の言葉をスペース文字で区切って入力します。
この場合、CString と CMap という言葉を両方含むページのみを検索
できます。
2.OR 検索
OR 検索では、指定した複数の言葉のどちらか、あるいは両方を含む
ページを検索します。
例)CString|CMap
上記のように、複数の言葉を|文字で区切って入力します。
この場合、CString と CMap という言葉のどちらか、または両方を含
むページを検索できます。
続き 3.not 検索 not 検索では、指定した言葉を検索対象から除外することが出来ま す。似たような言葉が大量にヒットしてしまう場合に、対象を絞り 込むのに便利です。 例)CString -CStringList 上記のように、複数の言葉の間にスペース文字を入れ、除外したい言葉 の先頭に-文字を付けます。 この場合、CString という言葉は含むが、 CStringList という言葉は 除外するように指定できます。つまり、CString や CStringMap などを 含むページは検索されますが、CStringList を含むページは検索されな いわけです。 4.フレーズ検索 フレーズ検索では、スペース文字を含む言葉を検索できます。 例)"Microsoft Windows" 単に Microsoft Winodws と指定して検索すると、1.のAND検索と同じ になります。つまり、Microsoft と Winodws という文字を両方含むペ ージが検索されてしまいます。そこで、これらを"(ダブルコーテーショ ン文字) で囲みます。こうすることによっで、スペース文字を含む言葉 を検索することが出来るようになります。 以上はごく基本的な機能ですが、これを知っているだけでも検索効率がずいぶ ん違ってきます。まずは習うより慣れろで、実際に試しながら覚えてください。
Googleについてをテンプレに追加。 1がちょっと長いかなぁ。
>>352 1はいいと思うよ。
Googleがちょっと長いかな(スマソ)。改行を少なくしたり、文章アレンジ
してみてください。
例に対するコメントが長すぎるね 1.AND 検索 (例)CString CMap CString と CMap の両方の単語を含むページを検索します 2.OR 検索 (例)CString|CMap CString と CMap のどちらかを含むページを検索します 3.NOT 検索 (例)CString -CStringList CString は含むけれど CStringList は含まないページを検索します 4.フレーズ検索 (例)"Microsoft Windows" Microsoft Windows という文を含むページを検索します スペースや + | などの記号のような特殊な文字も検索できます (C++をキーワードに検索するには "C++" のようにする必要があります)
まだスマートじゃない 改良の余地があると思うんだけど 誰かプリーズ
2以降は少々長くてもいいと思うよ。
>>351 書きまちがい、スマソ。
CString や CStringMap などを含むページは検索されますが
↓
CString を含むページは検索されますが
>>358 リンクはあったほうが良いと思うが、一応スレ内にも説明があったほうが
分かりやすいと思われ。
んでどうなのよ、本当に立てる?
362 :
デフォルトの名無しさん :02/06/10 18:22
作りたいものがない場合はどうすればいいのでしょうか? このまま終わりたくはありません。
おとなしく終われ
>>362 マジレス。
とりあえずその道は諦めた方がいいんじゃないかなぁ?
と思うのは俺だけ??
ここにいる人たちは何でそんなにやる気が持続するのですか? もう死にたい。
ダイアルアップのショートカット作成について教えてください。 早速質問ですが「Windows2000」で「デスクトップ」に「ダイアルアップのショートカット」を 作成したいのですがその方法がわかりません。 ダイアルアップのエントリーを「RasEnumEntries」で取得し デスクトップのフォルダ名を「SHGetSpecialFolderLocation, SHGetPathFromIDList」 で取得するまでは分かりますが、その後どうやって「デスクトップにショートカット」を 作成してよいのか分かりません、ご存知の方ご教授お願いできますでしょうか? 開発環境: Windows2000 VC++6.0
MFC(・∀・)イイ 生APIより分かり易い
>>369 デフォルトの名無しさん返信ありがとうございます。
たしかにショートカット 作成で検索するとたくさんヒットします。
私も先週からネットで検索し色々調べましたが、通常のファイルの
ショートカット作成、インターネットショートカット作成などは
ありましたが、ダイアルアップのショートカット作成を見つけることが
出来ませんでした。唯一見つかったのがWin9x対応のサンプルでした。
Win9xとWin2Kでは、ダイアルアップ情報の格納方法・格納場所が
違ってたりしてだめでした・・
自分で調べて出来ることはやってみましたが、結果は×・・・(TT)
どうやればよいのやら・・・
>>370 >通常のファイルのショートカット作成、インターネットショート
>カット作成などはありましたが、
ほとんど同じだと思う。違いは、IShellLink::SetPathの代わりに
IShellLink::SetIDListでダイアルアップ接続の実体(ショートカ
ットの参照先)を設定することだと思うが。。。はずしてたらすまそ。
>>362 362は仕事でプログラムしてるの?なら興味が向かなくてもなにか簡単な
アプリやクラスをまずは作ってみて、興味がでるようにするのが良いと
思う。プログラムすることを好きにならなければ、やる気を持続させるの
は難しいと思う。個人的には、最初はそういう自己満足も大切なんじゃな
いかな、と思う。
仕事で無いなら、苦労してまでプログラムしなくても良いと思うけど。。。
>>370 Win2000のダイアルアップの場所はIShellFolderを使って
コンパネの下のネットワークとダイヤルアップ接続の下を地道に検索する
とか・・・。
374 :
デフォルトの名無しさん :02/06/10 22:08
初歩的質問で申し訳ないんですが。。 テキストファイルから一行読み出し ->読み出した行を削除 を実装したいのですが削除で悩んでます。 CStdioFile f; f.ReadString(strLine);//削除するフォルダへのパスを読み出し int iCount=strLine.GetLength();//読み出したサイズ f.SetLength(iCount);//削除(??) 当然動かなくて困ってます。 自分で調べますので ヒントだけでもいただけませんでしょうか? よろしくお願いします。
375 :
デフォルトの名無しさん :02/06/10 22:10
376 :
デフォルトの名無しさん :02/06/10 22:11
>>374 1行読み出す度にファイルを書きなおしたりするの?
>>376 一行読み出せたら読み出した
内容(とあるファイルへのパスなんですが)を
処理するだけなので
その度書き直すつもりです。
なにかおかしなことしてたら指摘してもらえると助かります。
376>> 追記です。 パスを読み出すともうファイルに用はないので Closeしてます。 その時読み出したTextのみ消せたら、、 で悩んでます。
>>378 一時ファイルを作るしかないんじゃないかなぁ。
1.オリジナルファイルを複製
2.複製したファイルから一行読み込む
3.複製したファイルから二行目以降をオリジナルファイルに上書きする
4.複製したファイルを削除
>>379 そうなんですか、
残念です。
てっきり
二行目の前にファイルポインタ移動して
一行目を捨てる、、
みたいな方法と思ってました。
参考になりました。
今から実装してみたいと思います。
ありがとうございました。
後日報告いたします。
どうしても一行ずつ処理しないと駄目? 一回EOFまで読み込んどいてポインタ移動して上書きするとか。
みなさん、アドバイスありがとうございます。
>>381 EOFまで全てメモリにいれること考えたら
読み出すファイルが大きくなった時
大量のメモリを食うのでは?と心配です。
テキストファイル読むくらいで
メモリ心配してしまうっていうのは考えすぎで
>>381 さんの言うようにしても大丈夫なんでしょうか?
>>382 メモリが心配になるほど大量のデータを、
読んでは消して、読んでは消して、
なんてやってたらものすごい時間かかりそう。
全て一度にが嫌なら1MBずつ読んでみては?
自己保身age
質問ッ! CScrollViewのスクロールバーを常時出しっぱなしにしたいのです。 ドキュメントが小さいときはCEditのように「つまみ」部分だけ消える、みたいな。 どうしたらよいのでしょうか。
VFC-LINKのメールから必要な情報だけ残して無駄な文章を全て破棄するにはどうすればいいですか?
>>382 余程大きくない限りは大丈夫だと思うけどなあ。
実際のファイルサイズがわからないからなんとも言えないけど。
>>386 すべて削除するか、unsubscribeのメールを
majodormoに送りましょう。
390 :
デフォルトの名無しさん :02/06/12 22:48
Windowsメッセージなどの一覧はどこかで見れませんか? WM_***やAFX_***など。
>390 spy++で
>>390 PC内からWIN32API.CSVを検索してみそ。
>>392 どうもありがとうございます。
知らないものまでたくさん出てきました。
>>391 spy++ではWindowがでているところのメッセージしか見れなくないですか?
spy++はいまいち使い勝手がよくないです...
>>393 いや、メッセージオプションで表示されるメッセージリストのことをいいたかったんだけどサ。
>>393 一応、メッセージオプションの「追加するウィンドウ」項目で
いろいろ選べますよ。親や子、すべてのウィンドウなど。。。
定義されてる一覧を見たかったんだろ
397 :
デフォルトの名無しさん :02/06/13 14:16
あるボタンを押したときに、次のような処理でウィンドウ内のイメージをビットマップに落とそうとしています。 memDC.CreateCompatibleDC(pDC); bm.CreateCompatibleBitmap(&hMemDC, w, h); obm = memDC.SelectObject(&bm); memDC.BitBlt(0, 0, w, h, pDC, 0, 0, SRCCOPY); memDC.SelectObject(obm); GetDIBits(memDC, bm, 0, h, data, ...); 問題のビットマップの落とす処理が、OnDrawの時に渡されるpDCを使って呼び出すととうまく動くのですが、 ボタンを押したときに呼ばれるところから、CClientDC dc(this)として作ったDCを使うとイメージがとれません。 OnDrawに渡って来るのは、CPaintDCですがこれはOnPaintでしか使わないようにMSDNで 書いて有りました。 CClinetDCを作った後に、OnPrepareDCもやってみました。 理由がわからず、途方にくれています。
>397 よく分からんけど、 CreateCompatibleBitmapの引数には &hMemDC(memDCの間違い?)では無くpDCを渡したほうがよくない?と言ってみる
>398 その通りですた。感謝感謝。 でも、なんでか理解できてません。 こんなヘタレに解説して下さる奇特な人の降臨キボンヌ。
397 そもそもthisのウィンドウにクライアントないんじゃない? 枠内、白色になってる?
401 :
デフォルトの名無しさん :02/06/13 15:32
へっ? クライアント領域が存在しないという意味ですか? それとも、thisがCWndとかのサブクラスで無いという意味ですか?
a.cppで作ったクラスをb.cppで使うにはVC++ではどうすればいいんでしょうか?
>>402 いろいろ出来ると思うけど
a.cppをプロジェクトに追加するとか
a.libを作成するか、dllにするとか
make.makファイル作成するとか。
#include "a.cpp"
a.cpp #include <afxsock.h> #include "stdafx.h" namespace Sat { class CHttpServer { public: CHttpServer(); ~CHttpServer(); void Start(); void Stop(); private: CSocket *Sock; }; 〜 } b.cpp using namespace Sat; CTinyhttpApp::CTinyhttpApp() { // TODO: この位置に構築用コードを追加してください。 // ここに InitInstance 中の重要な初期化処理をすべて記述してください。 CHttpServer Ser(); } error C2871: 'Sat' : 存在しないか名前空間ではありません。 error C2065: 'CHttpServer' : 定義されていない識別子です。 error C2146: 構文エラー : ';' が、識別子 'Ser' の前に必要です。 error C2065: 'Ser' : 定義されていない識別子です。 a.cppとb.cppは同じプロジェクトにいます。
ダイアログエディタ使ってるんですけどコントロールパレットが消えちゃいました・・・ どないすればええでしょう・・
406 メニューバーか適当なツールバーを右クリック
ツールバーの適当な余白で右クリック→コントロール
405 a.hに書かれるべきクラスの宣言がa.cppにいるのがふしぎ。 /* b.cpp */ #include "a.h" ・ ・ ・
>>409 解決しました。納得もしました。みなさんありがとうございました。
412 :
デフォルトの名無しさん :02/06/13 17:36
>397 ダイアログベースでボタンを追加して以下のようにしてみますた。 void CTttDlg::OnCapt() { // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください CClientDC dc(this); CDC memDC; CBitmap memBitmap, *pOldBitmap; memDC.CreateCompatibleDC(&dc); memBitmap.CreateCompatibleBitmap(&dc, 100, 100); pOldBitmap = memDC.SelectObject(&memBitmap); memDC.BitBlt(0, 0, 100, 100, &dc, 0, 0, SRCCOPY); dc.BitBlt(0, 101, 100, 100, &memDC, 0, 0, SRCCOPY); } これでボタンを押すと円がコピーできたけど関係ない?
>>399 とりあえず俺の考えを書いておく(経験的なもので裏づけは無い)
CreateCompatibleBitmapは、DCと互換性のあるビットマップを作るだけで、そのビットマップの種類を指定することは出来ない。
互換性さえあれば32bitだろうがパレットだろうがおかまい無しってこと。
んで、現在の仕様は、引数に渡されたDCに選択されているビットマップと同じフォーマットのビットマップを複製するものと思われる。
CreateCopmatibleDCされたばかりのビットマップにはどんなビットマップが選択されてるかわかりゃしない。
(俺の経験では2bitのモノクロビットマップ)
だからCreateCompatibleBitmapに作成したばかりのDCを渡すとうまくいかない、のではないかと予想。
>412 16bppや32bppでカラーの円だと色がおかしくなりませんか? おかしくならないとしても、memBitmapにはモノクロとしてしか格納されていないのでは。 >413 解説ありがとうございます。大変勉強になりました。 MSDN探したら、ずばりのKBがありました。 Q139165 PRB: Memory DC Produces Monochrome Images When creating a compatible bitmap for the memory DC, the handle to the memory DC is used as the first parameter to the call to CreateCompatibleBitmap(). This create a monochrome bitmap because a memory DC created with CreateCompatibleDC() is given a 1x1 monochrome bitmap as its default bitmap. 教訓 screenDC --CreateCompatibleBitmap--> bitmap A | CreateCompatibleDC | V memoryDC --CreateCompatibleBitmap--> bitmap B bitmapAとbitmapBのbppは異なる(screenDCがモノクロで無い限り) サイズはCreateCompatibelBitmapで指定しますね。
>414 それはCDCのオブジェクトが最初から持っているビットマップがモノカラー1×1なのでは?
言語障害ですか?
>>414 お、俺の予想当たってるね
#言うまでもないが414の”2bitのビットマップ”->"1bitのビットマップ"
>416 へ? だから君は今作ったばかりのメモリDCを引数にコンパチなビットマップを作ると モノカラー1×1のビットマップのコピーになるって言ってたよね。だからCClientDCのdcにも懐疑的なんでしょ? >412はCClientDCのオブジェクトでCreateCompatibleBitmapしてるけど別にこれは良いのでは?といいたい。 CDCのオブジェクトでCreateCompatibleBitmapしたのならモノカラー1×1になるんでは?ということ。(>397ではそうしてる) CClientDCはコンストラクタが適切な色深度やフォーマットにしてくれるんだと思ってた。
>418 > CClientDCはコンストラクタが適切な色深度やフォーマットにしてくれるんだと思ってた。 CDCとCClientDCの違い知ってるか? コンストラクタ見たのかと問い詰めたい。
420 :
デフォルトの名無しさん :02/06/14 12:18
>419 いや、知らない。 つーか>412のdcをつかってCreateCompatibleDCするとなんかまずいの?
間違い。「CreateCompatibleBitmapするとなんかまずいの?」です。
>414が勘違いしただけ です。 memBitmap.CreateCompatibleBitmap(&dc, 100, 100); pOldBitmap = memDC.SelectObject(&memBitmap); のDCの指定部分を取り違えました。
デバッグモードでは問題なく動作して、リリースモードでコンパイルすると Xxxx.cpp xxxxview.h(123) : error C2509: 'GetDocument' : このメンバ関数は、'CXxxxView' クラス内で宣言されていません。 とエラーが出る。 CXxxxViewはCViewを継承しているんだからGetDocumentは持ってると思ったんだけど。 引っかかってるのは以下の箇所。 #ifndef _DEBUG // XxxxView.cpp ファイルがデバッグ環境の時使用されます。 inline CXxxxDoc* CXxxxView::GetDocument() { return (CXxxxDoc*)m_pDocument; } #endif 何をやってくれるコードかよくわかんないし、 リリースモードでコンパイルするときには関係ないんじゃないか? と思ってコメントアウトしたらコンパイラは通ったんだけど、 Viewに特定の描画を行ったり、ファイルを読み込もうとしたりすると、例外処理でこけるようになった。 どうしたらいいんだろ。 最近の過去ログを見ていると、デバッグモードでの配布は問題があるみたいだし。
425 :
デフォルトの名無しさん :02/06/14 13:03
GetDocumentはデバッグ時はcppファイル内のものが使われ、リリース時は .h内のものが(インラインで)つかわれます。 クラス内にpublicなメンバ関数として宣言されていますか?
Windowsでプログラムするときは以下の流れでいいのですか? Windowsプログラムの流れ イベントが始まる。 (プログラムが開始される、キーが押されるなど) ↓ WindowsからMessageがくる。 WM_PAINTとか、ON_COMMANDとか、On_LButtonDwnとか ↓ メッセージマップでメッセージと対になっているメンバ関数と結ばれる。 OnPaintとか、OnCommandとか、LButtonDwnとか On**という関数はWM_**というメッセージが。来たら呼ばれる ↓ メンバ関数の中で定義された関数、変数などの処理が呼ばれる。 ↓ 関数の中などの記述が実行される。 (イベントが実行される。)
初心者スレ立てようと思ったらスレ立てすぎって怒られた。
>>427 それは残念。後日改めて・・・でしょうか?
>>425 CXxxxDoc CXxxxView::GetDocument() // 非デバッグ バージョンはインラインです。
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CXxxxDoc)));
return (CXxxxDoc*)m_pDocument;
}
↑これもひっかかる要因になってたので封じてました。
有効にして動かしてみたものの、やっぱり同様の操作でこける……。
どこで転んでいるのか追ってみたものの、ソース上では例外処理は起きなかったっす。
(なんか、変なアドレスとアセンブリの命令っぽいのが
ずらーっと表示されるウィンドウの中で力尽きる模様)
>>430 基本的に、といいますと細部はまだ甘いですか?
まだまだです。
どうもありがとうございました。
またよろしくお願いいたします。
>>429 新しいプロジェクト作って比較してみれば?
だいたい原因は予想つくけどさ。
>>432 その「予想のついている原因」と、
それの解決方法を示してもらえると助かるんだが。
それと「新しいプロジェクトを作って比較」の意味も。
一から作り直すってこと……?
434 :
デフォルトの名無しさん :02/06/15 15:37
クラス,関数はどうやって理解してますか? コマンドみたいに地道に覚えるしかないでしょうか?
436 :
デフォルトの名無しさん :02/06/15 16:23
使うときに覚える。 普段から英単語見たく勉強してるヤツ居る?
>>435 覚えない
慣れるか、たいていは使うときにヘルプ見る
>>436 .NET クラスライブラリは一通り目を通そうと思ってるけど、なかなか膨大だね
こんな処理がしたい クラスライブラリさがす あった 使う なかった ほか探す 探してもなかった 自作する ですか?
使うときにヘルプ見て、そのときについでにそのクラスのメンバ関数一覧も 目を通しておく。(CWndなどはちと多いけど。) そういうことを何回か繰り返せば、「あー、あんな関数あったっけなー」と 思い出したりする。 それくらいでいいんじゃなかろか。
まあだいたいこのクラスにはこんな関数が用意されてるだろうな言う予測がつくからね。
441 :
仕様書無しさん :02/06/16 09:21
ActiveXの質問です。 Aと言うActiveXコントロールと、Bと言うActiveXコントロールを開発して、 htmlへ埋め込み、AとB間で制御を行いたいのですが、どのように連携を取 れば良いでしょうか? たとえば、「Bのコントロールの一部をクリックしたら、Aの表示が変わる」 と言った感じです。 アドバイスお願いします。
BからAの関数を呼ぶ(COM経由)
>>441 AとBはお互いに完全に独立してるんかな?
だとしたら、Mediatorパターンをやればいいんじゃないかな。
>>441 AとBのコンテナとなるCというActiveXを作り、HTMLに貼るってのはどうかな。
もちろん、A,Bのイベントを元に両者をコントロールするのはCです。
>>444 ちなみに、それが「Mediatorパターン」なわけだけど(笑)。
>>445 まぁ、そうだけど、パターン名だけ言っても分かりずらくない?
441の聞いているのは、概念的なことではなく、実際の実現部分だと思ったんだが。
知らなかったんでしょ?プ
448 :
デフォルトの名無しさん :02/06/16 22:22
VC++は.net担って何が大きく変わったのですか?
>>448 MFCが一部変わったのと、コンパイラ、リンカの最適化が強化されたようです。
当方では、作成した実行形式のサイズはVC++6.0より若干大きくなりました。
あと、STLがらみのwarningが出なくなっているとかがあります。
機能面では、個人的には、「あまり変わってない」印象をもっています。
ユーザーインターフェースは大幅に変わりました。移行に戸惑うかも知れません。
VC++6.0に比べると、起動が遅くなり、全体的に重い印象を持ちました。
>>449 ありがとうございます。
そうすると、今までの開発手法は特に変わっていないということでよいのですね。
6で製作したのも.netでコンパイルできると。
でも、そうすると余計に.netってなに?、となりそうです。
>>450 >でも、そうすると余計に.netってなに?、となりそうです。
一応、最大の変更点は、「管理(embeded)コード」をかける事らしいです。これが
どういうものなのか良く知らないので、興味があったら調べてみてください。
他の.net(VB,C#)とも関連のある部分らしいです。違ってたらすまそ。
>>451 embeded?
managedじゃない?
453 :
デフォルトの名無しさん :02/06/16 23:27
マネージは新しい.netの暮らすライブラリ使うときにどうぞ、なんだね。 using namespace system; とか宣言して使えよと。 また新しいクラス覚えないといけないね。
454 :
デフォルトの名無しさん :02/06/17 00:20
ほんと?
455 :
デフォルトの名無しさん :02/06/17 09:09
VC++でWindowsプログラムするときに 面倒だ、本当に面倒だ。 とよく言われます。 何が面倒なのですか? RADになってないからですか?
456 :
デフォルトの名無しさん :02/06/17 09:25
>>455 GUI関係のどうでもいい部分が面倒です。
VC++.netは動作が重いのでちと使いにくいかとSTLがちょっと使いにくくなったのがいまいちかな
459 :
デフォルトの名無しさん :02/06/17 10:14
MSDNの日本語訳部分、うまく理解できますか? 標準日本語使用して翻訳しているからなのか、 房には解釈が難しいところも多々ありますが。 たまに英語ページに飛ぶし。 MSDN理解するのに何かうまい方法はないでしょうか? VC++の理解はMSDNの理解かと、思いますが、どうでしょう。
461 :
デフォルトの名無しさん :02/06/17 10:38
時計や電卓作れる程度のレベルだと超初心者ですか? あと電源落とすくらいとか。
>>459 私も苦手でしたが、無理やり読んでいるうちになれましたよ。
英語部分を無理して読めば、日本語部分の変な訳も(どういう英語から訳されたのか)
検討が付き、意味も分かるようになると思います。
英語はテクニカルタームですので、文法的には中学生レベルで十分と思います。
勿論、コンピューター用語は知っていなければなりませんが。
463 :
デフォルトの名無しさん :02/06/17 10:45
MFCある程度理解してもウインドウの枠などしか出来ないと思いますが この先どうすればよいのでしょうか?
>>463 >この先どうすればよいのでしょうか?
それは、何をしたいのかによって答えも変わってくると思います。
仕事で使うには、Windowの生成以外にもしなければならないことが
たくさんあるでしょうし、趣味でやる場合は無理にMFCを深く理解する必要が
ない場合もあるでしょう。
MFCはウインドウ作成以外にも使用可能ですか?
>>465 もちろんです。データベースのやり取りや、OLEサポート、その他もろもろ。
詳細は、MSDNライブラリのMFCクラスのところを読んでください。
VC++.netでAppWizardが吐いたコードを色分けすることは出来ないでしょうか? 予約語が青くなるような感じです。 無理かな...
469 :
デフォルトの名無しさん :02/06/17 15:24
VC++で電卓を作る場合何が必要でしょうか?
>459 MSDNは英語が読めてもわかりません。関数リファレンス程度にはなりますが >469 まだ電卓の課題やってるんですか?
まだやってますよ
472 :
デフォルトの名無しさん :02/06/17 16:48
質問があります。 ファイル選択ダイアログってありますよね。 その中の真ん中にあるリストなどを自作して CFormViewに埋め込みたいのです。 リストビューにマイコンピュータなどを表示している サンプルなどを知っている方がいたら教えていただけないでしょうか?
474 :
デフォルトの名無しさん :02/06/17 18:58
>>473 さん
ありがとうございます。
しかし、'atlres.h'がありません、
となってしまうのですが・・・・
>>475 デジタル時計ならナントカなったのに...
ダイアログボックスの使い方なんでしょうね、電卓は多分...
VBから入ればよかったカモ。
>>478 サンプル見ましたよ...
ほか探すか...
単なる四則演算電卓だったらデジタル時計より簡単じゃないかい?
>>480 そうなんですか?
こう、発想の貧弱さは悲しいものがあります。
BCBならナントカなりそうなのですが。
(軽く探したらラベルとボタンだけでできそうだし...)
夢は大きくネットワークプログラムしたいのに...ううぅぅ。
>>481 コンソールの電卓なら100行くらいで出来たよ
>>481 発想とかじゃなくてWinの電卓見れば大体必要なものはわかるでしょ?
関数電卓となるとちょっと面倒臭いけど。
リソースエディタでチョイチョイっとそれっぽいコントロール置いて
後はそのコントロールに対するメッセージを処理してあげればいいじゃん?
なんだかいくらサンプル示しても理解できなくて投げ出してるようだが サンプル探すよりサンプル理解できるように勉強する方が先じゃなかろか。
電卓、電卓、で大変です。 XPのアクセス権変更は出来るようになったのになぜ電卓が出来ないんだ... と本当に思うのです。 くそぅ...
なんかネタ臭いな・・・>電卓
>>486 ネタなら冗談抜きで安心なんですけど。
アクセス権などはダイアログボクス使わないのですが、
ダイアログボクスの連動がいまいち分からないのです。
ダイアログボックスの使い方が出ている書籍はないのでしょうか...
”MFCによるWindowsプログラミング”これは今売ってないですよ...
また、確かVC++6.0Standardにはダイアログボックスの使い方等の書籍がついていたはずなのですが、
VC++6.0StandardはVS.NET_MSDNをいい気になって買った後ヤフオクで売ってしまった...
VC++.netStandardには書籍がついているのですか?
488 :
デフォルトの名無しさん :02/06/17 22:52
AccessのマクロをMFCで外部から動かしたいのですが、どうしたらよいでしょうか・・・? サパーリ分からないので、ご存知の方いらっしゃいましたら教えてください m(_ _)m VC++(MFC) -> Access97のマクロ
>>487 そんなときは「VC++ スーパービギナーへじょいjぎえあねおいいお、:l:::::::::::::::
>>489 何やらの本探してみます。
とかいいながら今日はもう寝ますが...
>>487 >ダイアログボクスの連動がいまいち分からないのです
ダイアログと何との連動が分からないのか書かないと、答えるほうもアドバイス
しようがないよ。単にMFCでダイアログボックスを表示することは出来てるの?
ダイアログ上のボタンを押したときの処理(及びその追加方法)が分からないの
か、電卓だから数字の表示が分からないのか・・・。
>>492 時計出すにしたってねえ・・・・・出力はわかるけど入力がわからんとか?
494 :
デフォルトの名無しさん :02/06/18 08:38
495 :
デフォルトの名無しさん :02/06/18 17:08
VC初心者ですけど、よろしくお願いします。 VCからオラクルのストアドファンクションを呼び出して、 値を取得したいのですが、どのようにすればよいのでしょうか?
>>494 いやだから時計しかやってないから電卓での入力がわからんのかなあって。
495 「ATL オブジェクト ウィザード」でオラクル選べばすぐできると思うけど。 (VC Professonal Edition 以上)
>>491 ヒマだったので電卓のサンプル作ってみた。メインコードが250行くらい。
操作はWindows電卓に準拠で整数の四則演算しかできないが、欲しいときは
捨てメアドを用意してね。ただしBUGがあってもノークレームね。
>>499 メアド書いたら送るよ。いつも使ってるメアドはやばいから、フリーの
メアド取得するよろし。
>>500 499のE-mailのところに書いてあります。
よろしくお願いいたします。
送ったよ。しばし待たれい。
504 :
デフォルトの名無しさん :02/06/19 10:09
>>498 産、私にもください。
メルアド公開するのが怖いので、
ここに貼り付けて。
おねがいします。
>>504 ここだと色々ツッコミが入りそうなコードなので勘弁です。
エイヤっで作ったので色々無駄な部分もあるし・・・晒されるのはイヤです(笑)。
MFCはバグがあるからSDKで作った方が良い と言ってる人を見かけたんだけど,それって正しいの?
>>506 ・Win32 API にはバグが無い
・MFC のどこにバグがあるのかわからないので回避できない
・MFC よりもバグの無いコードを書ける
・MFC を使わないことによる生産性の低下は問題にならない
の条件が成り立つならば、正しいでしょう。
>506 Win32APIにもバグは結構あるぞ。
509 :
デフォルトの名無しさん :02/06/19 14:10
VS.NETのIDEの使い方は皆さんどうやって覚えましたか? 書籍はあまり見ません。 ヘルプ見ればいけるか、classwizardやリソースエディタ使えばいいのか。 そのうち林晴比古先生が、はじめてのVisualC++.net でも出すか。 ここクリックするとデバックする、ここクリックするとソリューション閉じる、 とか言うどうしようもない書籍出版か。
使い方はヘルプに書いてあるでしょ。
今頃.net購入。 キャッシュバック間に合うかな?
なんがここの奴らは .net購入だと!? いくらすると思ってんだ 金が無いから泣く泣く2万のvc++6standardを買ったんだぞ俺は。
>>514 今ならVisualC++.netStandardが\13.000-で買える罠(w
>>497 貴重な情報ありがとうございます。
教えてもらって申し訳ないのですが、
私の環境では使えませんでした。。。
517 :
デフォルトの名無しさん :02/06/19 19:55
VC++.netStandardにはVC++6.0Standardに付いていた分かりやすいと思った 書籍は付いているのでしょうか? 6.0についている書籍は初心者にはとてもよいものに見えたのですが、 あれの最新版は出ていませんでしょうか?
最近スレ違いギリギリの話題が多いね
VC6ってそんな便利なもんついてんの?一回も見たことないや・・・・・
えっと、質問です。 SDIアプリケーションを作ってます。 そのアプリからさらに、ツールバーつきの別ウィンドウを出したいのですが、 別ウィンドウは、以下のどの方法を採用すればよいでしょうか。 (a)ダイアログで実装。(しかしツールバーって普通フレームウィンドウにしかくっつかないような?) (b)フレームウィンドウで実装。(アプリケーション内に2つのフレームウィンドウ?どうやって?) (c)別プロセスで別アプリとして起動。(そんな馬鹿な。通信が面倒くさ) なんつーか、どうするのが普通なのかわかりません。 ただツールバーつきの別ウィンドウを出したい、それだけなんですが。 助言ください。
>>521 ダイアログでも、自前でツールバー作れば表示されるよ。
やり方は、ダイアログクラスのメンバに CToolBar メンバを作って
OnInitDialogのタイミングでCreateする。こんな感じ
m_oToolBar.Create( this, WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP, IDC_TB_XXX );
引数は好みに応じて変えてください。
ありがとうございます、しかし‥‥ (1)IDC_TB_XXXにツールバーのリソースをつくり、 (2)ファイル内に CToolBar m_oToolBar; として、 (3)OnInitDialog()で522のCreate()文をそのまま書いてみましたが ダイアログ上にツールバーが表示されません‥‥なぜ? Win2000, VC++6.0。
>>523 ツールバーのサイズが0になってるんじゃない?
確か自分で設定しなきゃいけなかったはず
とりあえずCreateの第3引数の意味を間違えていたっぽいのには気づきました。 だがしかし、LoadToolBar()、SetSizes()、SetHeight() してもツールバーは表示されず‥‥。
よくしらんがShowWindowとUpdateWIndowは送ってみた?
ShowWindow()はためしにしてみました。効果ナシ。 Create()でもVisibleにしてるし。 UpdateWindow()?ちょっと調べてみます。 なにか根本的なこと、見落としてるのかな?
530 :
デフォルトの名無しさん :02/06/19 23:01
ATL COM AppWizardでCOMを作ってるんですが、CFileDialogを使おうとしたら コンパイル時に"定義されていない識別子です"でエラーになりました。これってどうして なんでしょうか? AppWizardで"MFCのサポート"には、チェックを入れました。 ATLとかCOMとかよくわかってません。
SetWindowPos()したら表示されました‥‥。 これでダイアログで逝けます。 レスくれた方、アリガd( ´ー`)ノ
533 :
デフォルトの名無しさん :02/06/20 15:18
Windowsプログラミング初心者です。 Googleや過去スレ,サンプル集等調べたのですが分からなかったので質問させていただきます。 Explorerにプラグインで機能を追加したいと考えているのですが、その実現方法が分かりません。 この辺の説明が詳しく紹介されているHPや書籍等ありましたら教えていただけないでしょうか? 具体的には、一定のタイミングでサーバにアクセスし、情報を取得した上で、アイコンを変化or詳細表示の列追加等で実現したいと考えております。 よろしくお願いします。
534 :
デフォルトの名無しさん :02/06/20 15:29
C++は初めて使うのですが、 A、Bというダイアログを作り、 「AのCというボタンを押すと、Bを表示させる」ということをしたいのですが、 どのようにすればよいのでしょうか? よろしくお願いします。
535 :
デフォルトの名無しさん :02/06/20 15:36
VS.NETについているVC.NETでダイアログを編集しようとしたとき イベントハンドらウィザードを表示させようとすると(ヘルプのとおりに実行) スクリプトエラーと出るんですけど何ででしょうか? その後イベントハンドラウィザードは表示されますが、何も選択できません。 こういうときはどうするのでしょうか?
>>534 1.リソースエディタでダイアログA、Bを作る。
2.Aにボタンコントロールを貼り付ける。これをCという名にする。
3.Cが押された場合に発生するイベントに対応した場所に、
Bを表示させる処理を書く。
これでわからないようだったら、サンプルが載っている本を買いましょう。
本を買う気がないなら、何も言わずにお星さまになって下さい。
537 :
デフォルトの名無しさん :02/06/20 15:43
>>536 レスありがとうです。
いろいろ調べてるのですが、「Bを表示させる処理を書く。」
のサンプルが載っているの本、WEBがなかなか見つからないのです。。。
ここがどうしても分からないので、お星さまになるしかないのかな。。。
VisualC++などのサービスパックはMicrosoftから落とせるのですか? 落とすとしたらどこから落とすのでしょうか? CD来るの待っているしかないのですか?
>>541 情報ありがとうございます。
英語は苦手ですが、今から見てみます。
ありがとうございました。
533 サーバーサイドになるけど <META HTTP-EQUIV="Refresh" CONTENT="60"> タグ使っうかjavascriptでリロードしたほうが簡単だと思うけど。 ActiveXコントロールはクライアントサイドでバイナリが動くから便利は便利 だけどで533的なことやろうと思ったら簡単そうで結構大変。
>>543 ありがとうございます。
やはり難しいんですか...
機能的には単純なのでもしかすると、簡単に実装できるのかと思っていたのですが...
自分でももっと勉強してみます。
>>539 無事に出来ました。どうもありがとうございました。
誰ですか?お星様とか言ってるヤシは。
547 :
デフォルトの名無しさん :02/06/20 19:42
ヘルプ見ていたら Sorry, no topics were found for the selected link. こんなの出てきて先に進みません。 修復の仕方はどうすればいいのでしょうか?
スクリプトエラーが起こるときと起こらないときがあるんですが何ででしょうか? 僕の頭のバグですか? せめてスクリプトエラーが出る理由さえ分かればいいのに。。。
>>532 afxdlgs.hをインクルードしたらうまくいきました。
どうもありがとう〜
550 :
デフォルトの名無しさん :02/06/20 21:15
あるサーバーとのDDE通信が確立した後、何かしらの原因で通信に異常が起こった場合、 復帰する方法はありますか?データを取得する際呼び出すGetDdeDataの前に呼び出す DdeTransactionの戻り値が0になってしまった後、データが正しく読めるまでSleepしながら 繰り返し呼び出すんですけど一向に復帰しません。
551 :
デフォルトの名無しさん :02/06/20 22:04
Accessと通信するDDEサーバアプリをつくっています。 DDEサーバ が起動しているにも関わらず、Accessからの接続がエラーになる 場合があります。 初回の接続(Access->DDEサーバ)は必ずうまくいくのですが、その後、接続が できなくなり、一度できなくなると、DDEサーバアプリを再起動するまで接続が できません。 サーバアプリ側に原因があると思うのですが、どうしてもそれを見つけられない状態です。 DDEのコールバック関数の先頭に MessageBeep(0); と書いて、通信が生じた場合に 音を鳴らすようにしてみたのですが、Accessからの通信要求時、Accessではエラーが生じ、 サーバアプリでは何もおきません(Beepがならない)。 どなたか、お力添えいただけませんでしょうか・・・・・?
>>551 状況が良く分からんのですが、DDEスパイとかでエラーが発生するまでの
DDEメッセージを確認できるのではないでしょうか?もうしてみましたか?
553 :
デフォルトの名無しさん :02/06/21 00:11
MSFlexGridを使っているのですが、質問させてください。 1番上のFixedRowのセルとセルの間の線をドラッグして、セルの大きさを 変えることができますが、そのタイミングで処理をしたいと思っています。 この、「セルの大きさが変わったとき」はどうやって感知したらいいので しょうか。 OnMouseUpとかOnOLECompleteDragとかを試したのですが、 そこには飛んできませんでした。 もしご存知の方おられましたらよろしくお願いします。
554 :
デフォルトの名無しさん :02/06/21 12:33
タスクトレイからTrackpopupMenuで メニュー出したんですがなんだか消え方が変で困ってます。 説明しにくいんですが、 pop->TrackPopupMenu(TPM_LEFTBUTTON,pt.x,pt.y,this); のようにしてるのでメニューの外側クリックしたら消えて欲しい んですが消えません。 いったんメニュー内で右クリックしてアクティブ(?)な状態に してからメニュー外でクリックすると消えます。 第五引数あたりが怪しいと思っていじりまわしてみましたが 変わりません。 どこが間違ってるのでしょうか?
>>555 上手くいきました。
ありがとうございます。
SetFourgroundWindow()
を使うんですね。そんな関数があることすら知りませんでした。
その関数があること知ってから
SetFourgroundWindow&TrackPopupMenu
で検索したら英語版のTrackPopupMenuに乗ってました。
日本語版の方には乗ってなかったので驚きました。
これから英語版の方にも目を通します。
調査不足の質問してすみません。
>>555 さんも答えてくれてありがとです。
557 :
デフォルトの名無しさん :02/06/21 14:00
VCで作成したDLLで DATE型を引数に渡す関数を作ったのですが、 VBからその関数を呼び出すときに、 DATE型はどのように指定したらよいですか?
>>558 レスありがとうございます。
DATEではなく、unsigned intを使うということですね。
試してみます。
。。。。初心者質問で申し訳ないのですが、
unsignedってどういう場合に使う物なのですか?
m(__)m ホントにすいません初心者で・・・
560 :
デフォルトの名無しさん :02/06/21 14:50
リッチテキストの縦書きについて質問です。VC6.0のWin2000です。 ラベルソフトのようなものを作っております。 リッチテキストで縦書きをしたいのですが、Win2000のriched32.dll では無理だということがわかり、Win98用のriched32.dllを EXEと同じフォルダに入れました。すると、ダイアログ内の RichEditコントロールの中ではちゃんと縦書きになりました。 が、それをViewクラスのDCに、自前でFormatRangeやDisplayBandを使って描画 しようとしても、何も描画されません。 横書きの場合は、正常にFormatRange等で描画できます。 縦書きリッチテキストをFormatRangeなどでこちらの指定するDCに描画する場合は、 横書きの時とは違う、何か特別な処理が必要なんでしょうか?
561 :
デフォルトの名無しさん :02/06/21 15:59
warning C4244: '=' : 'int' から 'float' に変換しました。データが失われているかもしれません。 こんな警告が出ます。どうしたらいいですか?コンソールアプリです。 四則演算の計算機プログラムで出ました。
int n; float f = 2.01; n = (int)f;
#include <stdio.h> #include <conio.h> void main() int su1,su2,kekka1; float kekka2; char enzansi; printf("2つの整数と演算子を入力してください\n"); printf("1つ目の値を入力 ="); scanf("%d\n",&su1); printf("2つ目の値を入力 ="); scanf("%d\n",&su2); printf("演算子を入力 ="); scanf("%c\n",&enzansi); if(enzansi == '+'){ kekka1=su1+su2; printf("%d+%d=%d",su1,su2,kekka1); } else if(enzansi == '-'){ kekka1=su1-su2; printf("%d-%d=%d",su1,su2,kekka1); } else if(enzansi == '*'){ kekka1=su1*su2; printf("%d*%d=%d",su1,su2,kekka1); } else if(enzansi == '/'){ if(su2 == 0){ printf("kekka1=0"); } else{ kekka2=su1/su2; printf("%d/%d=4.1%f",su1,su2,kekka2); } } else if(enzansi == '%'){ if(su2 == 0){ printf("計算できません"); } else{ kekka1=su1%su2; printf("%d%%d=%d",su1,su2,kekka1); } } else{ printf("演算子がおかしいです"); getch(); } }
どっかおかしいところを指摘してもらえたらうれしいです。
>>568 それ以外でありますか?
実行して、「演算子を入力=」で、何を入力しても
「演算子がおかしいです」
ってでます
>>569 取りあえず腹が立つほど読みにくいのでswich構文を覚えてくだされ。
つーかスレ違いだろ ここはMFCのスレだぞ
>>565 勘違いだとは思うが、
>>561 には...
> warning C4244: '=' : 'int' から 'float' に変換しました。
> データが失われているかもしれません。
と書いてあるから、f = (int)n; と思う。
ディレクトリの中身を読むにはどうすればイイ?
576 :
デフォルトの名無しさん :02/06/21 21:22
>>567 scanfで'\n"入れてるからでないの?
577 :
デフォルトの名無しさん :02/06/21 21:34
マルチスレッド用に作ったメンバ関数から普通のメンバ関数を呼んだりメンバ変数にアクセスするにはどうしたら良いですか?
>>577 スレッド作る時に、一つくらいは好きなパラメータを渡せるように
なってるはずなので、そこにthisポインタを渡しておいてそれ経由で色々。
普通は構造体へのポインタわたすよね
582 :
デフォルトの名無しさん :02/06/22 14:54
質問です。 class CLine{ public: CLine(int n); ~Cline(); char * buf; } CLine::CLine(int n){ buf = (char *)malloc(n * sizeof(char)); } CLine::~CLine(){ if(buf) free(buf); } main() { CLine *pl = new CLine(0); delete pl; } とやってみたら(実際のソースはもっと複雑ですが…)デバッグエラー、とかになってメモリ解放で失敗しますた。 これをmallocやfreeの部分をnew,deleteにしたらokになりました。 これはc++の合法的なルールなのですか?つまりmalloc系とnew系は 混在させると不都合が起きますか?
>>582 問題ないはず。まさか、malloc() した奴を delete してるとかのオチじゃない
よな。あと、if(buf) free(buf); は、単に free(buf); でいいよ。
>582 VC++6 でやったけど、問題ないよ。 書いてないところがおかしいんじゃないの。 コピーコンストラクタとか代入演算子とか。
すいません、FAQかもしれませんが。 SDIアプリからダイアログを一個出します。 そのダイアログの左肩のアイコンを 変更するにはどうしたらよいのでしょうか。
586 :
デフォルトの名無しさん :02/06/22 16:31
画面キャプチャでカーソルもキャプチャするにはどうするんですか?
>>585 そのダイアログはどういう手順で出してるのでつか?
>>587 リソースエディタでデザインしておいて
メインフレームでメニューのハンドらからDoModal()でつ。
>583-584 サンクス。たぶんmalloc()したやつをfree()したんでしょうね。
>たぶんmalloc()したやつをfree()したんでしょうね。 deleteですた。。鬱。
SendMessage(WM_SETICON, TRUE, アイコンハンドル); でアイコンを変えられるよ。
592 :
デフォルトの名無しさん :02/06/23 03:15
char *p = new char(n); と任意の数nで初期化する場合、deleteするときは配列用(?)のdelete[]を使うのが定石ですか? delete [] p;の様に消すのですか?この場合n=1だったりした場合でも大丈夫ですか? もしそうだとするとdelete p;の様な物はいかなるケースでもdelete [] p;で代用できますか?
>>592 new char(n)なら、必ずdelete p;
new char[n]なら、必ずdelete[] p;
定石も何もない。
あ、そうでしたか。ありがとうございます。
596 :
デフォルトの名無しさん :02/06/23 19:16
MSDN2002/4で標準C++は日本語で読めないのですか?
基本クラスがCFormViewのときの、ピクチャボックスを初期化する方法を教えてください。 プログラムを起動させたときにピクチャボックス内を白で表示したいのですが、OnInitialUpdate() 関数内に記述すればよいと、思ったのですが上手くいきませんでした。どなたかよろしくお願いします
598 :
デフォルトの名無しさん :02/06/24 11:42
>593 > new char(n)なら、必ずdelete p; > new char[n]なら、必ずdelete[] p; new char[n]はdelete pでも問題ないはず。 new int[n]はdelete [] pが普通だけど、これもdelete pで大丈夫だと思ったが。 >583 > あと、if(buf) free(buf); は、単に free(buf); でいいよ。 フントか?
ぜんぜんMFC限定な話題じゃない。
600 :
デフォルトの名無しさん :02/06/24 11:45
あ、FormViewか。
598はレベルが低いと思います。
>>598 こんな奴と一緒に仕事するのは絶対イヤイヤイヤ。
お呼びですか? どっちの話? 583の方はANSI準拠なら大丈夫のようだ。Visual C++でも。 593の方は何か間違ってるか? スレ違いsage
>>604 593の方は、new int[n]はdelete[] pしないとだめです。
何が起こるかというと、一見なにも起こっていないようで、
多くの場合はメモリリークが発生するそうですよ。
>605 デバッグヒープでも確認できますか? delete []と[]が必要になる理由を考えると、基本データ型では不要な気がするがな。
>>606 リークの件に関しては、VisualC++での話です。しかしそもそもC++の
仕様から行くと、結果は未定義だそうです。この件は昔MSJで読んだだ
けなので、リークしているかの確認方法とかはちょっとわからないです。
あ、ちなみに私は602,603ではありません。
基本型の場合は delete の時の [] はなくても一応リークなしに動く。 クラスの場合は [] がないと個々のデストラクタが呼ばれないためリークするケースが多い。 いつぞやのMSDNマガジンOne Point Lesson C++でポールが言ってたよ。 結論としては基本型でもクラスでも [] はちゃんと書けということだったが。
今確認してみたが、 int* i = new int[10]; に対して delete i;とdelete [] i;は同じコードが吐かれてて、 ベクターデストラクターは呼ばれていないぞ。 602と603はレベルがお馬鹿さんということでよろしいか?
>>基本型の場合は delete の時の [] はなくても一応リークなしに動く。 それは、VisualC++固有の動きですか?それともC++の仕様として定義され ているのですか?
>>609 >delete i;とdelete [] i;は同じコードが吐かれてて、
>ベクターデストラクターは呼ばれていないぞ。
これもVisualC++の実装がどうなっているかというよりも、C++の仕様
が未定義なら、使用するのはまずいと思うのですが。
(VisualC++では、たまたま動作していることになるから)
まあ、変な癖は付けないようにしようという事だ。
MFCスレなのでCArray使ってください
>610 608じゃないが。 Visual C++の実装としては、という事。 言っとくけど、delete pの方が良いという事ではないからね。 Visual C++では、new int[10]とかアロケートしたものに関して deleteと[]を付けなくても、それが原因で動かないとかヒープが壊れるという事 はないというだけ。 作法的には、[]は付けたほうが良い。
>>614 それでは、ご要望に答えて(爆)
CArray * pArray = new CArray[10];
delete[] pArray;
・・・おあとが宜しいようで。
598のおかしな部分はまだあるぞ。 >> あと、if(buf) free(buf); は、単に free(buf); でいいよ。 >フントか? free()にNULLを渡しても無視されるだけだからif文は無意味に決まってる。
>>597 プロパティのタイプを四角にして白を指定するんじゃ駄目かい?
>618 MFCだから、正解なんだね。 ANSIでは NULLポインタは NULLではない罠。にも思うけれど(ワラ
622 :
デフォルトの名無しさん :02/06/26 00:36
保守
623 :
デフォルトの名無しさん :02/06/26 18:28
>>498 私も電卓がほしいです。
ソースください。
よろしくお願いいたします。
そろそろ電卓以外の話でもしませんか。
626 :
デフォルトの名無しさん :02/06/26 23:01
SDIアプリを作ろうとしていますが… CHtmlViewから派生させたCXXViewでサイズ変更時に画面がものすごくちらつくのですが、 解消するにはどうしたらいいでしょう? Windows2000 / VC++6.0 SP5 / IE 6
>>626 ViewのOnEraseBkgndでTRUEを返すといいよ。
>>626 クラススタイルのCS_V/HREDRAWを取ると、いいことがあるかも。
631 :
デフォルトの名無しさん :02/06/27 00:32
質問させてください。 AccsessのDBにTableのレコードが1行(AccsessのTableを作成した時に 自動的にできる)の時にGetFieldValue()で特定のフィールドの値を取得できないのですが。 Tableのレコードを追加して2行ある状態なら取得できます。 GetRecordCount()を実行しても1行の時は戻り値が0となってしまいます。 アドバイス、参考書籍などありましたら教えてください。 よろしくお願いします。
>>631 それって単にデータが入ってないからでしょ。
>>629 >>630 レスどうもありがとうございます。
両方試したのですが、CHtmlViewの派生クラスでは変化ナシです。
(
>>630 はPreCreateWindow()内で取り除くんですよね?)
OnDrawで文字を表示させてもまったく反映されず。
Viewの上にIEコンポーネントが乗ってるような???
もうちょっと調べてみますです。
634 :
デフォルトの名無しさん :02/06/27 00:52
>632 レス有り難うございます。 スミマセン。説明が足りませんでした。 一行目のレコードにはフィールドで設定した規定値が入ってます。 ただ、NULLを許可しているフィールドもあるのでそこは空白ですが GetFieldValue()で指定しているフィールドには値が入っています。 レコードを追加すると1行目と同じレコードが追加されるのですが 2行あればGetFieldValue()で値を取ってこれるんです。
>>627 メール送れなかったぞ。メアド違ってない?イタズラならやめてください。
638 :
デフォルトの名無しさん :02/06/27 11:32
CListCtrl、CListViewで通常マウスドラッグ操作での 範囲指定による複数アイテム選択が可能なのですが、 オーナー描画をした場合にこれが出来なくなるのですが (全カラム選択みたいになってしまいアイテムドラッグになってしまう) これを通常どうり範囲指定の処理をさせる方法知りませんか? OnLButonDownで実装する方法でも構いません。 どなたかお知恵をお貸しください。 ※文章では表現がむずかしくて分かりづらい質問でスミマセン
639 :
デフォルトの名無しさん :02/06/27 11:40
LINK : fatal error LNK1104: ファイル "nafxcwd.lib" を開けません。
上のエラーメッセージが出てビルドできません
MFCアプリケーションだと問題は無かったのですが
コンソールにしたら突然出てきました・・・
>>2-3 のへんとエラー番号をMSDNで見ましたがよくわからなかったです
>>639 nafxcwd.libは、MFC スタティックリンクライブラリのデバッグバージョンの
様ですよ。プロジェクトのどこかでMFCを使用していたり、MFCのヘッダを
インクルードしているのではないでしょうか?
643 :
デフォルトの名無しさん :02/06/27 16:31
すみません。 _variant_t に NULL を入れることは出来るのでしょうか? ADOのUpdateメソッドで、SQL Server のフィールドをNULLに したいのですが・・・
>>642 ガーン・・・思いっきりafx.hをインクルードして使ってます(鬱
ごめんなさいありがとう
だった(・∀・;)寝起きなもんでスマソです
646 :
デフォルトの名無しさん :02/06/28 19:28
MFC は Microsoft が出している言語の為、VCL よりも OS 寄りの設計に なっているのは想像できますが、生産性の点で何が VCL に対して上回っ ているのですか?
MFCは言語ではありません。
648 :
デフォルトの名無しさん :02/06/28 19:51
こいつは…MFCの意味ぐらい知ってろ。 MFCってのは、「マジでファッキンなcharacter」だろ。
649 :
デフォルトの名無しさん :02/06/28 19:55
MFC...むふっC
MFC:manko fucks chinko.
651 :
デフォルトの名無しさん :02/06/28 20:01
MFCは、VCLよりも、生産性の点で何がVCL に対して上回っ ているのかが良く分かりません。
この板では何かと比較すると必ずネタスレ化するよな
653 :
デフォルトの名無しさん :02/06/28 20:27
生産性の点に限っての事だけ教えて頂けませんか お願いします。
上回っていないと思います。以上。
655 :
デフォルトの名無しさん :02/06/28 20:32
∧∧ ミ _ ドスッ プッ (´,_ゝ`)┌─┴┴─┐ / つ. 終了 │ 〜′ /´ └─┬┬─┘ ∪ ∪ ││ _ε3 ゛゛'゛'゛
656 :
デフォルトの名無しさん :02/06/28 21:51
暖炉でスマソ。 CRichEditCtrlの派生させたクラスで を使っているのですが、CRichEditCtrl::LimitText は、設定していないのですが、 40KByteくらい以上のファイルを開くと、文字の入力ができなくなります。 'CRLF'は入力できるのですが、それ以外は、入力ができません。 これを解決する方法はありますでしょうか…。それとも無いでしょうか…
657 :
デフォルトの名無しさん :02/06/28 21:52
CRichEditCtrlの派生させたクラスで CMyEdit を使っているのですが、CRichEditCtrl::LimitText は、設定していないのですが、 40KByteくらい以上のファイルを開くと、文字の入力ができなくなります。 'CRLF'は入力できるのですが、それ以外は、入力ができません。 これを解決する方法はありますでしょうか…。それとも無いでしょうか…
658 :
デフォルトの名無しさん :02/06/29 01:50
リソースエディタのダイアログやフォームに置いたコントロールのフォントを 個別に簡単に変える方法はないもんかね?
>>657 LimitTextを設定すればいいんじゃ?
660 :
デフォルトの名無しさん :02/06/30 11:25
>>643 _variant_t value;
value.vt = VT_NULL;
662 :
デフォルトの名無しさん :02/06/30 20:44
>>661 おお、それで逝けるんだ。ありがと。
でもコントロール増やした時とかに元に戻されたりしない?
>>661 >>662 それって、ダイアログのフォントのことだよね?
(下の .rcの場合、6行目)
IDD_TEST_DIALOG DIALOGEX 0, 0, 200, 100
STYLE DS_MODALFRAME | DS_SETFOREGROUND | WS_MINIMIZEBOX | WS_POPUP |
WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "Test"
FONT 9, "MS Pゴシック", 0, 0, 0x1
BEGIN
RTEXT "",IDC_STATIC1,46,47,12,11,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CONTROL "Spin1",IDC_SPIN1,"msctls_updown32",UDS_SETBUDDYINT |
UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_TABSTOP,58,46,8,13
...
コントロール個別のフォントって、CWnd::SetFont() で変えられるけど、.rcいじれば変えられるんかい?
>>663 ダイアログのフォント言うか、コントロール別のフォントね。
ダイアログのフォントはエディタ上で変えられるのにコントロールはSetFont使うのが
めんどくさいなあと(w コントロールが多い時なんかね。
>>664 だから
>>663 は.rcのどこをいじればコントロールのフォントを
個別に変えられるか聞いてるんだよ。
666 :
デフォルトの名無しさん :02/07/02 11:41
MFCでソケットを使った通信を行いたいのですが、 recv()とかsend()とかの関数がインクルードされないみたいです。 どうやったら使えるようになりますか?
#include <afxsock.h> と AfxSocketInit()
どうもありがとう。
669 :
デフォルトの名無しさん :02/07/03 00:01
ガイシュツかとは思うのですが、CTreeCtl でフォントサイズ変えるには どうしたらよいのでしょう? SetFont()で変えるとフォントは変わらず各 アイテムのスペースだけ変更されてしまってスカスカになってしまいマヌ ケなんですが・・・
>>666 CSocket使いなされ。無駄に便利だ。
>>669 CFontをグローバルというかstaticにしてる?
>>671 そのとおりでした。単なるクラスなのをすっかり忘れてました。ありがとう
ございますた。
#SDKとMFCを同時に勉強してるもので完全に混同してました。お恥ずかしい。
673 :
デフォルトの名無しさん :02/07/04 16:01
DOS用のプログラムがあるんですけど、 コマンドを打つ手間を省くアプリを作るのに ・ボタンを押したらCMDを起動して自動的にコマンドを渡して実行 ・出力結果を変数に取得・CMD終了 とさせるにはどうすれば良いですか?
お前らバッチファイルを奨めてあげなさい。
677 :
デフォルトの名無しさん :02/07/05 13:47
vc++って使いづらいような気がするのは俺だけ?
それがこのMFCスレとどう関係があるのか小一時間問い詰める気も起きない。
関係無いのか あっそう、じゃそういうことでいいや。
680 :
デフォルトの名無しさん :02/07/05 20:13
CDialogの派生クラスで、 ビューのOnDraw()のような、一部が描画されたときに 描画しなおすってことをしたいんですができるのでしょうか??
できまふ。
え、AppWizard使ったらデフォルトでOnPaint()が追加されてるはずだけど・・・
>>683 CDialogを単純に派生しただけではでないと思われ。
そりゃClassWizardでWM_PAINTを選択すれば出てくるけど。
あ、新規に派生したのか。 てっきりAppWizardでダイアログアプリを作ってそのダイアログクラスだとばかり・・・
686 :
デフォルトの名無しさん :02/07/06 03:27
OnInitDialog中にフォーカスを設定したり(SetFocus、GotDlgCtrl)、 デフォルトボタンを変える(SetDefID)のって、もしかして不可能ですか? なんか、ことごとく無視されてるっぽいんですけど...
OnInitDialogでreturn FALSE;
VC++経験約半年の半人前です。 VC++でテキスト形式のファイルを作成しました。 このファイルを.doc形式のwordでも使えるようにしたいんですが、 どうしたらいいですか? ちなみにテキスト形式のファイルは罫線とかも自分で編集してます。 これをどーにかしてwordで使えるように保存、次回からはwordでも編集できる ようにできないですか?
>>687 return TRUE; // コントロールにフォーカスを設定しないとき、戻り値は TRUE となります
// 例外: OCX プロパティ ページの戻り値は FALSE となります
こっ、これか〜。このコメント削除してたから気づかんかった。
return FALSEにしたらOKでした。こんな夜更けにありがとう。
txtは何もしなくてもWordで開けるんじゃないの?
>>691 --------------
とか書いたってことじゃないかな。
いずれにせよそのまんまで問題ないんじゃ?
すいません。説明不足でした。 やりたいのは、今はメニューに「保存」ボタンがあるんですが、そこに 「word(で使える)形式で保存」っていうのを追加したいんです。 それを選んだらwordが立ち上がって、という感じなんです。 罫線は692さんの言う通り ------------------ みたいなやつです。 一度txtで保存してwordで開いたら、思った通り、罫線はぐちゃぐちゃで フォントは変わってるはで、うまくいきません。
>>693 OpenOfficeのソースから.docフォーマットの保存部分でも読んでみるとよいと思われ。
MFCウィザードでテーブルゲームをつくってるんですが ほとんどViewクラスにコードを書いてるんです(こんなフレームワークでいいのかな?) ところで、ウィンドウズによくある”ファイル”とか”新規作成”のメニュー を選択するプログラムなんですけど、なんでViewクラスで処理するのですか? 私は、Frameクラスが処理するようなきがするのですが。 (Viewクラスで処理したのは、本を見ながらプログラムしたためです)
>>695 Viewで処理しなくてもいいと思うけど。
以前もどっかのスレ(前スレだったかな?)で同じような質問があったけど、
本は誌面の都合もあるし、説明したいことを拡散させたくないので
そういう書き方する場合もあるよ。
697 :
デフォルトの名無しさん :02/07/06 14:27
俺はviewで処理するのがスジだと思う。 その方が、MDI<=>SDIなんかの時、ちょっと便利なんじゃないか? なんて言ってみる
ViewはI/Fだけにしとけ。 DocかAppで処理すれ。
Viewでしなくてもいいってだけね。 最終的にはソフトによるだろうけど。 新規作成メニューがViewを単にまっさらにするだけなら Viewクラスに書いていいだろうし。
おかげさまですっきりしました。
701 :
デフォルトの名無しさん :02/07/06 20:49
いまだにDOCの使い道がわからない俺。
俺も最初は全部Viewクラスに書いてたなぁ。
703 :
デフォルトの名無しさん :02/07/07 14:16
704 :
デフォルトの名無しさん :02/07/07 21:01
差し支えなければDOCってどんな感じで使うのか教えてホスィ・・・。 俺も全部Viewに書いちゃうんだよね。
>>704 スプリッタウィンドウなどでViewが複数ある場合に
ペイン間でデータをやり取りするときとか。
あーだこーだ、ものができてから色々注文をつける客相手に手抜きアプリを作るとき
>683 684 685 ClassWizardでWM_PAINT出て来るんだ。 ClassWizard使えない状況だからわからんかった。 どーもありがとう。遅レスでスマソ
継続して扱うデータはDocで管理して、 データの入力・表現に伴う揮発性の高いデータは Viewで管理って分け方だろうな。 Viewは同一Docであっても差し替え可能だし。 ちょっと違うが、MSHTMLのHTMLDocumentとかが Docの例としては最適なんではなかろうか。
709 :
デフォルトの名無しさん :02/07/08 21:06
DOCってのはいろんなクラスのメンバ変数とか見れたり書けたりするわけ?
publicにしとけば見れるだろ。
(´д`;;)
privateなメンバを参照できるクラスっていうのも困ると思うんだけど
713 :
デフォルトの名無しさん :02/07/09 08:59
メンバ変数直接見られたくなかったらアクセス関数かけよ。
>>712 そうしなきゃいいだけじゃん・・・。
DocもC++のルールの上で設計されるわけだし。
無条件にprivateが見られるなんてないでしょ。
716 :
デフォルトの名無しさん :02/07/09 22:37
すみません、どうしてもわからないので お聞きしたいのですが。 ダイアログベースのプログラムで 起動直後、メインウィンドウは表示せずに タスクバーにアイコン状態で起動し、 タスクバーからいつでも メインウィンドウ表示できるようにしたいのですが できません。 どうやればいいのでしょうか? OnInitDialog()のなかで ShowWindow(SW_SHOW) をコメントアウトしても表示されてしまうみたいで 見当もつかない状態です。 ヒントだけでもよろしくお願いします。
717 :
デフォルトの名無しさん :02/07/09 22:39
>>716 タスクバーで良ければ、
OnInitDialogでShowWindow( SW_MINIMIZE );
でいけない?
ShowWindow(SW NORMAL) 消して その後に言われたとおりMINIMIZE指定したら メインウィンドウは消えました。 一歩進歩なんですが やはり最小化状態で残ってしまうので これをなんとかしたいです。 SW MINIMIZEの直後にSW HIDEもしてみたのですが 逆にメインウィンドウが表示されてしまいました。 タスクバー以外全く表示させないようにするには ここからどうすればいいでしょうか。
719 :
デフォルトの名無しさん :02/07/09 23:30
>>718 それはタスクバーじゃなくてタスクトレイの事では?
タスクトレイ常駐みたいな感じにするならちょっと面倒くさい。
でも「タスクトレイ VC++」辺りのキーワードで検索すれば
それらしいページは出てくると思うよ。
>>719 すみません、ボケてました!
そうです、タスクバーじゃなくて
タスクトレイのみで起動したいんでした。
すみません。
DocがDOQに見えた鬱だし脳
>>718 タスクバーに出現させたくないのなら、通常のウインドウを
見えない(SW_HIDEな)ウインドウの子にするのが一般的。
いろいろありがとうございます。 とりあえず言われたことを試してみます。 後ほどまた報告いたしますので。
メニューバーをリバーにしたいのだけれどどうすればよいですか? ツールバーや他のコントロールをリバーにバンドするサンプルは 見つかるけど、メニューはどうやればいいのかがわかりませぬ。
725 :
デフォルトの名無しさん :02/07/10 02:53
>>723 モーダレスダイアログにして
ダイアログのプロパティーの可視のチェックをはずせばいいのでは?
726 :
デフォルトの名無しさん :02/07/10 17:08
Ver.2 CFormViewに割り当てられているFormを変えるには、 どうすればいいんですか。
727 :
デフォルトの名無しさん :02/07/10 17:22
('-`)
(。A。)
>>726 デフォルトのフォームはまっさらにしといて新しくフォーム何枚か作って
それ貼り付け&切り替えた方が楽じゃない?
>>724 リバーの中に入っているメニューバーは、実はメニューに見せかけている
ツールバーであるという罠。
>>730 そのメニューに見せかけたツールバーの作り方がわからんのだよ・・・
733 :
デフォルトの名無しさん :02/07/11 13:24
現在MFCを使って独自拡張子のアプリケーションを作っています。 まだ作成途中なのですが、ふと気づくと右クリックの新規作成の中に その独自拡張子のファイルの新規作成ができていました。 確認のために実行したことしかないんですが・・・。 これはどこが問題なのでしょうか?
734 :
デフォルトの名無しさん :02/07/11 13:35
初心者なんですが質問があります。 ドラッグ&ドロップされたフォルダの中身を検索し、サブディレクトリがあれば再帰処理でサブディレクトリ内も検索して全ファイルを表示する。 と言うプログラムを作ったんですが、表示ディレクトリのうち選択したディレクトリだけにしぼって再表示、 と言うのをやろうとしたところで悩んでしまってます。 MFC作法的にはdocクラスに検索内容を保存しておいて、再表示の際にそこから引っ張ってきて表示させればいいのだと思うのですが、 ファイルの総数はわからない状態で、再帰処理のループ中に順次保存用の変数を増やしていく、 と言う感じなんだろうと思うのですがどうやっていいのかよくわかりません。 ディレクトリ、ファイルを分けてソートしてから表示しているので保存用の変数も二種類居るだろうし、こういう場合はどのクラスにどんな変数を用意するとうまく行くのでしょうか? それとも表示し直したいディレクトリ名で再検索する方がいいのでしょうか。 複数ディレクトリ内を選択、表示したいし、選び直しもできるようにしたいので それはあまりうまくないかと思ってるんですが。 うまく伝えられてないかもしれませんが、どなたか教えてください。
735 :
デフォルトの名無しさん :02/07/11 13:46
つまり配列で持つと上限を越えた場合こまるってこと? なら動的に用意するといいよ。リストとか知ってる? 自分で構造体かクラスをつくってファイル名やディレクトリかどうかのフラグをもたせて メンバ関数で登録や削除や参照や破棄が出来るようにすると良いんじゃないかな。 >それとも表示し直したいディレクトリ名で再検索する方がいいのでしょうか。 都度検索でも良いがどのみちそういう検索をしてリストを作成する関数は必要だろう。
>>735 レスどうもです。
えーと、今はビュークラスの関数内でCStringArrayをディレクトリ内のサブディレクトリとファイル用に二つ用意して、
ソート下の後にディレクトリ>ファイルの順で描画させて、その後サブディレクトリ名をこの関数自身に渡して再帰処理させているんです。
この描画する部分をdocクラスの変数に渡してやる処理に変えればいいと思ったのですが、
この変数をどこにどう確保していいのかがよくわからないのです。
構造体の使い方がよくわからないのですが、CStringArrayを二つ含む構造体を作ればいいんでしょうか。
書き忘れてました。 >>なら動的に用意するといいよ。リストとか知ってる? この動的に用意、がよくわからないのです。 多分これが理解できればうまく行くような気がしてるんですけれども。
動的とはnewやmallocなどで用意することです。 複雑になると思います。
>>734 頑張ってDocに木構造の構造体かクラスを作ってくんなまし。
リストだけでも逝けるかもしれんけど。
>>738 CArrayでもなんでも使やいいじゃん。
動的に扱うなら CListクラス, 便利ですよ。
742 :
デフォルトの名無しさん :02/07/15 17:21
MFCでエクスプローラのようなプログラムを作っているのですが TreeViewからListViewにメッセージみたいなものを伝えるにはどうしたら良いですか? 具体的には、エクスプローラでは、右にあるTreeViewに表示されているフォルダを選択すると 左のListViewにフォルダの中身が表示されますよね? この、お互いの連絡のやり取りが分からないのです。 TreeViewのフォルダが選択されたことをListViewに伝えるには、どうしたら良いですか?
743 :
デフォルトの名無しさん :02/07/15 17:31
現在選択されているフォルダの情報はdocに持つようにして、 変更されたら、UpdateAllViewsにヒントを与えてやればよいのでは?
さっそくDocを使う例だね。
745 :
デフォルトの名無しさん :02/07/15 17:40
スプリッタを使わずに、クライアント領域に複数のViewやコントロールを表示するには どのようにすればいいですか。
MDI
OnNotify(....) で TVN_SELCHANGED を捕まえて そこでViewのポインタを得ればいい。 ソースまんまですが参考程度に。 //(2)Viewのポインタを取得する CMyFilerDoc* pDoc = (CMyFilerDoc*)GetDocument(); POSITION pos = pDoc->GetFirstViewPosition(); if (pos != NULL) { CView* pLeftView = pDoc->GetNextView(pos); CView* pRightView = pDoc->GetNextView(pos); //デバックで先に検討つけておいてさらにRTTIでもチェックしてみる CMyFilerView* pMyFilerView = dynamic_cast<CMyFilerView*>(pRightView); if(pMyFilerView != NULL){ pMyFilerView->GetPath(str_comp); } }
748 :
名無しさん@Meadow :02/07/16 12:53
ステータスバーに任意の文字を表示させてます。 ペイン内の文字の右揃え、中央揃えをしたいのですが どうしたらよいでしょう? CStatusBar::SetPaneStyle にはそれっぽい スタイルが無いのですが。
>>748 表示する文字列の前に\tをつけると中央揃え。
\t\tをつけると右揃え。
751 :
デフォルトの名無しさん :02/07/17 10:39
752 :
SetClipboard? :02/07/17 17:59
あのークリップボードに直接書き込むことってできます? たとえば "hoge\0" にしたいとき、Edit::Copy() とかを経由せずに。
つーかMSDNみろよ、、
754 :
デフォルトの名無しさん :02/07/17 19:11
すいません。長方形以外の形をしたダイアログはどのようにして作るのですか?
質問ですー。 CWnd::ScrollWindow() でウィンドウの中身をスクロールさせるんですが、 他にTopMostなウィンドウがある場合、 TopMostなウィンドウの下に隠れてた部分がスクロール表示されないわけです。 これってどうすればいいんでしょ? なにか定石がありますか?
757 :
保守あげだ〜よ :02/07/18 03:07
(`Д´||) あ、あれ??
758 :
名無しさん@Meadow :02/07/18 09:38
リストビューの並び替えをしようとしています。 static int CALLBACK CompareFunc( LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort ); を定義してデバッグモードで監視しているんだけど 関数が呼ばれても常に1,2番目の引数が0なのはなんで? ちなみにitemを挿入するときは m_clist.InsertItem(m_clist.GetItemCount(), sBuf); ってやってます。
すいません。 リストビューじゃなくてリストコントロール。 CListCtrl です。
VC6でソース管理しない方法教えてください。 起動が遅くてむかつきます。
解決。 LV_ITEMにLPARAM lParam;ってのがあったわ。 これに値を入れておいてやればいいのね。
>>760 Visual SourceSafe をアンインストールしなさい。
>>762 みんなのどから手が出るほど欲しがってるソフトなのにね。
764 :
デフォルトの名無しさん :02/07/18 17:04
すみません質問です。ちょっとMFCの領域からはみ出ちゃうのですが...。 GUIを持ったアプリがあるのですが、起動時にあるオプションを付けた場合は、 普通のコンソールアプリとして動作するにはどうしたらいいでしょうか? CWinAppのInitInstance()内で、AllocConsole()をやって、 CreateFile("CONOUT$", ... でハンドルを得て、 文字列を「新規の」コンソールに出力する事は出来たのです。 これを、コマンドプロンプト上から実行した場合に、新規にコンソールを作らず、 普通のコマンドラインアプリの様に、起動したコマンドプロンプト上に 文字列を出力したいのです。 すみませんが、お知恵を拝借出来れば幸いです。
前に似たような質問があったけど、 subsystem指定みてWindows側で処理するから、 そーゆー動作は出来ないのでは、という結論が でてたと記憶している。 プロンプトから実行 / 他から起動 Cnsl 継承 構築する Win デタッチ 〃 しない
ダイアログベースのアプリ. アプリ起動時にテキストファイル読み込み. これってInitInstance()中にコード書く,でよいですか.
>>766 正しいかどうかはともかく、間違ってはいないんじゃない?
あら,OnInitDialog()というのも有りますが こっちの方がいいのかな...
困ってます。Debugモードでは問題なく動作しているプログラムですが、 Releaseモードで実行時にエラーが出てしまいます。 ダイアログに張り付けたリストコントロールのポインタを取得する pList = (CListCtrl*)GetDlgItem(IDC_LIST); という部分でAccessViolationが出ています。 コンパイルの最適化設定は、どちらもデフォルトになっています。 こんなとき、考えられる問題はどのようなことですか?
770 :
デフォルトの名無しさん :02/07/18 22:12
間違ってAPIすれで質問してしまったのでこちらで質問させてください…。 実行するユーザのローカルファイルを検索したいとき、実行ファイルのある フォルダ内だったらCFileFindのFindfile関数を使うとできますが、 ドライブ全体にわたって検索したいときはどのようにすればよいのでしょうか? なにかうまい関数があるのでしょうか?MSDNライブラリは検索などをして いろいろ調べてみたのですがどうも適当な方法が見つかりません。 もし方法を知っている方がいらっしゃったら教えていただけないでしょうか?
findfileには c:\*.mpg とか渡せなかったっけ?
APIのSetCurrentDirectory()でC:\などと指定すれば CFileFindで検索できます。サブフォルダを検索するときは 再帰関数を使って検索します。「再帰・CFileFind」とかで 検索したら出てきますよ。
773 :
デフォルトの名無しさん :02/07/18 22:28
>>769 デバッグん時は実行されるメモリが初期化されるけど、Releaseの時はされない。
初期化してない変数を参照したりしてない?
それと、Releaseでもデバッグ情報を有効にして、追ってみるって作戦もあるよ。
オプティマイズが効いてると、ソースと違う動きをしてるように見えるけどね。
まぁDebugで動いてReleaseで動かないなんて普通に有ることだから、
慣れるしかないね。あとは開発途中で、Releaseのテストをやるといいよ。
んじゃがんばって
>>772 こんなにも早く答えてくれてありがとうございます。
私は初心者中の初心者で、新入社員でVCをやらされて毎日が勉強の連続です。
みなさんの質問を読んでるだけでも勉強になります。
早く質問する側ではなく質問に答えられる側になりたいです。
ありがとうございました。
CFile f; CFileException e; if( !f.Open("duo.txt", CFile::modeRead, &e ) ) { #ifdef _DEBUG afxDump << "File could not be opened " << e.m_cause << "\n"; #endif } ファイルの読み込みがわからない.いろんなサイトにいろいろ書いてあるが, Read()の使いが...えーと,えーと, ファイルのサイズが大きくても(数百K)うーんと, いっぺんに読み込むんだと思うけど...
>>773 ありがとうございます。変数周りから絞り込んでみようと思います。
>>774 私も初心者です。あなたと同じように今年の春からVC++で
プログラミングを始めました。3ヶ月目で分からないことだらけ。
変数とか関数の意味が分からないところから始めましたよ・・・
お互いがんばりましょうね。
とりあえず、今日は帰れないな・・・うう・・・
>>775 ねぇ、ヘルプは見たの ?
-----------------
virtual UINT Read( void* lpBuf, UINT nCount );
throw( CFileException );
戻り値
バッファに転送されたバイト数を返します。すべての CFile クラスで、
ファイルの終わりに到達したときの戻り値は nCount よりも小さいこと
に注意してください。
引数
lpBuf
ファイルから読み出したデータを受け取るための、ユーザーが用意した
バッファへのポインタ。
nCount
ファイルから読み出す最大バイト数です。テキスト モード ファイルで
は、キャリッジ リターンとラインフィードの組は、1 文字と数えます。
解説
CFile オブジェクトに関連付けられたファイルからバッファにデータを
読み出します。
------------------------
いったい、何がわからんのか ?
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); } っていうアサートが出てます・・・でも意味が分かりません。 つまりどういうことなんでしょうか?教えてください!
つまり、このウインドウ(this window)が 有効ではないということです。 原因は、thisが有らぬ方向を指していたり、m_Wndが 破壊されていたり、単にCreateを忘れていたり、 すでにDestroyしていたり、多岐に渡ります
>>775 の続きで
CString str;
f.Read(&str, f.GetLength());
を書いたら,デバッグしたらdebag assertion fail...
これ,なんか辺だからなんだろうがいったい...
>>779 ありがとうございます。詳しく調べてみると、1回目のアクセスは成功して
次のアクセスで問題が出ていることが分かりました。その間にthisポインタに
何が起こっているか、詳しく調べてみようと思います。
あぁ・・最終電車が・・・もうあきらめよう・・・
ダイアログボックスにあるボタンをクリックするとスレッドが作成され、 そのスレッドから投げられたメッセージを受け取って、 ダイアログボックスに張り付けられたのリストコントロールを更新する というようなプログラムを作っています。 スレッドを作成する際に、ダイアログボックスへのthisポインタが 失われてしまうとかなんとか・・・そしたらコントロールはどうやって 扱えばよいのでしょう??
サブスレッドにhwnd(またはそれを含む構造体へのポインタ)を渡し、 サブスレッドからそのhwndへユーザ定義メッセージを投げて、 そのメッセージハンドラでコントロールを扱う。
>>783 そうか!!thisポインタじゃなくて、hwndを使うんですね!
やってみます!ありがとう!!
LRESULT SendMessage( HWND hWnd, // 送信先ウィンドウのハンドル UINT Msg, // メッセージ WPARAM wParam, // メッセージの最初のパラメータ LPARAM lParam // メッセージの 2 番目のパラメータ SendMessage(hwnd,WM_USER_MESSAGE1,(WPARAM)pMyStruct,0); ですよね・・・なぜだかCWndのSendMessageと思われて 引数がおかしいとか言われます。 かなーり初心者的な事を聞いているのは承知ですが・・・ わかんないです・・・。教えてください。
::SendMessage(〜);
787 :
デフォルトの名無しさん :02/07/19 04:52
すみません、お聞きしたいのですが。 ダイアログアプリで 起動処理中->待機状態 この流れ出 待機状態になったということを 検知できるMessage、または関数などありませんか? なにがしたいのかといいますと、 起動したら一瞬ウィンドウが表示されて 直後に最小化->タスクトレイへ格納 という流れをしたいのですが困ってます。 低レベルな質問で申し訳ないですがよろしくお願いします。
最近暑いから汗でファンデ浮いちゃって大変。
789 :
デフォルトの名無しさん :02/07/19 11:46
質問です。 MFC標準の CPrintInfo を使って印刷しようとしているんですが、 デフォルトの印刷方向を横にしたいのです。 プリンタに依存しない方法ってありますか? 環境は VC++6.0 です。
>>789 CWinApp::GetPrinterDeviceDefaults()
791 :
デフォルトの名無しさん :02/07/19 17:00
>>787 WM_INITDIALOGで最小化(かSW_HIDE)すればいいと思うが、
明示的に一瞬表示されて欲しいのなら、
WM_INITDIALOGでSetTimerして適当な時間を(1秒とか)あけてから最小化したらどうか。
>>788 pFace->RedrawWindow();
792 :
デフォルトの名無しさん :02/07/20 09:49
クラスのインスタンスが存在したままの状態でthisポインタが 書き換えられるなんてことは、あり得るのでしょうか?
>>792 a::d()
は内部的には
a::d(a *this)
である。
思いっきりローカル変数なんだけど。
796 :
デフォルトの名無しさん :02/07/21 12:06
メンバ関数の削除について VC++6 だと クラス ビュー からメンバ関数を削除できて便利だったのですが, VC++7 では クラス ビュー から削除できませんでした. VC++7 でどうやってメンバ関数を削除するのでしょうか. お手数ですがご存じでしたら教えてください.
MFCの勉強がてらHTTPSサーバに接続して、文字列(html文書等) を取得するクライアントプログラムを作ってみたいのですが、 HTTPSプロトコルをラップしてくれるようなMFCのクラスはあるの でしょうか? Netを検索してもHTTPのソケットの作り方はあるのですが、HTTPS になるとうまく情報が見つかりません。 WinAPIを叩ないといけないのでしょうか? 会社にある環境はVC++6.0なのですが。 教えていただけるとうれしいです。
>>796 確かにメソッドの削除が面倒だ
ねぇどうしよう俺も困ってる
今 CFileDialog を使って以下のような処理を書いてます。 char filter[256] = "すべて (*.*)|*.*|"; CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT, filter, this); POSITION pos; CString s; if (dlg.DoModal() == IDOK){ pos = dlg.GetStartPosition(); while (pos){ s = dlg.GetNextPathName(pos); //処理 } } Win2k(SP2)でテストしてて、どんなに「開く」を選択しても IDCANCELが帰って来ちゃいます(whileの処理にいけない) どうしてなんでしょう? ちなみに選択したフォルダとファイルの合計が15を越えると IDCANCELが帰ってくるみたいです。 15以下だとIDOKがちゃんと帰ってきます。
ぐはぁ 名前が別スレのままだ・・鬱氏。 ついでに age。
自己レス。 char szFileNameBuffer[10240] = ""; dlg.m_ofn.nMaxFile = 10240; dlg.m_ofn.lpstrFile = szFileNameBuffer; 加えたらうまくいきました。
>>802 それで解決にしたようだが、一応解説。
ファイルダイアログがデフォルトで持ってる
バッファの大きさが512(多分)。このバッファに
NULL文字区切りで複数のパスを格納する。終端はダブルNULL文字。
パス長の平均を30〜40文字とすると、15個前後でバッファを使い切ることになる。
ファイルダイアログはバッファを拡張してくれないので結果としてIDCANCEL(失敗)が返る。
なので、バッファを多めに取るのが解決のひとつ。ただし、10240でも選択ファイル数制限なしならば
いつかはオーバーしてしまう。
フックプロシージャを作ってファイル選択が増えるたびに
自前でバッファを拡張していくといくつでも格納できるようになる。
804 :
デフォルトの名無しさん :02/07/24 12:25
質問です。 キー入力を取得するには PretranslatMessageを使用すると思うのですが、 たとえばEDITBOXに文字を1文字入力した場合 PretranslatMessageを使用すると EDITBOX内に文字が描かれる前に処理がされてしまいます。 EDITBOX内に文字が表示されてからその内容をSetWindowTextで取得し 処理をしたいのですが・・・・・
すみません問題を勘違いしていました。 CEdit内に文字を入力した場合は普通に表示し、 空白を入力(spaceキー入力) した場合はCEdit内に空白を表示させずにべつのCEditBoxの処理をしたいのです。 この場合、文字を表示する前に EN_UPDATEメッセージがでるので そこでフックして処理すればいいのだと思いますが、 ON_EN_UPDATE関数ないでキー入力(この場合はスペースが入力されたという情報) はどのようにして取得すればいいのでしょうか?
>>804-805 PreTranslateMessageをオーバーライドして、
スペースの時の処理をしたら、TRUEを返せば
EDITにはキーメッセージが送られない。
>806 あ・・・ なるほど・・・ ありがとうございます
>>803 VisualC++パワフルテクニック(本)に「ファイルダイアログで選択で
きるファイル数を増やす」というのがあって、これだ!と思って見た
ら、何のことはない char szFileNameBuffer[10240] みたいなこと
やってて全然パワフルじゃなくて萎え萎えになったことがあるな。
>>808-809 やっぱ、みんなアレに過剰な期待するよな(w
でも、何十個もユーザにファイル選ばせるようなのは
設計上に問題がある気もしないでもない。
特殊なケース除いては、正しく何十何百ものファイルを
選べるユーザを想定したアプリは怖い。
811 :
デフォルトの名無しさん :02/07/24 18:16
質問です。 MFCを使って中が透明の円って描画できるでしょうか?
813 :
デフォルトの名無しさん :02/07/24 18:39
過去ログにはありませんでした。 SelectObjectでどのようにして指定すれば透明な円にできますでしょうか?
ブラシを透明のブラシか何かにして円を書くんじゃなかったっけ?
メッセージを自分で送信する方法ってありますでしょうか? たとえばマウスの右クリックをしたならばWM_SIZEが送られるようにしたいのですが・・・
PostMessage
820 :
デフォルトの名無しさん :02/07/25 09:13
>>811 SelectObjectでNullBrushで指定するんじゃないのかな?
>>803 それってどのタイミング?
CFileDialog::OnLBSelChangedNotify()
をオーバーライドすればいいのかなぁ?
メインフォームのキャプション(アプリの左上にあるタイトル)を プログラムで変更したいのですがうまくいかないです。 CDialog*b1 = (CDialog*)GetDlgItem(1001); b1->SetWindowText("タイトル"); こんな感じにしてみましたが、アプリケーションエラーとかになりました。
>>822 AfxGetMainWnd()->SetWindowText("ほげ");
824 :
デフォルトの名無しさん :02/07/25 13:23
ドキュメントクラスにデータをClassの形でおきたいのですが、 Structなら簡単にヘッダファイルに記述できますが、 Classの形だとできません。 :public Struct foo{ } ならできますが :public class bar{ } とやるにはどうすればいいでしょうか?
825 :
デフォルトの名無しさん :02/07/25 15:02
別ファイルで作ったクラス MyClassをドキュメントクラスで宣言しようとします。 ドキュメントクラスのヘッダファイルで :pubric MyClass* NewClass; と宣言して Viewクラス内で GetDocument()->NewClass->(メンバ関数); とやるとメモリ関連のエラーが出てしまいます。 ドキュメントクラス内で宣言したクラスのメンバにアクセスする方法を教えてください。
826 :
デフォルトの名無しさん :02/07/25 15:04
827 :
デフォルトの名無しさん :02/07/25 21:16
ogram Files\Microsoft Visual Studio\MyProjects\qq\qq.cpp(19) : error C2440: '=' : 'void *' から 'struct HBRUSH__ *' に変換することはできません。(新しい動作 ; ヘルプを参照) 'void*' から非 'void' 型への変換には明示的なキャストが必要です。
キャストしんさい
829 :
デフォルトの名無しさん :02/07/25 22:44
↑質問の下半分しかなかったのにありがとう。 ついでに cpp(52) : fatal error C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。 ってのがやたらでて,直しようがないんですがどうしたもんでしょう
831 :
デフォルトの名無しさん :02/07/25 22:49
C++理解したらVC++を自由に使いこなせると思っていたけど ぜんぜんわかんね
逆もまた然りだ。
835 :
デフォルトの名無しさん :02/07/26 03:03
CStdioFileがUnicode環境で使い物にならなくて鬱... あと何でもMSDNで throw( CFileException ); みたいに書いてあるけど, 例外投げないものも混じってない?
>>829 プリコンパイル済みヘッダを使用しない。
ドキュメントクラスでクラス宣言して、そこにデータ格納するのはできないのでしょうか? コンストラクタで宣言しても使えませんでした。
>>837 やりたいことはサパーリわからんが、文面通り解釈するとこうか?
class MyDoc : public CDocument
{
public:
MyDoc()
{
// コンストラクタでクラスを宣言してみました
class DataClass;
DataClass* pData = new DataClass(); // error: 定義してないのでインスタンスは作れませんでした
pData->???? = 10 ; // error: どんなメンバがあるのかもサパーリなのでデータは格納できませんでした
m_pData = pData; // なんの役に立つのかは知らないけど一応メンバ変数に保存して置こう
}
void* m_pData;
};
レスありがとうございます。 説明が不十分なようで・・・ #include "Newclass.h" class MyDoc : public CDocument { public: Newclass* myClass = new Newclass[10]; }; って感じで定義して、ViewClassで void CClusteringView::OnButtonRun() [ GetDocument()->NewClass->(メンバ関数); ] という感じで使いたいのですが、文法、もしくは定義の仕方が違うのでしょうか?
すみません ViewClass内では void CClusteringView::OnButtonRun() [ GetDocument()->myClass->(メンバ関数); ] とやってます。
>>839 クラス定義の中で、
>Newclass* myClass = new Newclass[10];
なんてできない。
Newclass* myClass;
と、Newclassのポインタをドキュメントクラスのメンバに加えておいて
コンストラクタなりでnewすれ。
なるほど、レスありがとうございました。 あとはコンストラクタで、 NewClass* myClass = new NewClass[10]; と宣言して ViewClassで GetDocument->myClass[0]->x = 0.0; みたいにメンバにアクセスできますね。 本当にありがとうございました。
たびたびすみません。 コンストラクタで NewClass* myClass = new NewClass[10]; このように宣言するのは間違ってますか?
>>843 コンストラクタ内でそれやったら新しいローカル変数が出来ちゃうでしょ
myClass = new NewClass[10];
だけで十分。
どっかで
delete[] myClass;
するの忘れないように
”クラス”と”オブジェクト”または”インスタンス”の言葉の使い分けをどこかで調べとくと吉
あと”宣言”も
>>844 のようにやったところ
Doc.obj : error LNK2001: 外部シンボル ""public: __thiscall NewClasst::NewClass(void)" (??0NewClass@@QAE@XZ)" は未解決です
Doc.obj : error LNK2001: 外部シンボル ""public: virtual __thiscall NewClass::~NewClass(void)" (??1NewClass@@UAE@XZ)" は未解決です
とのエラーが(TT
>>845 そのエラーはクラスのメンバの実装が書かれてないときに出ると思うけど
ちゃんと書いてるの?
VC++ではなく普通のC++の文法からやったほうがいいと思えてならない
>>846 解決できました。
プロジェクトに入ってなかったようです。
本当にありがとうございました。
848 :
デフォルトの名無しさん :02/07/27 21:01
C***View::OnDraw(CDC* pDC)関数に MessageBox("hello",NULL,MB_OK); と入力したのですがウィンドウの大きさを変化させたりしても 反応がありません。どうしてですか?
何Viewの派生クラスに具体的にどう書いたのか
850 :
デフォルトの名無しさん :02/07/27 21:24
CEditViewから派生させました。 内容は、 void CTestView::OnDraw(CDC* pDC) { CTestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); MessageBox("hrelo",NULL,MB_OK); } です。 コンストラクタとかにMessageBoxをかくと ちゃんとダイアログが出るんですけど、、、
CEditViewはOnDraw呼ばないよ
852 :
デフォルトの名無しさん :02/07/27 21:36
はっ、そうだったのですか。 こりゃどうも失礼しました。 ありがとうございますう。
853 :
デフォルトの名無しさん :02/07/27 21:58
ベターな質問ですみませんが、 線等を再描画して、他のアプリケーションに隠れたときに 消えてしまう現象を直すのにはどうしたらよいのでしょう?
855 :
デフォルトの名無しさん :02/07/27 22:05
EXCELの質問ですみませんが、EXCELにはないイベントを拾いたいのですが・・ AddressOfで関数のアドレスを拾って、うんぬんまで分かりますが・・。 実際に搭載可能なのでしょうか?
856 :
デフォルトの名無しさん :02/07/27 23:31
( CButton * )GetDlgItem( IDB_BUTTON1 )->SetWindowText( "test" ); って書くと、void型からCButton *型には変更できないって言われるんですが、 何かおかしいところがありますか? CWndのGetDlgItemをリソースのIDだけで呼び出したときって、 戻り値はCWnd *型ですよね?
>>856 ( CButton * )(GetDlgItem( IDB_BUTTON1 ))->SetWindowText( "test" );
>>857 ありがとうございます。
ブランクがしばらくあったので、前はできたのに…とか思ってました(^^;)
SetWindowTextならCWndのままでもいいのでは
GetDlgItem(IDB_BUTTON1)->SetWindowText("test"); ということで。
>>859-860 確かに、SetWindowTextならキャストする必要ないですね(^^;)
鍛えなおします。
862 :
デフォルトの名無しさん :02/07/28 00:49
.NETでスタティックリンクした ダイアログアプリなんですが 動作するOS、 必要なランタイムがわかりません。 IE4以上推奨、とかそういう関係です。 解説ページとかあったら教えてもらいたいのですが。 OSはじかにテストしてみるしかないのでしょうか?
>>862 ヘルプ読めよ。そのAPIが使えるOS載ってる。
>>853 。。。。。。。ちょっとは本を読んで勉強しましょう。
MFCのCView系ならばOnDraw。
純粋なWidnowsSDKで組んでいるならば、WM_PAINTで描画しる!!
すみませんがもう一度質問します。 MFCを使って中が透明の円って描画できるでしょうか? 簡単なプログラム例も載せていただくと助かります。
>>866 selectobject使え。
デジャブ。w
NULL_BRUSHに早く気づけ。
>>866 GetStockObjectでNULL_BRUSH、それをSelectObject
Arcでも円が書けるのになぁ(しょぼん
<FORM></FROM>で囲ったフォームオブジェクトと同じ事を、ActiveXコントロールで 行いたいのですが、可能でしょうか? つまり、<FORM>でGET/POSTされる時に、ActiveXコントロールからも、自動的に データが読み出されて、サーバへリクエストが送信されると行った動きです。 宜しくお願いします。
ActiveXでDHTMLに介入すればええんでないかい?
>>870 スクリプト側で解決すべき問題かと思われ
873 :
デフォルトの名無しさん :02/07/29 10:12
Class1(自作クラス)とProjectDoc(ドキュメントクラス)の2つのクラス間を ポインタを使ってデータを相互参照しようと思います。 Class1のメンバに #include "ProjectDoc.h" public: void GetDoc(const CProjectDoc& src); と指定すると ドキュメントのほうで、 #include "Class1.h" :private Class1* myclass; とすると : error C2143: 構文エラー : ';' が '*' の前に必要です。 : error C2501: 'Class1' : 識別名を宣言するのに、型が指定されていません。 : error C2501: 'myclass' : 識別名を宣言するのに、型が指定されていません。 というふうに、 ドキュメントクラスの #include"Class1.h"が無効になってしまうエラーが出てしまいます。 どこかおかしいのでしょうか?
874 :
デフォルトの名無しさん :02/07/29 10:53
VC初心者です。CAsyncSocketを使って非同期ソケットを つくってみたいのですが、OnAcceptでSendをすると -1が帰ってきてしまいます。 OnAccept自体はエラーになっていません。 なぜでしょう?
876 :
デフォルトの名無しさん :02/07/29 11:39
>>875 ヘルプにある戻り値ではありませんでした。
あと、OnCloseとかもまったく呼ばれません。
OnAcceptだけが呼ばれる感じです。
ちなみにコードはこんな感じです。
グローバル
CSockTest s;
CSockTest aptsock;
CSockTest& clsock = aptsock;
ダイアログ
// TODO: 特別な初期化を行う時はこの場所に追加してください。
AfxSocketInit();
if (s.Create(5007) == 0){
MessageBox("Socket Err");
}
if (s.Listen() == 0){
MessageBox("Listen Err");
}
s.Accept(clsock);
派生クラス
void CSockTest::OnAccept(int nErrorCode)
{
if (Send("TEST",4,0) == SOCKET_ERROR){
MessageBox(NULL,"ERR","",MB_OK);
}
CAsyncSocket::OnAccept(nErrorCode);
}
Sendの前にAcceptしてみそ。
878 :
デフォルトの名無しさん :02/07/29 11:53
>>877 Listenの後のAcceptではだめでしょうか?
>>877 できましたー
ありがとうございます。
OnAcceptだからAcceptを呼ぶ
うーん。なるほど。
880 :
デフォルトの名無しさん :02/07/29 14:41
ダイアログアプリでWindowsのシャットダウンを 検知して、終了作業を行いたいんですが どうやって検出すればいいですか? 上手く検索できなかったので 検索ワードでも結構ですので、 よろしくお願いします。
>>880 必ず終了処理ができなければいけないアプリではまずいのでは?
>881 えっそうなんですか? じゃ例えばレジストリや.iniファイルへの書き出し っていうのはその都度行うのが正しいんでしょうか? 終了時にすべて一括して書き出してるのですが。。
終了時に設定をまとめて書き出す アプリがdだときってとっても悲しいね
知らなかった。。 だってどこにも書いてなかった。 結構当たり前の基本だったのね。。 もうそこ」以外全て完成してただけに がっかり。。 書き直してきます。 ありがとうございました。 深く感謝。
>>880 ちなみに、Winがシャットダウンするときは WM_QUERYENDSESSION(だったかな?)
が飛んでくるので、それをハンドリングしてやればよろし。
俺は一括して読み書きしてるがなぁ・・・
>>886 ありがとうございます。
無事解決しました。
ですが、根本的にそのたびに書き出した方が
いいということがわかりよかったです。
すると新たな疑問が湧いてきたのですが
そのたびにiniファイルに書き出すのだとしたら
逆に必要になればその度読み出すべきなのでしょうか?
今までは起動時にiniファイルから読み出し変数へ格納、
終了時に変数とiniファイルに書き出し、
この流れだったんですがその度に書き出すとすると
メモリを使ってまで変数を使用する必要があるのですか?
>>888 そう、どっちかに決めることないじゃん。
ケースバイケースだよ。
ちなみにオレは 読み込みは起動時に一気に変数へ格納 書き換え時は変数とini両方書き換え
今の私の状況的にも >890 のようにするのが一番手っ取り早いんですが そうなるとメンバ変数のメモリ使う意義がわからなくなって。。 次に読み出すときメンバ変数からじゃなくて iniファイルに最新のデータがはいってるわけで iniファイルから読み出せばいいんじゃないかと。 でも理由はないんですがなんとなく不安で。。 ご意見ありがとうです。
書き換えることは少ないからねー
893 :
デフォルトの名無しさん :02/07/29 20:53
COleCurrencyって、使ったことある方、います? 属性にお金を持たせるクラスがあったんで何も考えずにこれを使ったんですが、 どうしてもdouble型との掛け算をしたいって話になって・・・ しょうがないので今は強引にdouble型をlong型に変換して計算してるんですが、 これってもっといい方法とかあるんでしょうか。 それとも、そもそもCOleCurrencyを使う時点で間違ってるんでしょうか。
894 :
デフォルトの名無しさん :02/07/29 23:19
イメージリスト(CImageList)からインデックス別にビットマップを 作成するにはどうすれば良いのでしょうか? ExtractIconではアイコンしか取得できないし、GetImageInfo で取得できるIMAGEINFO構造体のhbmImageを取得しても、 これは指定したインデックスのビットマップではないようなのです。
895 :
デフォルトの名無しさん :02/07/30 11:17
ダイアログベースで、ダイアログにピクチャーでビットマップを貼り付けて その上に図形を描画しようと思っているんですけど、 OnPaint上で描画すると図形が先に描画されてしまって そのあとビットマップが描画されるためビットマップが上になってしまいます。 どうすればいいですかね??
ダイアログ上で、マウス・キーボードが入力されたときの判定を行いたいのですが BOOL CDlg::PreTranslateMessage(MSG* pMsg) { if( ( pMsg->message == WM_KEYDOWN )|| ( pMsg->message == WM_MOUSEMOVE )|| ( pMsg->message == WM_LBUTTONDOWN )|| ( pMsg->message == WM_RBUTTONDOWN ) ) こう書いたところ、WM_MOUSEMOVEが常に通ってしまいます。 正しいマウスの動作チェックのしかたを教えてください。 この質問は、ここに書いてもよいのでしょうか? C言語スレに書いてスイマセンでした。
>>896 おかんが廊下歩くときの振動でマウスが動いてる。揺らすなとお願いすれ。
>>895 ビットマップ描いた後に図形描けば良いじゃん?
メモリDCを使おう。
901 :
デフォルトの名無しさん :02/07/31 11:12
ダイアログの中にプロパティシートを置いて使っているんですが、 プロパティシート上のページと、ダイアログ本体のフォントは同じ MSゴシック9ポイントを指定しているのに(ダイアログリソースの プロパティでフォントサイズを指定しています。)、明らかに 違って見えるんです。 (プロパティページ上のフォントはMSPゴシックのような気がします。) また、ためしに同じサイズのボタンを置いてみましたが、 明らかにボタンの大きさが違ってみえます。 原因ご存知の方いましたらぜひ教えてください。おながいします。
902 :
デフォルトの名無しさん :02/07/31 11:21
>>72 スマン、C#素晴らしいと思うのだが、どっかのスレで
C#よりVBで生成するコードの方がアセンブリ情報が
どうとかで高速らしい。
903 :
デフォルトの名無しさん :02/07/31 13:37
C++万歳
904 :
デフォルトの名無しさん :02/07/31 15:46
IEのメニューバーの右端で回ってるWindowsマークだけど、 あれって、どうやって実現するのですか? 方法をご存知の方、ご教授願います。
905 :
デフォルトの名無しさん :02/07/31 15:49
CAnimateCtrlを使ってるんだよ。AVIファイルが必要だから自分で作る。 MFCIEていうサンプルプログラムがあるから参照してくれ。
>>904 一定時間ごとに別なビットマップを描画していけばアニメーションする。
907 :
デフォルトの名無しさん :02/07/31 15:52
>>905 Thx!
キーワードが分からなかったので、ぐぐれなくて困ってました。
今、ダウソ中です
908 :
デフォルトの名無しさん :02/07/31 15:52
ダイアログアプリで SCMPXのようにWindowをドラッグして移動してる時に 画面端近くならぴたっと画面端に吸い付くようにしたいのですが できません。 考えて↓のように書いたのですが。。 //Window移動中 void CTestDlg::OnMoving(UINT fwSide, LPRECT pRect) { CDialog::OnMoving(fwSide, pRect);//Default CRect rcDT; GetDesktopWindow()->GetWindowRect(&rcDT); if(pRect->top<=rcDT.top+30) { CRect rc(pRect); rc.top=rcDT.top; rc.bottom=rc.Height(); MoveMainWindow(&rc); } } これだとなぜか画面上部に近づくと ドラッグ中のカーソル位置<->画面端に引っ付いた位置 をすごい速さで行ったり来たりして思うように動いてくれてません。 説明難しいですが。。 どこが間違っているのでしょうか?
909 :
デフォルトの名無しさん :02/07/31 16:28
聞きたいことと少し違ったので、再度質問させてください。 MFCIEではツールバー上にアニメーションコントロールが置かれていますが、 これをIEのようにメニューバー上に実装したいのですが、 どうしたら良いか分かりません。
904=909です
911 :
デフォルトの名無しさん :02/07/31 16:39
>908 //Window移動中 void CTestDlg::OnMoving(UINT fwSide, LPRECT pRect) { CDialog::OnMoving(fwSide, pRect);//Default ↑ これって何やってんの? CRect rcDT; GetDesktopWindow()->GetWindowRect(&rcDT); ↑ これって、デスクトップのサイズを取得してる? if(pRect->top<=rcDT.top+30) { ↑ で、上に30ドット以内になったら、ここにきて CRect rc(pRect); ↑ これって、rcの初期値として、pRectを入れてるの? rc.top=rcDT.top; rc.bottom=rc.Height(); ↑ bottomってサイズが入るんじゃないの? pRectに既にサイズが入ってないの? MoveMainWindow(&rc); ↑ これで、更新した値を反映してる。 } }
こんばんわ、908です。 ご指摘の部分はVCが自動作成したものです。 ちなみにコメントアウトしても問題なかったです。 もともとは CDialog::OnMoving(fwSide, pRect); //TODO:ここに独自の処理と追加… みたいな感じのやつです。 よろしくお願いします。
>911 すみません、スクロールバーが一番↓だと思ってて 一番上しか読めてなかったです。 ゆっくり考えてきます。 ありがとうございました。
>>911 考えてきました。連カキコすみません。
GetDesktopWindow()->GetWindowRect(&rcDT);
↑デスクトップのサイズを取得してます。
CRect rc(pRect);
↑わざわざ使う必要は無いのですがちょっと
頭の整理と、見やすくなるので。
rc.bottom=rc.Height();
pRectに既にサイズが入ってるのですが
rc.topをずらしたら同じだけrc.bottomをずらさねば、と。
rc.bottom -= rc.top と同じです。
MoveMainWindow(&rc)
すみません、説明抜けてました。
中身はメインウィンドウのMoveWindowと
コントロールの子ウィンドウを同時に動かすためのものです。
もうかなり迷ってるのですが、
根本的に間違ってるんではないかとも考えてしまいます。
ご存知の方、よろしくお願いします。
VC++のofstreamって、UNICODEに対応していますか? テキストファイルに書き出すと、ただの数字の羅列が出力されてしまいます。
TIFF形式での画像ファイル作成方法を教えてください。 よろしくお願いします。
>>916 そんなクラスはMFCになかったと思うよ
919 :
デフォルトの名無しさん :02/07/31 21:32
MFCよく知らんが > MoveMainWindow(&rc); こんな命令あったっけ。 914は、中学生? その機能を何に使いたいの?
920 :
908=914 :02/07/31 21:44
>こんな命令あったっけ >914 メインウィンドウのMoveWindow + コントロールの子ウィンドウを同時に動かすためのものです。 作りました。 >その機能を何に使いたいの? その機能=MoveMainWindow()なら ↑ 質問の意図は↓ >908 SCMPXのようにWindowをドラッグして移動してる時に 画面端近くならぴたっと画面端に吸い付くようにしたいのですが です。よろしくお願いします。
921 :
デフォルトの名無しさん :02/07/31 22:03
>920 質問するにあたって、アレではダメだろ。 ブラックボックスがあるし。 まずは、親ウィンドウだけを希望通りに動くようにすべきだろ?
>>915 よく見たらすれ違いでした。すみません。
>921 それもそうですね、すみません、 MoveMainWindow =>MoveWindow() と考えてもらって結構なんで よろしくお願いします。
924 :
デフォルトの名無しさん :02/07/31 22:21
MFC知ってる奴来ないみたいだけど、暇だから考えてみる。 RECT系の構造体って、 topとleftに左上の座標が入り、 bottomとrightにサイズが入る場合と、 bottomとrightに右下の座標が入る場合がある。 あのソースのRECT系変数は、それぞれどのタイプ?って、分かってる?
925 :
デフォルトの名無しさん :02/07/31 22:37
SetWindowPosのこと?
>>908 MoveWindowするんじゃなくて、pRectの中身を書き換えてやれば
いいんじゃないのか? ヘルプ慾余命幾許。
これでドーダ! //Window移動中 void CTestDlg::OnMoving(UINT fwSide, LPRECT pRect) { CRect rcDT; GetDesktopWindow()->GetWindowRect(&rcDT); if(pRect->top<=30) { pRect->bottom-=pRect.top; pRect->top=0; pRect->right-=pRect.left; MoveMainWindow(pRect); //または、CDialog::OnMoving(fwSide, pRect); }else { CDialog::OnMoving(fwSide, pRect);//Default } }
あ、 pRect.top; とかは、 pRect->top; の間違いね
>927 ありがとうございます。 pRectの方を調整したらよかったんですね。 全く気付きませんでした。 上手く動作しました。 ただしへばりついたまま離れようとしてくれませんがw これは自分でがんばってみたいと思います。 ありがとうございました。
結局、908は、 >あのソースのRECT系変数は、それぞれどのタイプ?って、分かってる? 分かってなかっただけ。 へばりついたまま動かないのは、当然やな。 Windowをドラッグしてるときの、あの枠組の座標って取得できるのかな。 できなけれは、Windowを最初にクリックしたときのマウスポインタの座標を記録して、 ドラッグでマウスポインタが動いてるときのY座標の差が、30を超えたら、 Windowの座標を、30超えた値にする方法がある。 それか、Windowの移動を自前で設定するときは、Windowの移動を完了したときだけにして、 そのイベントを取得して、そのときの座標がピッタリでなければ、自前で設定する。 暇だといろいろ考えてしまう。
931 :
デフォルトの名無しさん :02/08/01 10:57
すごく初歩的なことだと思うんですが Cで言う構造体宣言やグローバル変数ってどこで作ったらいいんでしょう。。。 C++初心でぜんぜんわかりません...
スレ違い
933 :
デフォルトの名無しさん :02/08/01 12:49
略 CString CXXX::XXX() { 略 } int iGlobal; //←がグローバル変数 void CXXX::INCXXX() { iGlobal++; } int CXXX::GetXXX() { return iGlobal; }
ごめんなさいMFCでのグローバル変数の作り方が わかりませんということです。 933のやり方で、ほかのcppファイルでも変数扱えるんでしょうか。
>>934 externすればな
ていうかMFCでグローバル使うな
お世話になります、がすけと申します。 早速ですが質問させてください。 「rasphone.pbk」の内容を直接編集しても「rasphone.pbk」は、 変更できますが、システム?は即反映されません。 具体的には 1.「rasphone.pbk」に対して「WritePrivateProfileString」を 使用し「接続時にタスクバーにアイコンを表示する」を有効にする ↓ 2.「rasphone.pbk」の編集成功 ↓ 3.編集したダイヤルアップでダイヤルアップを行う ↓ 4.タスクバーにアイコンが表示されない!!←ここが問題 以下のことを行うとタスクバーにアイコンが表示されます a.Windowsの再起動を行う b.エクスプローラでダイヤルアップを開き「最新情報に更新」を行う 「rasphone.pbk」を直接編集後にその内容をシステムに通知?する方法を 教えて下さいお願いします・・・・・ 開発環境 Windows2000 VC++6.0
標準のキーボード入力(PS2 I/F)を無効にするような ことはできますか?
ひっこ抜く。
あの370じゃないんですが、似たような質問いいですか? OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) を利用して、仮想コードがVK_MENU(Altキー)の場合、 Alt+Tabなどを使用させないように無効にしたいのですが、 やり方ありますか?教えてください。
nChar = 0 では、いけませんでした。
VC++勉強をはじめたばかりなのですが MFC使うのと使わないのではどの程度生産性が違いますか? それとMFCを使わない方法を知っていると何か良いことはありますか?
検索で調べたところ、 SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, &i, 0); でシステムキーを無効にできるとあったのですが、ヘルプをみてみると SPI_SCREENSAVERRUNNINGは、Win95のみとのことでした。 現在使用しているPCは、2000なのですが、対応策ありませんか?おねがいします。
>940 DirectInputの関連で、その話題がたまに出てくる。 いそのこと使ってみたら?
945 :
デフォルトの名無しさん :02/08/01 20:47
GetLastError 関数が返したシステムエラーコードに対応するエラーメッセージを取 得しようとして 以下のようなプログラムを埋め込むと、 LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGN ORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL ); MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION ); LocalFree( lpMsgBuf ); error C2660: 'MessageBoxA' : 関数が不正な 4 個の実引数をともなって呼び出され ました。 cl.exe の実行エラー とでてきます。これはなぜ起こるのでしょうか?以前はちゃんとエラーが帰ってきた のですが、 最近はこのエラーがでて使えません。よろしくお願いします。
946 :
デフォルトの名無しさん :02/08/02 00:11
>>945 CWnd::MessageBoxを呼んでるから。
>>945 CWnd::MessageBoxを呼んでるから。
APIを呼びたかったら、::Mess〜とすれ。
948 :
デフォルトの名無しさん :02/08/02 01:09
ボタンにBitmapを貼り付けたくて CBitmapButtonを使って実装しました。 ヘルプにもある通り、OnInitDialogの中で AutoLoad()を呼び出したのですが、 納得できないのが CDialog::OnInitDialog(); より後ろに書くとASSERTのエラーが出てしまいます。 前に書くとエラーが出ないのですが、 ヘルプには前に書けという指示も無かったので、 CDialog::OnInitDialog(); より後ろにAutoLoad関数を書いてはいけない理由がわかりません。 どうしてでしょうか?
ソースみれ
>>944 DirectInputクラスをヘルプと、Googleで少し検索してみたのですが、
ゲームパッド・ジョイスティックで使用するクラスですか?
MSDNには、これも2000・xpには適用されないとのコトでした。
SPI_SCREENSAVERRUNNINGを使ってみたのですが、エラーにはならない
のですが、無効のようですね。
>MSDNには、これも2000・xpには適用されないとのコトでした。 DirectInputが? 2000/XPで使えないと? MSDNのどこにそんなことが?
>>951 勘違いしてました。すいません。この組み合わせだけでした。
Windows XP または
Windows 2000 と DirectX 8.1 SDK
この記事は、DirectInput API を使用している DirectX 開発者を対象としていますが、
Microsoft Windows 2000 と DirectX 8.0 および DirectX 8.0a SDK を
使用している開発者のみに適用されます。この記事は、Windows XP または
Windows 2000 と DirectX 8.1 SDK を使用している開発者には適用されません。
さらにこの記事は 「DirectInput デバッグ時の遅延を防ぐ方法」 でした。 あせりすぎでした。すいません。
954 :
デフォルトの名無しさん :02/08/02 19:15
すいません、スレ違いかもしれませんが、 一応 MFC に関することなので質問させてください。 MFC ActiveX ControlWizard で作った ActiveX に JavaScript から文字列を渡す方法ってあるんでしょうか。 例えば URL を入力してそれを JavaScript から ActiveX に渡す、 すると ActiveX はその URL を使って色々なんかやる、みたいな。 (↑くれぐれもこれは例え話なんで「全部 ActiveX でやれば」とか 「全部 JavaScript でやれば」なんてお願いですから言わないで下さい) 誰か知ってるなら、助けてください。どうかお願いします。
>>946 ,947
どうもありがとうございます。
修行不足です。精進します。
956 :
デフォルトの名無しさん :02/08/04 02:50
MFCでプログラムしててCWindowなんてのを見つけて こりゃ便利だと使ってコンパイルしたら失敗〜。。ありゃりゃ〜?! あっそうか、ヘッダが要るのか〜と #include <atlbase.h> #include <atlwin.h> を追加してふと気がついたがこれはATLじゃん・・ 直すのもめんどくさいし。なんとかこのまま突き進む方法はありませんか?
おとなしく直すほうが吉かと。
958 :
デフォルトの名無しさん :02/08/04 11:38
>957 どうもです。 しかしHWNDとかHBITMAPとかWin32系ハンドルとMFCのクラスの関係っていまいちわかりずらいよなぁ。 CWnd *p = CWnd::FromHandle(hWnd); p->ShowWindow(); とかでOK? CWnd wnd; wnd.Attach(hWnd); だとなぜ死ぬんだろう・・
>>958 下の例だと、wndの寿命が終わったときにウインドウが破棄されない?
960 :
デフォルトの名無しさん :02/08/04 15:02
初めてDLLを作成するんですが、 GetFileNameという自作の関数を エクスポートしたいのですが、リンクエラーが発生 してしまいます。 エラーは大量に出るのですが、どうやら CString classのGetFileNameとぶつかってる(?) ようです。 自作の「GetFileName」という名前の関数をDLLから 使おうという発想自体が間違いなのでしょうか? よろしくお願いします。
>959 死ぬというかデバッグ時のassertで引っかかるみたいですね。 まぁ上の方法でなんとか動いてます
CByteArrayなどのテーブルを を"<<"や">>"でシリアライズすることはできますか?
>>962 Yes. つーかここで訊かずにMSDNに訊いた方が500倍くらい
速く答えが返ってくると思うぞ。
>960です。 なにか聞き方がまずかったかな。 要約すると、DLLを使う側のプログラムで GetFileName関数を呼び出したいのです。 他の関数はエクスポートできてるみたいなんですが CStringTクラスとぶつかる(?)らしく、 GetFileNameのみエラーがでます。 これをなくすにはGetFileNameという 名前を他のものにするしかないのでしょうか?
>>964 名前を変えたらエラーは一つも出ないの?
えっと、デバッグモードでは出ませんが、 リリースモードにすると LINK : warning LNK4089: 'OLEAUT32.dll' への すべての参照は /OPT:REF によって廃棄されます。 上がひとつでます。 関係ないと思って放置してますが。 ヘルプ読んでも理解できなかったので。 これが関係あるのでしょうか?
↑ageてしまいました、すみません。
報告です。 結局GetFileName関数の名前を変更してエラーを回避して、 無事動作を確認しました。 根本的な解決ではありませんが。。 LINK : warning LNK4089: 'OLEAUT32.dll' への すべての参照は /OPT:REF によって廃棄されます。 リリースビルドでこのエラーがどうしても消えません。 ヘルプには リンカは dynamic-link library のエクスポートを参照する パッケージ化された関数をすべて破棄しました。 とありますが、未熟者なので理解できませんでした。 これはつまりどういうことなのでしょうか?
>969 すみません、言葉の選択を間違えました。 エラー-->警告 でお願いします。 警告なので無視しても大丈夫と思いますが 分かっていて無視するのはいいですが、 わからないまま無視するのもどうかと思いまして、 悩んでいます。
>>970 > LINK : warning LNK4089: 'OLEAUT32.dll' への
> すべての参照は /OPT:REF によって廃棄されます。
訳:リンクの設定の所ではOLEAUT32.dllをリンクするように
書いてるようだが、おみゃーのプログラムは一回もOLEAUT32.dllを
使ってないのでそこんとこ無駄だから無視するぞゴルァ!!
つーわけで別に問題ないかと。
>971 なるほど、わかりやすい解説ありがとうございました。 将来使うかもしれないので、警告は消さずに、 置いておこうと思います。 ありがとうございました。
973 :
デフォルトの名無しさん :02/08/05 10:58
MDIGetActive以外でMDIのアクティブなウィンドウのハンドルを 取ることは出来ないのでしょうか? GetForegroundWondowだとフレームのハンドルのほうを取ってしまう ようで・・・。
自レスですスマソ。 ::SendMessage(m_hWndMDIClient , WM_MDIGETACTIVE , 0 , 0); としたらOKでした。 お騒がせしましたm(__)m
ふっ、ついに俺の出番か…。 1000はこのSITNAM様が頂戴する。 ふははははははは…
ヒッヒッヒ…
がんばるぞ!
, -  ̄  ̄ ` ヽ 、 ゝ´ ___ --´ヽ_ 〃`---|---l- ̄ ̄ __ --- `ヽ. 〃` ----| |--|\- ̄ ̄ ヽ. l | | | | \l\ ヽ l l | | | | \ ヽ. l l | / | |__ l ___ \ | | レ´| / / |,,- 、 ,- 、ヽ | |-- 、 l | | l 〃レ| レ |ヾ | |/ l l | l` ゝノ ゞ.ノ ´ | | ) / l | | | | | / 〃 || l ヽ | | / | ヽ 、 ヽ フ | |/ l / ヽ 、 _ - ´| / l /  ̄l |/.|_ l/ /´ ̄l | |_`\ | _,-/ /-/ , ―――´\ __--l´ l / / ____l--__
, -―- 、 / \ / /| /| ハ ヽ_ / / / / // | | | ヽ / / / _/ / / |/ |/ v N | | |/ /| / ̄ ̄ ̄ ̄ | ./ / |/TΤ ГTヽ|( (/))| < マルチ |/レ | 〉 -┘ 、 └- V ~ | | \____ v\ ″ ー ″ イv w N ^ ` ー- ノ ヽ | | | / / ∧
, -'" ̄~"'-、 /, ミ 彡⌒ヽ、ヽ、 /, '//( .)\ヽ |lヽ |l l|/〃 / l ヾヾヽ l|ヽ l| 〃 l| l| ノ从ハ从从ヽ|l从l| |l|l |l|l-tェ ´'ェェ-l|6)I|| l| l||i'"" , ""l|| I|| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ __ l|i . ヮ l|| I|I|I < /  ̄ ! ー ' |||l l|l|I| | / ヽ' I||I`ヽI|I| \_________________ | , L -─ I|I ヽI | | l|| ヽ |/ y _,i! v | / ,' | / | | | / ι)__ .:人 (._) ,ノ / |  ̄i~ `'ー-- ''~ / ,-、_ | | ゝ / ./ ζ  ̄ ̄ヽ _/| | / /.ioー-, '-、 ⌒ / | |ヽ、_/ //!_iヾ' / _/ | |`ー-/ / /´i '" / | |`ー/ /, '-'" | / | |-/ ./' | ノ _, -'~ / | ,〈√' / |
/;;;;;;;;;i;;;;;;;/;;;;;;;;/;;;/;;///ー-- - |;;;;;|;;;;;;;|l |;;;;;;;;;li;;;;;/;,,-/-,,/ |/ / ,-=-,,, .|;;;;;|;;;;;;;;| 1000は取らないでね il;;;;;;;;;|;;;;;;il~i (゚,,,i ' ' ' i ) , i |;i--;;;;;;;| |;;;;;;;;;;|;;;;||  ̄ ,,  ̄ .|;;|6/;;;;;;;| il|;;;;;;;;;|i;;;;;;;;ゝ ~~ I| ~~ ,/;;;;~;;;;|;;;;;;|i |;;;;;;;;;;;|;;;;;;;;;~=, :'_`ヽ ./;;;;;;;;|;;;;;|;;;;;|l |i|;;;;;;|;;;|i;;;;;;;;;;;;;|~'-,, ,,,,'.';;;;;;;;;;;;;|;;;;;;|;;;;;;;|i ;|;;;;;;;|;;;;|;;;;;;;;;;;;;il;;;;;| ~=--‐~ :;|;;;;;;;;;;;;;;;;;;;/-/~~~~^-,, |i;;;;;;;;;;;;;|;;;;;;;;;;;;;i-~|i ~~~|;;;;;;;;;/ ~-,, il;;;;;;;,,=~|;;;;;;;;;;;;;|i ヽ ,,,ノ ,,/|i;;;;;;;|i ~-, |i,,-~ ,,,ヽ;;;;;;;;;;;;| -~ |;;;;;;;;| ,,,, ~'=, ,-~ γ ヾ;;;;;;;ヾ ,,. ;: ヾ;;;;;;| ,,=~ \ /-,, / ;:丿 |;;;;;;) ...,:;:' ::|;;;;;|/::::::: ::::::/~-,, / -,, / / |;;;;;li γ:; :;;|=,,,:: :::::/ ~/ ~‐ / ヽ/ . :/;: :ヾ;;:: :::/ ~‐ / i;''。;: :|:;: ;' 。', ;| :: :::/ / ヾ.,; ' ::;\;: ',';:: ;:,/::::;;/ / :;/ヽ:;: ;;;ノ;;::ヽ;;:::: ,,::/;;;::;:/ /~⌒~^~^` :;ヽ / ;:/ `ー---‐':::::; :::ヾ;‐---‐''''' ::::::;/ / ::;ヽ
//";;;;;;;;;;;;;;;;;;;;;;/ //::://::/::/:/;;/:/::i:::i:::i;/ `'、i::'、:;::/::::/::::;;;;;;;;;;;/`'''" ./;;;;;;;;;;;;;;;;;;;;;;;;;;/ .//;;:/i;;;/;;/:/.i/i:/|::;;;/:/;i 'i;;';;;ノ;;;;;;;;;;;;;;;;ミ;;/ '`、;;;;;;;;;;;;;;;;;;;;;;;く ./i:;;:/:/:;/;;// / i/ i;;;/i/i/_,,,,,,,_ 彡/ ̄`''ー、;;;ヽノ ヽ;;;;;;;;;;;;;;;;;;;;;;ヽ、_ /:i:;;;;|:i::;/::(/ ̄`''-|://.'/、--,、, ` i;;:/ `';;i' ヽ;;;;;;;;;;;;;;;;;;;;;/'.、 /;;i:;;;;;i;;i:;|;;/;;'、、-=、::" :: .、:'':)'ーノ:/ ::::/´ \;;;;;;;;;;/. \/;|;;;;i:;;i:;;|;;'、;'ヽ、::::: 、 ´~''' /;/ ::::/ ヽ;;;/::. ヽ|;;;;|:;i:;;;|/;'、'ヽ、 、--, -/::/ ;;/ ー、:::... |::||:;':;;;;|//'、;/;;`:: 、'ー'.,、-'"/;;;/ :::/ .\:::... |;| i:;、;;;|-、,,/、/;/ ` ´:::::":i/ ::::/ .\:::... ヽ::i:;'、;;|__/:/ / /:ノ";|i:.. .::::::/ /::/\:::.... '、;'、:|,ヽ/:.\i:: /‐'::|:,;;|,::.. /´:::: ./ ,/:://:;;;;\;::::.... ,/、;;;i'/::..." ` '":::::ノ'i,"~i:::../;::::: ../ ./::/::/:::;;;/:;;;;ヽ;:/;;、-ヽ;i.'、,,,、:‐''''" ̄~` ヽ、-、/;:::.. ./ /:::/::;/::;;;;/::::、‐''" ̄"´ i,/ .;'.; .ヽ;i,;::::../ .//::/:::/::::/;;;::/ _、-/i " ' :::';|:::../ /:/:/::::/:::/::ノ ...::_、 :::i|、/, . /:::/:;/;;/:;;/:'i.、 、‐-'"-‐''' .:::i:::i:/" /:;;/;;/:/;;;;;;/;;/:|:::.. ..:::'":::::::/'/:::.... ....:::::::i:/ノ ;;;/;;;;/:;;;;/;;;/:::i,::::::...... ..:::::::::::::'":::::":::::::::::::::::::::::::::::::ノノ´ ;/;;/;;;;;;;;//::::;;;;';、:::::::::::::::::::::::::、-‐""::::::::,,,,,:::::::::::::_、‐ /
i ,i:i;;;;i ヽ、,,、::_、‐~´ i i i,,i;;;ノ _、-~ i 'i i/´ _、‐''、 :|、 i; i, _,,、-''~ノ:::::ヽ ::i ,i、 /、, ___、-‐'´ /_:::/:::::::::i ;i、___ i、"ー i´ i;;;ヽ、 _、‐:::::,、-"_,、-''~ _、-''"´~ ̄::::::::::::::~^''''ー--、,,,,i i |;;;;;i´ヽー、 ,,、‐_、-‐''"_、-~ /´:::::::::::::::::::::::::::::::::::::::::::::::::::::::::i i" i::::i. `ー、_''ー-----‐‐'''~,,,,、-‐''_、-''~ /´::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::i / /::::::、 ~^'''''''''''ー‐‐---‐;:‐''"~ :,i´::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::i i i´::::::::、 /" /´;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;_____::::::::::::::::::::::::i ,,i''"i-'::::::::::::ヽ :/ i/;;;;;;;;;;;_,,,,、-ー'''''''"^~^~~^^''''ー--、,,,,_i'、__ ‐´-'-------ヽ ' :i;、-‐'''~ :::::::::::::::::::::::::::::::::'ー、.
おにぎりワッショイ!! \\ おにぎりワッショイ!! // + + \\ おにぎりワッショイ!!/+ + . + /■\ /■\ /■\ + ( ´∀`∩(´∀`∩)( ´∀`) + (( (つ ノ(つ 丿(つ つ )) + ヽ ( ノ ( ヽノ ) ) ) (_)し' し(_) (_)_)
今だ!おにぎりゲットォォォォ!!  ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ (´´ /⌒ヽ ∧ ∧ ) (´⌒(´ ( ■ ) ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡  ̄ ̄ (´⌒(´⌒;; ズザーーーーーッ
ガポッ! /■\ Σ ∧ ∧ ) Σ( ´∀` )了 ⊂(゚Д゚⊂⌒`つ≡≡
+ + + ワッショイ! + . + /■\ + ( ´∀`∩ + (( (つ ノ )) ∧ ∧ ・・・・ ヽ ( ノ (゚Д゚,,) (_)し' ∩  ̄⊇〜  ̄ ̄ ̄
きみもやらない? . ∧_∧ ( ´∀`) /■\ ( つ ̄ ̄ ∧ ∧ だ、だれがやるかゴルァ! . | || (゚Д゚,,) (__)__) ∩  ̄⊇〜  ̄ ̄ ̄
そう。じゃっ ∧_∧ (´∀` ) ポイッ ( ) ヽヽヽ ∧ ∧ | .| | ))) (゚Д゚,,) (__(____) /■\ ∩  ̄⊇〜  ̄ ̄  ̄ ̄ ̄
∧ ∧ ・・・ (゚Д゚,,) /■\ ∩  ̄⊇〜  ̄ ̄  ̄ ̄ ̄
∧ 三 ∧ (゚Д゚ 三 ゚Д゚) /■\ ∩  ̄⊇〜  ̄ ̄  ̄ ̄ ̄
今だ!おにぎりゲットォォォォ!!  ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ (´´ /■\ ) (´⌒(´ ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡  ̄ ̄ (´⌒(´⌒;; ズザーーーーーッ
| | |__∧ |∀`) ・・・ | ) | | !! ./■\ ) | __) Σ(゚Д゚⊂⌒`つ ┘  ̄ ̄
ついに995か…
おにぎりワッショイ! \_____ _______ /| /■\ |/ / | ( ●∀`) | | (づ ,) | | | | | ∧_∧ | | (__)_) (´∀` )/| / ( つ |/| | | | | /| (__)_) | / ̄ ̄ ̄ ̄ ̄  ̄ | バカか貴様
/ ̄ ̄ ̄ ̄ ̄ ̄ /■\ < ワッショイ ___(´∀` )_____ \______ .__/___ _____, )__ 〃 .// / / / / 〃⌒i | ./ / / ./ / / .i::::::::::i ____| .しU /⌒\./ / / | ____|;;;;;;;;;;;i [__]___| / /-、 .\_. / Uし'[_] .| | || | / /i i / | || | | ||____|____/ / .| .|\_ノ______..| || | |(_____ノ /_| |_________..| || | | LLLLLL./ __)L_| |LLLLLLLLLLLLLLLL. | ||_____」 | || (_/ / i .| || | || |_|| / .ノ |_|| |_|| (_/
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |おにぎりワッショイ! \  ̄|/ ̄ ̄ ̄ ̄ ___ | \ \ / / )))) | / /_⊂ノ | ヽヽ .|\ / // i 、、. | ヽヽ .|\ | \ / / \\ /■\ ド ド |ヽ |\ | | / / \\( ´∀`) / / ヽ ⌒\ / ノ /> > / / 6三ノ / / \ \ ` ̄ ― / ん、 \ \ ―― (__ ( > ) ⌒ヽ ’ ・`し' / / 人, ’ ’, ( ̄ / Y⌒ヽ)⌒ヽ、 ) | \_つ
1000
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。