■ VisualC++(MFC限定)相談室 MFC9.dll■
1 :
デフォルトの名無しさん :
03/08/29 04:19
3 :
デフォルトの名無しさん :03/08/29 06:02
>>1 よ。そのテンプレは漏れが作ったものだが
「て」が抜けてると指摘があっただろ?(;´Д`)
5 :
デフォルトの名無しさん :03/08/29 11:38
VisualStudio .NET Professional 2003 にてMFCを利用してプログラムを作成しております。 有る程度プログラムが動くようになり、処理のボトルネックとなる部分をさがしていますが プロファイラがみつかりません。 VC6には有ったような気がするのですが……。
7 :
デフォルトの名無しさん :03/08/29 12:06
んなもんねぇよヴォケ
9 :
デフォルトの名無しさん :03/08/29 13:57
>>4 はポインタにNULLを代入してメモリを解放した気になってるタイプだな。
>>3 「てをぬくな」ってのはそういう意味だったのか・・・
>584の関連リンクの不備を指摘しての「手を抜くな」
だと勘違いした・・・(;´Д`) スマヌ
11 :
デフォルトの名無しさん :03/08/30 01:04
CBTProcフック仕掛けておいて、別のアプリケーションを起動してそのウインドウが全く表示されないようにShowWindow(hWnd, SW_HIDE)してるのですが、 電卓とか普通のアプリだと上手く起動の隠蔽を出来るのにMFCアプリケーションは隠すことができません。 MFCで作成されたアプリケーションのウインドウって特殊なんですか? もし方法を知っている方、情報おながいします。
どこでShowWindow()関数を呼んでる? おそらく目に見えないフレームワーク内で再度SW_SHOWされているからだろう。
13 :
デフォルトの名無しさん :03/08/30 01:21
>>12 直接コールバックプロシージャの中に書いてます。
LRESULT CALLBACK CBTProc(INT nCode, WPARAM wParam, LPARAM lParam)
{
if(nCode == HCBT_ACTIVATE || nCode == HCBT_CREATEWND)
{
::ShowWindow((HWND)wParam, SW_HIDE);
}
else
{
::CallNextHookEx(hHook, nCode, wParam, lParam);
}
return 0;
}
>>13 APIフックしてShowWindow()やSetWindowPos()を捕まえちゃえば?
15 :
デフォルトの名無しさん :03/08/30 03:23
度々すいません MFCのウインドウが表示される瞬間を捕まえるには何の種類のフックを監視すればよいでしょうか?
16 :
デフォルトの名無しさん :03/08/31 15:26
自ウインドウのサイズ(縦横ピクセル)を取得するにはどうすればいいのですか?
取得してCRect構造体に代入したいのです。
CDC *dc = GetDC();
CRect rect;
rect.left = 0;
rect.top = 0;
rect.right = 〜〜〜〜; // ← 自ウインドウの横幅を入れたい。
rect.bottom = 〜〜〜〜; // ← 自ウインドウの縦幅を入れたい。
>>15 WM_PAINT ではないでしょうか?
CWnd::GetClientRect 関数で取得できました。スレ汚しすいませんでした。
19 :
デフォルトの名無しさん :03/08/31 22:37
CListctrlで全のアイテムを選択状態にするため SetItemState(-1, LVIS_SELECTED, LVIS_SELECTED); でしていますが、アイテム数(1万アイテム)が多いと遅いのです。 いい方法はないでしょうか。
SetRedraw(FALSE); Do(); SetRedraw(TRUE); // (゚д゚)ウマー?
(゚д゚)ウマー
ていうか
>>19 の質問は初心者スレの方で最近あったばかりだね
23 :
デフォルトの名無しさん :03/09/01 14:39
>>16 >>18 やってみました。
GetMsgProcでWM_PAINTとWM_SHOWWINDOWの両方を捕まえて
ShowWindowでSW_HIDEにして更にWM_SETREDRAWで描画停止してもダメですた。
ウインドウ出てしまいますた。。。
他に方法探してみまつ・・・。
>>23 PreCreateWindowだかでWS_VISIBLEを外すとか言う話でなく?
>>23 起動時にウィンドウを表示したく無いならまた別な話じゃない?
>>23 もしかしてダイアログベースでやってない?
ダイアログベースだと必ず一度は表示されるみたい>俺も悩まされた
解決法はDoModal()でウィンドウ作成するのではなく
Create()で作成するべし
そうする場合、ウィンドウ閉じたりするのは
もちろんEndDialog()じゃなくPostQuitMessage()などで行うと
>>20 さんありがとう。でも別の原因で遅いことが分かりました。
LVN_ITEMCHANGEDで選択された後、選択されたアイテムの詳細データを取ってきて
表示するようにしています。
それで全部選択すると、ひとつずつデータを取ってきて表示しているため、
時間がかかっていました。
複数選択する場合は最初に選択されたものだけデータを表示すればよいので
後は無視できれば良いのですが、何か良い方法はありますか?
>>27 MSDNに思いっきり書いてると思うんだが
GetFirstSelectedItemPosition();
>>27 だったら、LVN_ITEMCHANGEDで通知されてきた時のアイテムと
最初の選択アイテムが同じでなければ処理を省けばいいんでないの?
30 :
デフォルトの名無しさん :03/09/04 05:58
STLのvalarrayを使いたいのですが const double a[] = {1.0,2.0,3.0}; std::valarray<double> v(a,3); のように書くと error C2039: 'valarray' : 'std' のメンバではありません。 というエラーが出てしまいます。 なぜなのでしょうか。 使っているのはVisual C++.NETです。
>>31 #include "stdafx.h"の前に#include <valarray>
と書いていたのですがコメントアウトしてみても
同じエラーが出るので
#include "stdafx.h"の後に"include <valarray>
と書くと
error C2059: 構文エラー : ')'
error C2334: ':' の前に予期しないトークンがありました。関数の本体は無視されます
見たいなエラーが28個もでてしまいます。
ヘッダをインクルードする順序でエラーになったりならなかったりするのでしょうか
>>32 多分ちんたこすエラー。
ソースの先頭部分(ヘッダ宣言部分)を貼ってみ。
>>33 #include "stdafx.h"
#include <valarray>
#include "hoge.h"
#include "hogeDoc.h"
#include "hogeView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
こんなかんじです。
VC++6.0 MFCを使っています。 プロジェクトを作成する際にダイアログベースで 作ろうと思っているのですが、 実行してすぐに出てくる画面(ダイアログ)に プロパティシートを設定することができません。 プロパティシートを実行してすぐのダイアログに設定する場合、 モーダル、モードレスどちらで作成しても同じなのでしょうか? モーダルでプロパティシートをダイアログに表示させるとボタンは ダイアログのボタンが設定されるのでしょうか? モーダルのボタンは消えてくれるのでしょうか? わたしが作った結果、モーダルで実行するとプロパティシートが出てきた後、 OKボタンをクリックするとダイアログがでてきました。 DLGクラスのOnInitDialogの最後にシートのDoModal()を書いたのですが 書く場所がおかしいのでしょうか? よろしくおねがいします
日本語がおかしい。
38 :
デフォルトの名無しさん :03/09/04 15:43
>>26 MFCのアプリを作っているわけではなくて、
MFCで出来てるアプリを外部から操作したい、という事なのです。
(ちなみに操作側のexeとdllはC++Builderで作ってます。)
ググってみてもMFCアプリ作成時にコレとコレをこうすれば表示されないというTIPSはあったのですが、既存のMFCアプリを外部から操作する時の話はさすがに見つかりませんですた。。。
>>38 MFCでできてるかどうかってのはあんまり関係ないと思うんだが…
いろいろアドバイスありがとうございます。 何とか解決できました。
41 :
デフォルトの名無しさん :03/09/06 16:40
スプリッタウィンドウ内のフォームビューの3D枠をなくすにはどうすれば良いでしょうか? ビューやメインフレームで cs.dwExStyle &= ~WS_EX_CLIENTEDGE; とやっても無理でした。
フォームビューならWS_CHILDじゃねーの?
スプリッタウィンドウの3D枠は内側のペインに付いてるんじゃなくて CSplitterWndの境界線のほうに付いてるものだから。 派生クラスを作ってCSplitterWnd::OnDrawSplitter()をオーバライドするんでないか? って、試そうとしたらクラス作成ウィザードでCSplitterWndの派生クラス作れないよ・・・。(VC++2002)
45 :
デフォルトの名無しさん :03/09/06 22:02
小泉「しかし、あれですな。改革改革と言ってれば阿呆な国民は支持してくれるんだから楽なもんですよ」 亀井「親小泉と抵抗勢力の対決構図を煽った甲斐があったってもんだよな」 青木「そうだわな」 古賀「単純な奴らですよね」 野中「私と青木君が対立してるなんてマスコミの報道は笑っちゃうよ。あとは粛々と詰めの作業を行うだけだな」 小泉「そうですね。あともう少しですよ」 江藤「ここまで来るのに苦労したが、これで我が党は安泰だな」 橋本「我が派も安泰ですよ」 森 「どうだ小泉君、今度の選挙もいけそうか」 小泉「任せてください。今回も圧勝しますよ。俺が何言っても支持しますからね、あいつらは」 野中「君もワルよのお。小泉君」 小泉「いえいえ。野中さんほどではありませんよ。フッフッフ」 青木「だわな」 一同「フッフッフッフ。アッハッハッハッハッハッハッハッ」
47 :
デフォルトの名無しさん :03/09/08 01:59
>>30 > ヘッダをインクルードする順序でエラーになったりならなかったりするのでしょうか
デフォルトの設定だとstdafx.hを一番最初に読み込むので、それより
前にインクルードしても無意味。
で、後にvalarrayをインクルードするのが正解なんだけど、確かに
なんかおかしなエラー出るね(VC6SP5、VC7.1)。
min, maxとかいうマクロの名前がMFCと衝突してる臭い感じなんだけど
もしそうならMFCとvalarrayの相性が悪いってことなのかなぁ?
>>47 >min, maxとかいうマクロの名前がMFCと衝突してる臭い感じなんだけど
windef.hに
#define max(a,b) (((a) > (b)) ? (a) : (b))
#define min(a,b) (((a) < (b)) ? (a) : (b))
とあったので多分そうだと思います。
それで#undef max #undef minとするとエラーは出ないのですが
勝手にundefしても問題はないのでしょうか。
MFCと衝突しているというよりvalarrayの メンバ関数のmin,maxと衝突してるようですね
Buttonコントロールに対してCEdit派生クラスを動的サブクラス化した 場合、どうしてButtonコントロールの外見が描画されるんでしょうか? 私の理解では、動的サブクラス化によってウィンドウプロシージャが Edit(の継承)のものにかわるので、Editの外見が描画されそうなんですが、、、 ご存知の方、教えてください。
質問を書いた後に気づいたのですが、 もしかして、CEditとかって、コントロールに対しSendMessageするだけの ラッパーで、派生クラスはEditコントロールの実装(ウィンドウプロシージャ)を 全く持っていない。だから、CEdit継承クラスであってもEditの外見描画機能は持っていない、 →よって、Buttonの外見が描画される ってことなんでしょうか?
ああ、そうだよ。 でも、そんなことするな。
53 :
デフォルトの名無しさん :03/09/08 22:20
>>49 漏れならvalarrayを自分のインクルードフォルダにコピーして
min, maxの名前をちょっと変えると思う。
valarrayはvalarrayだけで自己完結してそうだけど
MFCのヘッダいぢるといろいろめんどくさそうだし。
54 :
デフォルトの名無しさん :03/09/10 03:31
VC&MFC初心者です。 クライアントウインドウのデバイスコンテキストを取得する方法として CClientDCと、ON_PAINTイベントでのCPaintDCと2種類ありますが、 書籍によると、”さまざまな理由から”ON_PAINTイベントでは CPaintDCを使います。と書かれていました。 ”さまざまな理由”とはなんでしょうか? 初心者に理解できないようなことならいいですが、 簡単な事であるなら教えてください。
>>54 (1) WM_PAINTハンドラに必須なBeginPaint()/EndPaint()の実行
CClientDC -- 自分でBeginPaint()/EndPaint()を呼び出すコードを書かないとだめ。
CPaintDC -- コンストラクタ/デストラクタにカプセル化されているので書かなくていい。
(2) 描画範囲
CClientDC -- 常にクライアント領域全体を対象とする。
CPaintDC -- InvalidateRect()された範囲のみが対象なので描画が速いことがある。
>>55 ありがとうございました。理解できました。
「開く」で開いたたファイル(ファイルはひらがなや漢字のTXT)を 読み込み"1文字づつ"変数strに代入したいのですが、 void CHogeDoc::Serialize(CArchive& ar) { // 省略 }else{ CFile *cf; CString FileName, str; int FileLen, i; cf = ar.GetFile(); FileName = cf->GetFileName(); FileLen = cf->GetLength(); for(i=0; i<FileLen; i++){ // 一文字づつstrに代入したい。 ← ここが知りたいです。 // ここにstrを使った処理を記述する予定 } }
無駄だ
>>57 1文字なら、charではないだろうか?
なぜCStringに入れたいのだろうか?
charなら、BYTEでcastして、
char c;
ar >> (BYTE)cr;
で良いのではないだろうか?
BYTE b;
ar >> b;
でも良いけど。
一番高速なのはファイルサイズを取得して new して fread
>>59 1文字とは半角英数でなくてひらがなや漢字の1文字という意味です。
>>60 freadですか。ありがとうございます。
>>61 fread() = cf->Read()
バッファに読んだデータからマルチバイト考慮して1文字ずつ取り出すなら
_mbsinc() かな。
あと、メモリマップトファイル使えば、いちいちバッファ読みこむ必要ない。
63 :
デフォルトの名無しさん :03/09/11 08:27
質問です。 Win32Applicationで作ったプロジェクトから ClassWizardを使えるようにする事って可能ですか?
>>63 VC++ 2002以降ClassWizardは廃止されますた。
環境書き忘れました。 VC++6.0なんですけど、無理ですか?
>>61 きっさーん、forループがFileLenで1byteずつ回してるやないかぁ?
ワナにかけやがったな。
夕陽に向かってバカヤローぉ。
67 :
デフォルトの名無しさん :03/09/13 14:25
::PostMessageで他のアプリのウィンドウにメッセージを送って 処理しているのですが、どうもメッセージを受け取る反応が 鈍いのです。(受けアプリのWindowProcで処理) 数秒してから反応するような感じです。 瞬時にメッセージ受信できるようにする方法はないでしょうか? どなたかご教授ください。
>>67 ::SendMessage()じゃだめ?
::PostMessage()の後で、::Sleep(0)してみるとか。
69 :
デフォルトの名無しさん :03/09/13 17:37
>>68 SendMessageでOKでした、ありがとうございます!
アラフシギ
>>70 これだけでゲラゲラワラタ(;´Д`)漏れはもうだめかもわからんね
CDocumentに複数のビューが関連付けられているアプリケーションで、 CDocument::UpdateAllViewsで各ビューのOnUpdateが呼ばれる順番を 制御するにはどうしたらいいのでしょうか
73 :
デフォルトの名無しさん :03/09/14 04:33
VC++6使ってんだけど、MFC使うと絶対フォームが白の背景になるわな? これ、普通のボタン表面の色に出来んの? VBみたくならんの?
>>73 〜View::OnDraw(CDC *pDC)
{
CRect rect;
GetClientRect(&rect);
pDC->FillSolidRect(GetSysColor(COLOR_BTNFACE));
}
// (・∀・)ニヤニヤ
〜View::OnEraseBkgndだろ なに?リソースエディタ?
76 :
名無し@沢村 :03/09/14 13:01
>>73 MFCでもFormの背景はボタンの色と同じだが。
77 :
デフォルトの名無しさん :03/09/14 18:47
ff
>72 CDocumentでListを持っていたと思います。 ソースをのぞいて見てください。 制御したいのでしたらそれうまく利用してください。 さがしましたよ POSITION pos = GetFirstViewPosition(); CView* pView = GetNextView(pos); これでしょ? CDocument::m_viewList これだね! ってこれで答えになってますか?
>>78 レスありがとうございます。
確かにそれでできそうですね。
protected メンバなので派生クラスからも操作してokと
判断していいのかな・・・?
チョクでいぢることによって悪影響が出ないかちょっと心配ですが。
わざわざ探して頂き感謝です。
80 :
デフォルトの名無しさん :03/09/15 10:13
名前:心得をよく読みましょう :03/09/15 04:15 ID:GKbg9PND
先ほどより当方の利用しているプロバイダが規制対象になってしまったので
代行をお願いしたいです。
親切に教えてくださった方にお礼を言えないのは激しく鬱なので・・・
【板名】プログラム
【スレのURL】
http://pc2.2ch.net/test/read.cgi/tech/1062098350/ 【名前】72
【メール欄(省略可)】sage
【本文】
>>78 レスありがとうございます。
確かにそれでできそうですね。
(省略されました・・全てを読むにはここを押してください)
ひゃひゃひゃアク禁だってよ
82 :
デフォルトの名無しさん :03/09/15 11:04
質問がこのスレにマッチしているかわかりませんが、他に適当なスレも ないので質問します。 ワトソン博士・gdbのようなデバッガ・ダンプツールの使い方です。 エラーが発生したときに、皆さんどこの情報を見ます? 私の場合、自分で作成したアプリなら スタック バック トレース を見て どこでエラーが発生したのかアタリを付けるぐらいしか使わないです。 私の場合、機械語・アセンブラは概要を知っているのみでi386・nasmプログラミング をした経験はありませんのでレジスタ値を見ても、こーゆー値が入ってるんだね、 でもオレには役に立たないなと思ってしまうのですが、機械語・インテルアーキテクチャ バリバリの人にはあれってすっげー役に立つもんなんでしょうか? 知っててもあんまり使わない、ということであればいいんですが ないと困る、というものであればあーゆーのを読めるようになる勉強を したいと思っています。 そこらへんのデバッガ活用ノウハウを記述したおすすめの書籍などありましたら ぜひご教授いただきたいのですが…。
デバッグツール使うときは、デバッグツールが使えるようなコーディングにします。 スタックをダンプなんてしません、ダンプするのはフレームメモリです。
84 :
デフォルトの名無しさん :03/09/15 14:22
visual c++ 6.0エンタープライスエディションでvisual stdioを インストできない人いる?インストールの前にback office を インストールしてくださいってback officeがどこにあるか分からん のじゃボケ。
キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
そもそもMFCって何?
MFCというよりグラフィックスツールの使い方の質問かもしれませんが、 XPのエクスプローラのボタン上の絵みたいに、背景の色にかかわらずアンチエイリアス がかかった境界の滑らかなアイコンを作りたいのですが、参考になるサイトなんかが あったら教えてください。おながいします。
88 :
デフォルトの名無しさん :03/09/16 23:03
CFormViewの背景と同じ色のCOLOREFを 得たいのですがどうすればいいですか。
>>89 ああ、GetSysColor(COLOR_BTNFACE)でよかったわけね
サンクスコ
まあ73ではないわけだが
↑PhotoShopが標準ツールなんだ(w
へんちくりんな訳だな。 デザイナ用のページだから? (w
95 :
デフォルトの名無しさん :03/09/18 20:17
レポートスタイルのCListCtrlでヘッダの幅を変えたときに処理したい事があるんだけど ClassWizardでHDN_ENDTRACKメッセージを拾うようにしても、作成した関数 に CMyView::OnEndtrackList() にお呼びがかかりません。どうすれば 呼んでもらえますか?
97 :
デフォルトの名無しさん :03/09/19 02:10
教えてくれくれ。 CToolBarにツールチップを表示させたいのですが、 GetToolBarCtrl().SetToolTips(&m_ToolTip); とやってもちゃんと表示されないのですが、 どうすればいいのでしょうか?
>>96 普通に定義されてるけど
#define ON_NOTIFY_REFLECT(wNotifyCode, memberFxn) \
{ WM_NOTIFY+WM_REFLECT_BASE, (WORD)(int)wNotifyCode, 0, 0, AfxSig_vNMHDRpl, \
(AFX_PMSG)(void (AFX_MSG_CALL CCmdTarget::*)(NMHDR*, LRESULT*))&memberFxn },
>>96 ClassWizard使わずに自分で書けばいい
100 :
デフォルトの名無しさん :03/09/19 22:22
ClassWizardのスケルトン生成は、使用頻度が高いと思われる物しか、用意されてないわけだが。
>>96 の無いってのがClassWizardになら、IDEのメニューにないコマンドが実行できないみたいなもんか?
いえ、MSのサイトに In the CListView-derived class's message map, delete the following line: ON_NOTIFY_REFLECT(HDN_ENDTRACK, OnEndtrack) ってあるんですが、ソース中にそれらしき項目がないんです。CListCtrlだから かもしれませんが。
ポカーン
MFCでSDI形式の簡単なプログラムを組んでみました。 そこで質問です。 onDraw実行時に他のクラスに属するメンバ変数を参照します。 そのメンバ変数はCString型であり、値は既に代入済みです。 なのに、そのメンバ変数はNULLを返してきます。 なぜこうなってしまうのか。 原因と対処法をお願いします。 環境はVisualC++6.0のMFCでSDI形式のプログラムです。 MFC App Wizardの設定はすべてデフォルトのままです。
NULLになるのは、 ・ほかのクラス(のインスタンスへのポインタ?) なのか ・そのメンバ変数(CString型へのポインタ?)なのか ・メンバ変数の文字列評価( CString str;としたときの(LPCSTR)str)なのか それとも ・そのメンバ変数が空文字列(="")なのをNULLと表記したのか いったいどれだ?
>>104 Meiboという名のプロジェクトを組み、CStudentクラスを追加しました。
class CStudent : public CDocument
{
//(中略)
public:
CString name;
}
上のようにCStudentクラスにCString型のnameを作り、PreCreateWindowでnameに"佐藤"と代入します。
BOOL CMeiboView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: この位置で CREATESTRUCT cs を修正して Window クラスまたはスタイルを
// 修正してください。
CStudent sato;
sato.name = "佐藤ピロシ";
return CView::PreCreateWindow(cs);
}
そしてonDrawにてnameの中身を表示します。
void CMeiboView::OnDraw(CDC* pDC)
{
CKurasu2Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: この場所にネイティブ データ用の描画コードを追加します。
CStudent sato;
pDC->TextOut(100, 100, sato.name);
}
これを実行すると「佐藤ピロシ」と表示されてもいいはずなのに何も表示されないのです。
なお、pDC->TextOut(100, 100, sato.name);
でなくとも、onDrawからよそのクラスの変数を見に行こうとするとやはりうまくいきません。
どうなっちゃってるんでしょう、ピロシたん・゚・(つД`)・゚・
あんたそりゃ表示されなくて当然だよ PreCreateWindowのsatoとOnDrawのsatoは 別物のローカル変数
>>105 ちみは、ろーかる変数といふものを分かっていないようだね。
PreCreateWindowでのsatoと、
OnDrawでのsatoは別物です。
MFCなんか使う前にCをべんきょうしなたい。
>>106 >>107 そうなんでつか?
PreCreateWindowでもOnDrawでも、
CStudent sato;
sato.name
で同じCStudentのnameを参照しにいってると思うんだけど。
どう対処したらいいんだろう?
あと、105見づらくてスマソ
>>108 CMeiboViewクラスにCStudent型のメンバ変数を持たせて
そのメンバ変数に代入、表示させる。
>>105 C++の基本&MFCのDoc-View構造を理解しておいた方がいいかと
>> class CStudent : public CDocument
↑にも突っ込みいれたいとこだけど
ありがとう!わかりました。 CMeiboViewクラス内で、 (PreCreateWindowやOnDrawなどの)CMeiboViewメンバ関数外 のどこかで CStudent sato; を宣言してやればよかったんですな。 どうやら自分は 「メンバ変数はグローバル変数でもある」 と間違った思い込みをしていたようで、 class CStudent : public CDocument { //(中略) public: CString name; } という宣言だけでnameはグローバル変数であると思い込んでいました。 どうもありがとやんす
112 :
デフォルトの名無しさん :03/09/20 17:13
アプリを作っていて、他のウィンドウの背面にあるウィンドウを手前に 出したくて、普通ならForegroundWindowで問題ないはずなのですが、 なぜか、手前に出てきてくれません。SetWindowPosで最前面にする方法だと 手前に出てくるのですが、これだと、永久にフローティング状態に なってしまいます。 これって原因わかりますか?または解決方法ありましたらご教授ください
>>111 おいおい、とりあえずはそれで動くだろう。
でも、それはトンでもない勘違いだよ。
>> class CStudent : public CDocument
↑を見る限りMFCのDoc-View構造を使ってんだろ。
おそらくAppWizardの吐いたコードを使ってんだろうけど。
ここで詳しくは説明できないが、
あんたのViewクラス内に書いた「CStudent sato;」とは
全く別のCStudentクラスのインスタンスが作られてんだよ。
とにかく、落ち着いてMFCのDoc-View構造を調べるべし。
Doc-View構造以前の問題だなこりゃ。
116 :
(;´Д`)y─┛~~ :03/09/20 18:01
LINK : fatal error LNK1104: ファイル "kernel32.lib" を開けません。 っていうエラーがでたときどうすればいいですか?おしえてください ちなみにvisual c++ 6.0を使用しています
MFCとは関係ないなこりゃ。
え、なに? まだ夏厨残ってたの?
>>114 つまりGetDocumentを使ったりして
ドキュメントクラスからアクセスしてみろってこと?
もう少し修行してから出直してきます…
>>119 そもそもCStudentをDocumentから派生させてるところに問題がある。
CStudentは、単なるstructくらいで作れるんじゃないだろか。
CStudentのインスタンスは、たぶん複数人いるんだろうから、
CMeiboDoc(CDocumentの派生クラス)の中に、CStudentを複数持てるように、
メンバー変数として、CStudentの配列かリストで持たせる。
Viewからは、GetDocumentで、そのメンバー変数にアクセスする。
sato君を初期化するなら、CMeiboDocの中でね。
タスクトレイアイコンを表示したいのですが CMainFrame::OnCreate{ ・・・ ・・・ Shell_NotifyIcon(NIM_ADD, &m_nid); } と書いてもアイコンの上にマウスカーソルを乗せるとアイコンが消えてしまいます。 Win32の方で case WM_CREATE に同じようなコードを書くと上手くいくのですが何故でしょうか。 環境はWInXP+VS.net2003です
>>121 m_nid.hWndを設定しないとタスクトレイアイコンが消えるな。他の原因は知らない。
123 :
デフォルトの名無しさん :03/09/22 23:48
>>73 だ。
ちょっとレス遅くなってしまってすまない。
>>74 答えてくれたコード書いたけど、エラー出るぞ。
教えてくれるならちゃんと教えてくれよ。
>>123 普通は白くならないから誰も答えてくれないよ。
あ、ダイアログベースにすればよいのか・・・。 でもSDIとかMDI選んだらなるだろう? こういうときどうすんの?
127 :
デフォルトの名無しさん :03/09/23 11:00
いつの間にか眠っちまった。 何かのクラスを変えればいいわけだな。 もうちょっと詳しく、と言いたいところだが、自分で考えながらやれるからこれでもいいか。 Viewが付いてるからCTestViewを変えればいいんだろうけど、どうやって変えればいいんだ? ソース見たところTESTVIEW_Hってヘッダがすでにあるみたいだけど。
>>127 基本クラスってわかるか?
ベースクラスとか、派生元クラスとか、スーパークラスとかいわれる奴だ。
それを変更するんだ。
129 :
デフォルトの名無しさん :03/09/23 11:39
ふむふむ、派生元のクラスね。 でも1つのファイルを書き換えればいいの? 複数ファイルの更新になるんか? ちょっとVCさわったぐらいだから構造全然分かってないんだけどな・・・。 CTestViewはCViewクラスから派生してるようだから、これをCFormViewに変えたらいいんだよな? でもpublic CViewってところを変えればいいだけなのか?
130 :
デフォルトの名無しさん :03/09/23 11:50
ちなみにpublic CViewをpublic CFormViewに変えて実行したら 'CFormView' : クラス、構造体、共用体にデフォルト コンストラクタがありません。 ってエラーが出やがった。 コンストラクタが無いクラスなどあるのか?
ハハハハ お笑いスレですか? TestView.h と TestView.cpp の全ての CView を変更しましょうね(w
132 :
デフォルトの名無しさん :03/09/23 12:06
お笑いじゃないんだよ。 こっちは知らないから真剣に聞いてるのが分からないのか? でも、まだ教えてくれたから許してやる。 こういう嫌みを何で言うんだろうね。
133 :
デフォルトの名無しさん :03/09/23 12:15
TestView.h と TestView.cpp の全ての CView をCFormViewに変更したが、 まだコンストラクタが無いってエラーになるぞ。 なんかCTestView::CTestView()に書かないとダメなんだろう? 何を書けばいいんだ?
つきあってる俺ってバカ? > TestView.h と TestView.cpp の全ての CView をCFormViewに変更したが、 > まだコンストラクタが無いってエラーになるぞ。 なりません。
135 :
デフォルトの名無しさん :03/09/23 12:33
バカじゃねぇぞ。 暇なのか親切なのかどっちかまではわからんが、何にしてもいい奴だよ。 更新抜けがあるのかな? それともcl.exeかシステムに異常があるのか・・・。 やっぱMSDNでリンクがされないのと関係あるんかもな。
136 :
デフォルトの名無しさん :03/09/23 12:44
だめだ、確認したがCViewってところは無い。 と言うことは、ほんとにシステムの問題の可能性あるな。 VSとMSDNを再インストしたが治らなかったし 。 OSの再インストかよ・・・。
もまえらネタにしても引っ張りすぎ。 普通はプロジェクトを作るときにCViewをCFormViewに変更するだよ。 あとからソースを変更するのはちょっくら面倒。 それにしても背景色を変えたいというだけの質問が、なぜこんな方向に。
まあ、CFormViewにはデフォルトコンストラクタがないから、 デフォルトコンストラクタを呼ぼうとすると、エラーになるわけだが。
139 :
デフォルトの名無しさん :03/09/23 13:20
なるほどね、サンクス。 さっき言ったこと変更。 いい人じゃなくて、お前最低の奴だな、市ね。 バカな奴はやっぱり自分で分かるものか。
こんな一から2chで教えてもらおうとする奴なんか放置しとけばいいのに。
最後まで低脳児っぷりを見せ付けてくれたな(w
休日だからかな
>>122 アク禁食らってってレス遅くなりました。ごめんなさい。
m_nid.hWndはm_hWndを設定してあります。
>>143 そのm_hWndがローカルだから無くなってるとか
>>144 m_hWndはCMainFrameのメンバ変数なのでその心配は多分ないと思います。
146 :
デフォルトの名無しさん :03/09/23 18:17
ダイアログベースで勉強中なのですが タイマーコントロールがありません どうすれば出てきますか?(それともタイマーはVBの専売特許?)
SetTimer
>>146 タイマーなんてコントロールでやるもんじゃありません
偉い人にはそれがわからんのです。
CPaletteが使えません。 サンプルのDIBLOOKとか検索して出てきたものを参考に OnInitDialogでパレットの色数を2色を設定にして、 OnDoRealizeを作って、 OnPaletteChanged OnQueryNewPalette OnActivateも実装し、 描画時にもSelectPaletteやRealizePaletteや('∀`)実行しているのにも かかわらず。 グリーンが使えてしまいます。 なぜですか。ダイアログなのがいけませんか。 私は悪くありません。 きーーーーー!!!
( ´_ゝ`)フーン
たぶん解決しました。(_ _(--;(_ _(--; ペコペコ
154 :
デフォルトの名無しさん :03/09/24 07:23
>>149 しかし、SetTimerも自分でIDふって作るんだから
コントロールとかわらんよな。
むしろコントロールであった方がめんどくさくなくていいよ。
155 :
デフォルトの名無しさん :03/09/24 10:08
質問させてください。 現在、mainframe内に子ウィンドウ(CFormView)を複数 表示させています。 ある子ウィンドウにショートカットキーを設定させたい のですが、その子ウィンドウがアクティブだろうが非アクティブ でもそのショートカットキーを有効にしたいのです。 なにか、良い方法があったら教えてください。
>>155 何もしなくても普通にコマンドルーティングされるだろ
157 :
デフォルトの名無しさん :03/09/24 13:03
あるときMFCAPPウィザードでダイアログベースの画面作って 3回目くらいに実行ボタン押したらウントモスントモフリーズではなくて・ いわなくなったのは何が原因でしょうか? 何回もあるのでいっそうのこと手作業MFCでやったほうがいいでしょうか?
自分のバグだろ
>>158 いや、まだばぐというよりも
コントロール貼り付けただけなんだが・・・
もいちどAPPウィザードからやるよ
160 :
デフォルトの名無しさん :03/09/24 15:30
CStringの内容をDWORDに変換したいのですが変換クラスとかないですか? CString a; a = "77"; DWORD b = a;
この方法変換できてるでしょうか?すごく不安です CString a; unsigned long b; a = "77"; a.Format("%lu",b);
162 :
デフォルトの名無しさん :03/09/24 16:41
>160 CString a="77"; DWORD b; b=(DWORD)atol(a); ActiveXコントロールのデザインモードでサイズを変更したときに、 WM_SIZEで自分の大きさを取得したのですが、この値を プロパティーページに追加した、カスタムプロパティーのテキストボックスに 反映する方法ないですか?
::PostMessage(hWnd,WM_USER99,0,0); 自作のメッセージを送ったんだけど そのハンドラの作り方がわかりません>< MFCのダイアログベースでつくっています。
教えてクソ氏ね。
166 :
デフォルトの名無しさん :03/09/24 17:11
cppに、メッセージマップと、実装部を書く BEGIN_MESSAGE_MAP(CxxxDlg, CDialog) //{{AFX_MSG_MAP(CxxxDlg) ON_MESSAGE(WM_USER99,OnWMUser99) //}}AFX_MSG_MAP END_MESSAGE_MAP() LRESULT CxxxDlg::,OnWMUser99( WPARAM wParam, LPARAM lParam ) { }
167 :
デフォルトの名無しさん :03/09/24 17:13
cppに、メッセージマップと、実装部を書く BEGIN_MESSAGE_MAP(CxxxDlg, CDialog) //{{AFX_MSG_MAP(CxxxDlg) ON_MESSAGE(WM_USER99,OnWMUser99) //}}AFX_MSG_MAP END_MESSAGE_MAP() LRESULT CxxxDlg::,OnWMUser99( WPARAM wParam, LPARAM lParam ) { return TRUE; } ヘッダーに定義を書く //{{AFX_MSG(Cxxx001Dlg) afx_msg LRESULT OnCheckUp( WPARAM wParam, LPARAM lParam ); //}}AFX_MSG DECLARE_MESSAGE_MAP()
168 :
デフォルトの名無しさん :03/09/24 17:14
間違えた・・・ cppに、メッセージマップと、実装部を書く BEGIN_MESSAGE_MAP(CxxxDlg, CDialog) //{{AFX_MSG_MAP(CxxxDlg) ON_MESSAGE(WM_USER99,OnWMUser99) //}}AFX_MSG_MAP END_MESSAGE_MAP() LRESULT CxxxDlg::,OnWMUser99( WPARAM wParam, LPARAM lParam ) { return TRUE; } ヘッダーに定義を書く //{{AFX_MSG(Cxxx001Dlg) afx_msg LRESULT OnWMUser99( WPARAM wParam, LPARAM lParam ); //}}AFX_MSG DECLARE_MESSAGE_MAP()
CxxxDlg::,OnWMUser99 ::の後のコンマが
170 :
デフォルトの名無しさん :03/09/24 17:19
>169 訂正ありがと・・・ LRESULT CxxxDlg::,OnWMUser99( WPARAM wParam, LPARAM lParam ) から LRESULT CxxxDlg::OnWMUser99( WPARAM wParam, LPARAM lParam ) に変更だ。 しかしなんでそんなところにコンマが入るかなァ・・・(藁
ON_MESSAGE(WM_USER99,OnWMUser99) ↑こんな感じのところからハンドラ名をコピペしたからと推測
172 :
デフォルトの名無しさん :03/09/24 17:24
見事!!ずぼしです。鬱・・・
うるせえ馬鹿
自己解決 >162 BoundPropertyChangedでした。 >173 関数の実行部(実装部)と定義(ヘッダーのやつ)は必ず対です。 そのほかにメッセージがどの関数に対応するかがメッセージマップです。 名前のとおりですな
MFC以前の問題だな・・・
177 :
デフォルトの名無しさん :03/09/25 14:47
質問させてください。 VC++で複数の子ダイアログを表示する方法を教えてください。 子ダイアログにはそれぞれWndProcが走っている状態にしたいのです。 お願いします。
モードレスダイアログ
179 :
デフォルトの名無しさん :03/09/26 04:25
180 :
デフォルトの名無しさん :03/09/26 21:14
質問させてください。 VC++で,自作プログラムから外部プログラムへデータを 渡したいのですが,どんなふうに処理してよいか分かりません. たとえば,数値データをエクセルに送ってグラフ化するまでを 自動化できないでしょうか? お願いします。
181 :
デフォルトの名無しさん :03/09/26 23:40
SDIから呼び出す自作ダイアログに、CEditコントロールが張り付けてあり、 ClassWizardでint型のメンバ変数を関連づけてあります。 ダイアログのOnInitDialog()で CEdit *pEdit=(CEdit*)GetDlgItem(IDC_EDIT_LOAD); if(pEdit) pEdit->SetFocus(); としてあるのですが、コントロールにフォーカスが移りません。 一緒にラジオボタンを張り付けてあるのですが、そのボタンにフォーカスが いってしまいます。どうやったらCEditコントロールにフォーカスをうつせますか?
>>181 return TRUE; の後にあるコメントを訳した奴の日本語能力を呪いながら
return FALSE; に書き換えろ。
>>182 それ一度やってみて駄目で戻していたんですが、一度プロジェクトを
閉じてからもう一度FALSEにしてみたら出来ますた。どもです。
>184 何を解説して欲しいのかを書け
いちいちウルセーんだよ
私ゃ184で187じゃありませんが・・・(汗 いやさ、return TRUE;の後ろにあるコメントって、本来どう訳すべきだったのかと思ってね。 コメントの意味が今までどうにも理解できなかったんで放置してたんですよ。
//コントロールにフォーカスを設定しないとき、戻り値は TRUE となります =設定するときは、戻り値は FALSE となります でいいんじゃないの。
まあ一般論で言えば
>>189 の"="は必ずしも成り立つとは限らないわけだが。
一般論はどうでもよい。MSDNに明示されてるんだから。
(´-`).。oO(明示されてることでこんな大騒ぎしてるのか…)
MSDN読む前に質問する厨がいるんだろ…
194 :
デフォルトの名無しさん :03/09/28 22:09
MFCを使用してプログラムしていますが、 WndProcを利用してメッセージを制御したい と思っています。 WndProcはSDKだけでMFCでは利用できないのでしょうか? 教えてください。
>>194 DefWindowProcじゃダメか?
196 :
デフォルトの名無しさん :03/09/29 09:47
>>195 それってどこで使用すればいいんですか?
また、コントロールにも使用できますか?
マルチ頑張るね
サブクラス化したいってことかいな。
≫180 できる。 オートメーションとかいう技術だったとおもぅ
サングラス化したい?
いや、サブレをラスク化したい?
おじさんつまんなーい。
しこたま傷ついた202
いや、うれしがってるぞぬ。
206 :
デフォルトの名無しさん :03/09/30 04:35
しつもっ、 CWndの関数の、 Invalidate(); と InvalidateRect(NULL); では、何か動作に違いがありますか?
>>206 ないよ。前者は後者のたんなる省略形。afxwin2.inlに両者の定義あるから見てみ。
便乗 CWnd::RedrawWindow() とは何か違うの? 名前からして再描画にはこれを使ってるけど大丈夫かな。
再描画の必要性を訴える処理:Invalidate 再描画の必要性があるなら描画する処理:RedrawWindow ではないの? よくわからんけど。
210 :
デフォルトの名無しさん :03/09/30 18:47
InvalidateRect は、API の InvalidateRect を呼び出す。 これはウィンドウのクライアント領域の一部または全体が再描画が必要と マークして、その後ヒマが出来てメッセージ見に行くと WM_PAINT が着て るから、そこで描画を行うという手法。本当にお急ぎの場合、メッセージ 見に行くつもりが無い場合には直後に UpdateWindow呼んでも良い。 RedrawWindow は Win32 API の RedrawWindow を呼び出す。 これはウィンドウスタイルを変更したのにフレームがうまく再描画されないとか、 まあ何かわけがあって非クライアント領域も含めて再描画したいときに使う。 これを使うのは WebBrowser コンポーネントをリサイズした後スクロールバーが ちゃんと表示されない、とかそういうとき。普段は使わない。
>>210 特別なケース以外RedrawWindowは使うなということですね。
俺は、エディットボックス内の再描画とかこんな風に使ってるんで、
止めた方が良いみたいですね。
((CWnd*)GetDlgItem(IDC_EDIT1))->RedrawWindow();
MSDN見てたらヨサゲな名前の関数あったので、それ以来ずっと使っていた・・・
213 :
デフォルトの名無しさん :03/10/01 14:47
無料でMFCでの開発が出来る方法無いですか? MinGWとかで。
214 :
デフォルトの名無しさん :03/10/01 14:49
無料厨がMFCを使うの・・・?
俺にとっては趣味で買うにはちょっと高いもんなぁ・・・ 勝手に質問を変えて、VC以外でMFCでの開発ができるツールはありますか? できれば安い奴で。
Symantec C++ for Windows
217 :
デフォルトの名無しさん :03/10/01 20:39
再描画の際にボタンなどのコントロール部分のちらつきが激しいのですが 対処方法ありますか?
WS_CLIPCHILDRENかな
>>218 コントロールのほうにWS_CLIPCHILDRENを指定していたようです(鬱
サンクスでした。
220 :
デフォルトの名無しさん :03/10/01 22:34
ドラッグ中に表示させるイメージがちらちらするのを抑えることってできますか? CListCtrlのオーナードローをやっていてます。 以下のようにOnMouseMoveでドラッグイメージを移動させているのですが、 ハイライトを描画を行うために一度ドラッグイメージを非表示にして、 最後に再表示しているのですが、これだとドラッグイメージがちらちら してしまいます。 エクスプローラではきれいにドラッグイメージが移動しているということは 何か別に方法があるのでしょうか? void CMyListCtrl::OnMouseMove(UINT nFlags, CPoint point) { ... //ドラッグイメージを移動 m_pDragImage->DragMove(point); //ドラッグイメージを非表示 m_pDragImage->DragShowNolock(FALSE); //前ドロップターゲットのハイライトをオフ SetItemState (m_nDropIndex, 0, LVIS_DROPHILITED); //再描画 RedrawItems (m_nDropIndex, m_nDropIndex); // 新しいドロップターゲットを設定 m_nDropIndex = ((CListCtrl*)pDropWnd)->HitTest(point); //ドロップターゲットをハイライト SetItemState(m_nDropIndex, LVIS_DROPHILITED, LVIS_DROPHILITED); //再描画 RedrawItems(m_nDropIndex, m_nDropIndex); UpdateWindow(); // ドラッグイメージを表示 m_pDragImage->DragShowNolock(TRUE); ...
しつもんです。 ダイアログでスレッドを使用しています。 AfxBeginThread();に対するUINT MyControllingFunction( LPVOID pParam );を を作ったのですが、スレッドのパラメタにクラスポインタを与えられないで困ってます ダイアログクラスのメンバ自体がスレッドである書き方はないでしょうか?
static UINT CALLBACK MyControllingFunctionEntry( LPVOID pParam ) { reinterpret_cast< MyType* >( pParam )->MyControllingFunction(); } UINT MyControllingFunction(void);
>>222 ヒント感謝だが、どう調べるかわかりません(汗
AfxBeginThread();で呼び出す関数をコールバックにして
そこから普通の関数を呼び出す?のでしょうか・・・
何かのテンプレートがヒントでしょうか・・・
reinterpret_castはtemplateだったんだよ! な、なんだっ(ry
目的は、スレッド内で計算した内容それぞれの表示コントロールに 数値を反映させるだけなんですが それぞれのコントロールはダイアログのメンバで外部変数で渡す という考えしかなかったので質問しますた
HWNDをスレッドに渡してそのHWNDに対してユーザー定義メッセージを SendMessageするのが常道。
>>226 すいませんスレッドの使い方を間違っていたようです
>226 そういう“常道”って何処に出てるん? 漏れはいつもスレッド作ってるクラス自身のポインタ渡してたYO! その方が楽だし(汗 その場合のデメリットって何? HWND&ユーザ定義メッセージ使う場合のメリットって? 教えてクンで申し訳ないけど、教えてプリーズ!
とりあえずサブスレッドでthis->UpdateData();とかするとアサートしなかったっけ。
タイマーで必要十分な事が殆どな気も…。
AfxGetApp()->m_pMainWndで済ませる私。
AfxGetMainWnd()
>>228 MSDNのMFCのテクニカルノートとかスレッドの使い方とかのあたりに出てる。
MFCのクラスの多くはスレッドセーフではない。
CStringはどうだったっけ?
235 :
デフォルトの名無しさん :03/10/03 16:15
オンラインゲームなどでよくある簡単な個人認証を実装(MFCで) したいのですがサンプルや情報のあるサイトか書籍を ご存じでしたら教えてください。 よろしくお願いします
236 :
デフォルトの名無しさん :03/10/03 18:49
>>228 Send/PostMessage を使うと、メッセージハンドラは当然受け側 Window を
作成したスレッドで実行されるわけで、そうすると色々楽できるから。
もちろんワーカスレッドの方で実行したい処理にはメッセージは使わない。
>>235 ソケットを使ってサーバとクライアントソフトウェアを作る。
238 :
デフォルトの名無しさん :03/10/04 19:40
便乗質問。 スレッドにViewのHWNDを渡して、それをつかって ::SendMessageしてもViewにメッセージがこないんだけど どうしてだろう???::PostMessageならくるのに。。。
ソケットを扱うスレッドはUIスレッドにしてる?ワーカースレッドにしてる? 私はワーカスレッドでWSASetEvent()とかWSAWaitForMultipleEvents()を 使ってるんだけど。
240 :
デフォルトの名無しさん :03/10/04 21:58
誰か235の解答してやれよ ちょうど俺も同じ疑問があったところだしな
>>240 回答に辿り着くための一つのキーワード→aicrypto
>>238 私は>231のようにして得たDialogにメッセージ飛ばしてるけど。
>>242 ::SendMessage(AfxGetApp()->m_pMainWnd->m_hWnd, WM_USER, 0, 0);
なんてスレッド内でやってもやっぱり来ません・・・こちらはSDIですが。
>244 それだとViewには来なくない? GetActiveViewして、そのHWNDを渡してやんないとイケナイと思うんだが
>>244 そりゃこないだろう。つーか素直にHWND渡せばいいのに。
>>244 つーか元の質問でスレッドに渡してるって書いてるのに使ってねーじゃねーか。
いえいえ、元々はViewクラスにある構造体のメンバにViewのハンドルをセットして、 その構造体のアドレスをスレッドに渡しているんです。 CMyView::OnBtn(){ m_cInfo.hViewHandle=this->m_hWnd; AfxBeginThread(MyWorkThread, (LPVOID)&m_cInfo); } UINT MyWorkThread(LPVOID lParam){ CMyInfoStruct *pInfo=(CMyInfoStruct*)lParam; .... ::SendMessage(pInfo->hViewHandle, WM_USER, 0, 0); } という感じです。これがPostMessageならちゃんと受け取ってくれます
CDialogで作ったモーダルダイアログの ウィンドウクラス名 を指定したいのですが、どうすれば良いでしょう? MFCにまかせたdefaultだと、#32770(ダイアログ) なんていう名前になるのですが、これを変えたい。 なんで、ウィンドウクラス名を変えたいかというと、 アプリを多重起動しておいて、そいつらに一度にメッセージを送りたいので、 EnumWindowsで見つけやすくしたいという意図です。 AfxRegisterWndClassを使えばよさそうなんだけど、 呼ぶタイミングがよく分からない。 MyDlg.Create(IDD_xxx, NULL) だとクラス名渡せないし。
>>249 ダイアログリソースにクラス名を指定すれ。
もっとも、その目的のためだけにクラス名を変更するのは
いかがなものかとは思うが。
>>250 それやるとCreate後、ダイアログのメンバーにSetWindowTextしたところで、
ASSERTで落ちてしまいます。なんでだろう?
リソースのプロパティで、「MFCのライブラリを使用」を一旦外して、
そうすると、ダイアログのクラス名が指定できるようになるから、指定して、
で、「MFCのライブラリを使用」をまたチェックつけてあります。
つーか、デフォルトのクラス名、手抜きすぎ。
>それやるとCreate後 よくみたら、Createがエラーで返ってきてました。 Dialogのクラス名指定は、MFCライブラリを使うと出来ないってこと?
>>253 ダイアログを作る前に
WNDCLASS wc;
::GetClassInfo(NULL, "#32770", &wc);
wc.lpszClassName = "クラス名";
AfxRegisterClass(&wc);
CScrollViewクラスで、スクロールバーをドラッグしたときの移動量を制御したいのですがどうすればええですか? SetScrollSizesでも無理っぽい・・・
>>254 できましたぁ。ありあたした〜。
でも、よく考えると、
>>250 >もっとも、その目的のためだけにクラス名を変更するのは
のおっさる通り、
"#32770"のままでも、メッセージは送れますねぇ。
うーん、変えずに行こうかなぁ。
257 :
デフォルトの名無しさん :03/10/06 16:23
>>256 SetProp で適当に印つけとくといいよ。
>>257 そんなAPIがあったとは知らんかったぞえ
259 :
デフォルトの名無しさん :03/10/06 23:12
初心者スレで質問したのですが、返事をいただけなかったので、 こちらで質問させてください。 SDIアプリを作成して、クライアント領域にダイアログを 子ウィンドウとして(WS_CHILD)貼り付けました。 (↓のコードを書きました) ::CreateDialog( this->m_hInstance, MAKEINTRESOURCE( IDD_DIALOG1 ), this->GetMainWnd()->m_hWnd, (DLGPROC)DialogProc ); ところが表示はされるのですが、ボタンを押すことができません。 ダイアログをスタイルで「無効」にしているわけではありません。 Spyで調べても、WM_PAINTなどの描画メッセージは来ているのですが、 マウス関連のメッセージは来ません。 どうすればボタンを押せるようになるでしょうか?
>>257 あ、なーるほど。誤爆の確率がかなーり減らせられるわけでつね。
結局、"#32770"とウィンドウタイトルでFindWindowして、
GetPropで、さらに念のため確認、という風にしました。
めでたしめでたし。
MFC的にはCFormView使えとしか言い様が無いな CFormViewがどうしても使えないならCFormViewのソースを見るだけでも参考にはなると思う
レギュラーDLLのクラスのエクスポートがサパーリわからん。 何故CWinAppから派生してるのだ。 インスタンス切ったとたんにアサーションでるじゃねーかよぉ。 いい本とかサイトとかないっすかねぇ?
レギュラーDLL、MFCサンプル見てなんとなくわかった。 WinAppの派生クラスはいじっちゃいかんみたいだなぁ・・・よくわからんが。 うーむ、何かいつもと違うことやろうとする必ず詰まる罠。
>>261 回答ありがとうございます。
グラフィックを表示している横にボタンやエディットボックスを
配置したいと思ったのですが、こういうのは無理なんですね。
残念。
>>264 寧ろダイアログ内にグラフィックを表示しちゃった方が楽じゃね?
>>264 ViewのOnCreateとかに
HWND hDlg=CreateDialog((HINSTANCE)GetWindowLong(m_hWnd,GWL_HINSTANCE),
MAKEINTRESOURCE(IDD_DIALOG1),m_hWnd,DlgProc);
::ShowWindow(hDlg,SW_SHOW);
DialogProcは
BOOL CALLBACK DlgProc(HWND hwnd,UINT msg,WPARAM wp,LPARAM lp){
switch(msg){
case WM_COMMAND:
switch(LOWORD(wp)){
case IDOK:
MessageBox(NULL,"IDOK","",MB_OK);
return TRUE;
}
case WM_LBUTTONDOWN:
MessageBox(NULL,"LBUTTONDOWN","",MB_OK);
return TRUE;
}
return FALSE;
}
>>264 いやむしろ、質問自体がMFC的でないという点が、スレ違いっぽい。
なぜCDialogを使わないのかと。
268 :
デフォルトの名無しさん :03/10/08 21:46
Visual C++のMFCを使って、D/Aボードに値を出力させたいんです。
>>268 ボードにライブラリが付いている(または別売)から、それ使え。
MFCかどうかは全く関係ない。
270 :
デフォルトの名無しさん :03/10/08 22:17
>>269 ライブラリて何ですか?
マニュアルのこと?
ドライバ
273 :
デフォルトの名無しさん :03/10/09 19:16
お聞きしたいことがあります。
chtmlviewの自作ブラウザで、
別ウィンドウを立ち上げた時に
なぜかウィンドウが後ろに隠れてしまいます。
いろいろ自分で調べてみた結果、
http://techtips.belution.com/ja/vc/0012/ (スレッドのインプット状態を共有する方法)
のサイトにその解決法が書いてあったのですが、
それをやってみてもウィンドウが後ろになってしまいます。
他に方法はありますでしょうか
開発環境:
Windows2000 Professional
Visual C++ 6.0 SP5
ブラウザはASPの表示に使用しており、
HTMLの時には上記のサイトの方法で大丈夫なんですが、
どうもExcelファイルを開いた時になるようなのです
たまに前に来たりして挙動がおかしいです
どなたかわかる方いらっしゃいますでしょうか
274 :
デフォルトの名無しさん :03/10/11 09:43
保守
275 :
デフォルトの名無しさん :03/10/11 16:40
>>275 *.rc が上書き禁止になってるとか、保存に失敗してるとかでわ?
>>276 お答え頂きありがとうございます。
ですが、それは大丈夫です。
ダイアログに対して行った修正(ボタンを追加するとか、ダイアログのサイズを変えるとか)
は保存をすればちゃんと適用されますし、ビルドも通ってきちんと動きます。
ところが、一旦ダイアログリソースを閉じて再び開きなおすと、保存した時と比べて
ダイアログの高さだけが縮んでいるんです。
*.rcをメモ帳で開いてみた限りでは、高さはちゃんとした値で保存されているようで、
リソースエディタが開くときに表示をミスしているような雰囲気です。
>>275 HKEY_CURRENT_USER\Software\Microsoft\Devstudio\6.0
を消してIDE初期化してみたらどうよ?
(VCの設定など全部消えるので必要ならレジストリ保存しといて)
>>278 ご回答ありがとうございます。
さっそくためしてみました。
だめでした(T-T)
モノは試しで
\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\6.0
\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DevStudio\6.0
も一緒に消してみましたがダメでした。
で、さらにモノは試しで、VCアンインストール>OS上書きインストール>VCインストール
してみましたが、やっぱりダメでした。何が悪いんだかさっぱりです(;;)
こりゃOSクリーンインストールだな
282 :
デフォルトの名無しさん :03/10/12 18:49
MFCではなくVCの設定の質問ですが 適当なスレが見つからなかったのでよろしくお願いします VC++6.0のプロジェクトファイル(〜.dsw)をDClickした際 常に新しいウィンドウで開くにはどうしたらいいでしょうか? 今の状態ですと、Test1.dswを編集中にTest2.dswをDClickすると Test1.dswを編集しているウィンドウで開いてしまいます。
283 :
デフォルトの名無しさん :03/10/12 19:17
MCF + OpenGL で、OpenGLのテクスチャは使えないのか? どう頑張ってもテクスチャが表示されない。
>>283 MCFとやらを使わなければ、テクスチャが表示されるのか?
MFCだスマソ ウインドウ領域にOpenGLコンテキストを貼っ付けてるんだが、 立体だけ表示されてテクスチャが表示されない。描画部分をOpenGLのglutDisplayFuncで 描くようにするとちゃんと表示されるのでテクスチャの扱いは問題ないはず。 ただ、MFC+OpenGL部分は既存のものをパクっただけだからじぇんじぇん理解してない。それが問題だ。
両方理解してないなら誰も相手してくれなさげ
289 :
デフォルトの名無しさん :03/10/13 05:59
話にならんな。
291 :
デフォルトの名無しさん :03/10/13 11:18
パソコンからでも携帯専用サイトが見れるようにしたいんだがキャリアってどうなってるかわかるか?
293 :
デフォルトの名無しさん :03/10/13 14:14
OnKeyDown() の中にWinAPIの GetKeyState()を使って矢印キーでのキャラクタ移動を しようとしてるんですが、矢印キーを押しっぱなしにすると、最初にわずかに動いて止まり、 一瞬時間を置いてからスムーズに動き出します。ちょうど、「あああああああああああああ」 と入力するときと同じ感じです。 最初からスムーズに動かしたいんですがどうすればいいんでようか。
タイマー使いなされ
自作クラスにシリアル化関数を追加するとき、 自作クラスのメンバ変数として存在する構造体には、 CArchiveへの「<<」が使えないのは仕様ですか?
>>297 WIN32_FIND_DATA構造体とかなんですが
クラスにしてしまうと今度はメソッド内で既存の関数に
直接渡せなくなるような気がしないでもないですが、
ちょっと試行錯誤してみます
299 :
デフォルトの名無しさん :03/10/16 00:55
CListCtrlをレポート形式で使おうとしています。 表示するデータが大量の場合、メモリが足りないと思います。 件数だけ読み込んでおいて、スクロールバーを動かして 画面に表示されるところだけ逐次ファイルから読み込む・・・ というようなことは可能でしょうか?
>>299 MSDNの「仮想リスト コントロール」を参照のこと。
302 :
デフォルトの名無しさん :03/10/16 16:21
ちょっと質問。 通信系のCOMから上がって来る通知(コールバック)を取りたいんだけども、 COleDispatchDriverとディスパッチマップ書いただけじゃダメなの? 何事も無くイベント来ないんだけども・・・ VC6、WinXP&2kでダメでつた。
303 :
デフォルトの名無しさん :03/10/18 01:01
CBitmapクラス、CreateCompatibleBitmapで大きめのビットマップを作成しようとしたら、FALSEが戻ってきました。 どの程度まで作成できるんでしょうか? Win98等だと16Mって記述があるんですが、Win2k以降では制限に関する記述は見つかりませんでした。 環境はVC6++、Win2kProです。
教頭がカンニングしている学校は、 生徒もカンニングしていいって言うことだよね。 で、その教頭が2度もカンニング見つかっても首にならないって事は、 生徒がカンニングしても退学にはならないって事だよね。
>304 誤爆?
VCのアウトプットウィンドウのように、処理内容をどんどん出力していきたいのですが、 CEditクラスでは、今までの出力結果を取得→出力したい内容を追加してSetWindowText しか無いのでしょうか?
ReplaceSel でも、エディットじゃ内容量制限ある(95系)、もしくはどんどん重くなるぞ。
>>307 おお!
ReplaceSel にこんな使い方があったとは!!
ありがとうございました。
#ちゃんとヘルプを隅々まで読まない自分も悪いけど、紛らわしい関数名つけるM$も・・・(´・ω・`)
int n(1); char* c = "aaa"; CString s = CString(c) + CString.Format(L"%d",n); こんなかんじに書くと error C2275: 'CString' : typedef 識別子に、 クラス メンバ アクセス演算子 (->) を使用しました。 となってしまいます。 これのどこが間違っているのでしょうか。 環境はVC++.netです。
>>310 デフォルトコンストラクタで作成したCStringオブジェクトで
Formatを呼び出しているつもりなのですが
違うのでしょうか?
312 :
デフォルトの名無しさん :03/10/23 00:20
CStringArray ってシリアライズできませんよね。 ar >> m_strarrayData; みたいなのはだめですよね。 普通のCString配列にしろってことでしょうか?
>>311 それなら CString().Format()。
ただし CString::Format() の戻り値は CString ではない。
>>312 CStringArray::Serialize
>>313 勘違いしてました
ありがとうございました
>>314 おお、恥ずかしい・・・。ありがとうございます。
MSDNのCStringArray解説のトップにちゃんと書いてました・・・
しかしやはりこれでは、ひとつのオブジェクトに対して
ひとつのファイルに書き出すしかないんですよねやぱり。
>>316 ん? 普通にこうすればいいんでは?
CStringArray a1, a2;
CFile f;
f.Open(...);
CArchive ar(&f, ...);
a1.Serialize(ar);
a2.Serialize(ar);
それとも各要素ごとに別々のファイルに書きたいという意味か?
それとも、複数の CStringArrayをコレクションクラスに 入れて、SerializeElementsをオーバーライドしてそんなかで CStringArray::Serialize してやればよいのかなと思いました。
>>317 あ、そうか・・・。ありがとうございます。
初心者なんでお馬鹿なことばっか書いてすみません。
VC初心者スレから移ってきました。 ダイアログ(CFormView)、それらに貼り付けたコントロー ル(CTabCtrlやCButton)のサイズを固定にするにはどのよ うに行えばよいでしょうか? 画面のプロパティでシステムのフォントサイズを小さい フォント/大きいフォントのどちらの時も同じサイズにし たいのです。 設計自体云々の話はご勘弁を。 よろしくおねがいします。
SetWindowPos
MFCのスタティックライブラリを使って作られたプログラムを共有DLLで実行するようにしたいのですがどうしたらいいでしょうか? 今のままだとVC6.0ではコンパイルできるのにVC.NETではコンパイルできず困っています。 それから、スタティックライブラリを使ったままではファイルサイズがでかいので共有DLLを使うようにしたいです。
>322 プロジェクトのプロパティ設定でできるんじゃない?
>323 なんかうまくいかないっぽいです VC6.0とVC.NETの互換性の問題かもしれませんけど
VC6.0の設定を変えたら共有DLLでコンパイルできました ただ、.NETでのコンパイルはできませんでした。
>>321 無事出来ました。
ありがとうございました。
まさかこれだけで出来るとは…全く考えられなかったです。
今までスレッド作るときは process.h の _beginthread で作ってたんですが、これを AfxBeginThread に変えた場合、何か価値がありますか?
CWinThreadが使える
CWinThreadの利点は?
330 :
デフォルトの名無しさん :03/10/25 22:57
MFCダイアログベースで、テキストボックスに入力した 文字列を組み合わせ、x-www-form-urlencoded形式でエンコードして URLを生成したいんだけど、その場合2バイト文字の扱いはどうなるんでしょうか。 やっぱり文字コードとかも考慮しなければいけないんでしょうかねぇ…
×文字コード ○キャラクタセット
332 :
デフォルトの名無しさん :03/10/26 01:08
MicroSoft Office2000などで出る「ファイルを開く」ダイアログは ダイアログの左側にアイコンが表示されるようなヤツです。 「履歴」「My Documents」「デスクトップ」...など。 でも 自分のアプリで CFileDialog を使うと、アイコンの無い 少し小さいやつになってしまいます。上記のヤツを使うのは MFCだけじゃムリなんですか?
>332 .NET 2003なら普通にそうなった様な気が
>>333 すみません環境を書き忘れてました。
VC++6.0 Windows2000です。
.NET 2003ですか・・・。
>>335 おお、ありがとうございます。
CFileDialog FileOpenDlg(/* 略 */);
FileOpenDlg.m_ofn.lStructSize = 88;
で、出てきました!
ドキュメント/ビュー を用いずにSDIを作成したいです。ドキュメントに関する部分が不要だからです。
そして、CListViewのSDIと同じ感じにしたいんです。
http://forums.belution.com/ja/vc/000/105/89.shtml この記事などを参考にしていろいろやってるんですがどう作るのかいまいちわからなくなりました。
Viewクラスに相当するものとして CListCtrl派生クラスを利用するとして、
それはCChildViewに置き換えるのかCChildView のメンバとして持つのか。
CListCtrlはいつCreateするのかとか、MainFrameにどうやって結びつけるのかとか・・・。
参考になるサイトなどありますでしょうか。
338 :
デフォルトの名無しさん :03/10/26 15:57
MFCで実行ファイルのアイコンにあるファイルをドラッグ&ドロップしたときに、ファイル名とパスを取得したいんでけど、どうしたらいいんですか?
コマンドラインでパスが渡されるのと同じ
340 :
デフォルトの名無しさん :03/10/26 16:46
338です レスありがとうございます>339さん どのクラスの変数に格納するのですか?
MFCでダイアログを2つ作り、ダイアログ1のボタンから 子ダイアログ2が呼び出されるようなプログラムを作っています。 プログラム1にメンバ変数を作り、ダイアログ2を呼ぶ前に値を代入し ダイアログ2が開いた後 C(ダイアログ1)Dlg dlg; i = dlg.(メンバ変数); としてデータをiに代入しようと思ったのですが、データが呼び出せません。 これはどのようにすれば良いのでしょうか。
>>340 __argc vc 辺りで検索を。
↑アンダースコア2つ
静的メンバにする事で自己解決しますた。
344 :
デフォルトの名無しさん :03/10/26 22:23
CCombpBoxで文字数を制限するにはどうすれば?
345 :
デフォルトの名無しさん :03/10/26 22:24
combp→combo
limittextがありました。失礼…
347 :
デフォルトの名無しさん :03/10/26 22:28
>プログラム1にメンバ変数を作り、ダイアログ2を呼ぶ前に値を代入し 値を代入したのは何処でしょうか。 コンストラクタなら、私にもわかりませんが。
≫341 それって、そういうコードでかいてあるなら 別個のダイアログ1(新たに実体)を宣言した事になるから、 新しい方には値がないってことじゃないの? ダイアログもクラスの一種と考えれば… とおもたYo
>>348 ModalDialogはそれに近いことできるね。
350 :
デフォルトの名無しさん :03/10/29 01:40
VC++6.0 & MDIでの質問です。 子ウィンドウの裏画面を生成しようとおもいCChildViewのメンバ変数に CDC memDC CBitmap memBit を追加したのですがどこで初期化すればいいいいかわかりません。 PreCreateWindowでやろうとstyleにWS_VISIBLEを追加したのですが ウィンドウが表示されないためできません。 どこでやればいいのでしょう。 初期化=CreateCompatibleDC、CreateCompatibleBitmap、SelectObjectです。
コンストラクタだろ。 OnCreateで初期化するのはお勧めできない、ウィンドウが再利用されるたびに複数回呼のでOnDestroyで破棄する手間が増えるからだ。
>>350-351 おいおいPreCreateWindowで駄目なものがコンストラクタでできるわけなかろう。
DCやビットマップの初期化にウィンドウハンドルが必要なんだろう。
えーと、CFormView派生クラスならOnInitialUpdate
それ以外ならOnCreateでいいんじゃないか。
ウィンドウの再利用は考えず、毎度破棄する方がいいだろ。
再利用したいなら自分で初期化/逆初期化のメンバー関数作って直接呼ぶか。
>>351 &352
OnInitialUpdateでできました。
サンクスです。
>>352 おりはデスクトップのDCとか使う。
>>353 OnInitialUpdateはやめとき。
このメソッドはドキュメントが最初に更新されたとき、であって、ビューが初期化されたときではない。
ドキュメントが初期化されるたびに何度も呼ばれる。
いま、ネット上にあったC言語のフーリエ変換のプログラムを実行しようと してるんですけど、読み込ませるファイルが違うらしく、エラーメッセージ がでるんです。 「ファイルのフォーマットがP5とは異なります」とはどういうことですか? 指示どおり、「ファイル形式がPGM、バイナリ形式とする」を守ってるつも りなんですが・・・。
エスパー様、エスパー様、355様がお待ちです。 至急MFCスレまでお越しください。
>>356 とりあえずスレ違いってことで軽くあしらってください。
>>355 >357みたいにpgmの解釈は千差万別。そのプログラムが期待しているp5形式が
あんたの読ませようとしているp5形式と噛みあわないんでないかい?
所詮、英数全角(ry
CListBoxでオーナードローで表示させてるんだけど 視覚効果で「リストボックスを滑らかにスクロールする」 を設定するとマウスホイールやPageUp,PageDownキーで スクロールすると表示が変になってしまうんだが、回避策しらない?
「オーナードローで表示」のやり方がへっぽこなだけだろ。
>>362 MFCサンプルのCTRLTESTのListBoxも変になってるんだけど。
リストをスクロールしようとすると、一瞬リストが逆に
動く。
200×200のint型の配列があるのですが、1か-1で埋められています。 この配列をClientDCに描写したいのですが、StrechBlt以外の方法を使うなどして 描写速度を上げる方法はありませんか?
BoostのRegexで使うmatch_resultsのメンバでstrというのがありますが これをCStringで扱えるようにするにはどのような手段がありますか? CString str; str.Format("HitData [ %s ]\n", results.str(0)); とやったら例外ダイアログが出てしまいます。。(もちろん正規表現検索でTRUEが返ってます)
c_str
>>366 どもです。出来ました。
末尾に終端文字がなかったんですね。
368 :
デフォルトの名無しさん :03/10/30 23:48
>>364 CreateDIBSection で DIB 作っておいて、StretchDIBits かなあ。
BMヘッダ作ってStretchDIBitsでいいような
370 :
デフォルトの名無しさん :03/10/31 00:16
CDocManagerのDoPromptFileNameが複数の拡張子に対応してた。 ちょっと感動した。 実行した。 落ちた。 CDocTemplateのMatchDocTypeが対応してなかった。 結局自分で実装した。 ・・・なんだこのうんこライブラリ・・・。
spy.exeののメッセージリストのように クリックしたら他の選択を解除せずに、 クリックされた行の選択状態だけを変更するようなリストを CListBox(またはその派生クラス)で実現したいのですが この場合って、オーナー描画でWM_NOTIFYを拾って書き換えればいいのですよね? この時、メッセージマップの方はどんな案配で書けば良いのでしょうか。 お手数おかけしますが御助言お願いします。
>>373 リストボックスのプロパティで選択をマルチにしれ。
Viewに持たせていたDialog(モーダレス)をMainFrameに移籍したら、 Dlg所属のオブジェクトがおかしなことになった。 なんか、1つだけアドレスが0x00000004とか変な位置に作られる。 アクセスすると当然の如く0xC0000005: Access Violation。 試しに.hファイル内での記述順序を変えてみたら なぜか0x..04の位置に作成されるオブジェクトが代わった。 しかたがないので、これを利用して、使わないダミーのオブジェクトを用意、 それを身代わりキャラに使ってるけど根本的な解決にはなってないわな。 なんなんだよぅ、この現象は。 環境はVC++6.0 SDI MFC WinXPっす。
モーダレスっつーか寧ろモードレス。恥…。
>>375 意味わからん、オブジェクトって具体的に何よ。
インプレイスに作成されるオブジェクトならアドレスは絶対に連続だし。
ポインタならnewしてる部分見てみたり、どこかでポインタ上書きしてないか確認すればいいし。
そうね。宣言の順序で変わるのなら、ダイアログの宣言の前後に宣言した変数を、 ポインタでいじる時に 領域を超過してアクセスしてるとかだろうね。 悩むよりも先に、該当ポインタの値の変更を条件にブレークかけるヨロシ。 0x00000004にはいつセットされるのか、ってことで。
皆々さん、回答ありがとう。 いい感じで説明不足だったので、もすこし詳細に。 まず、DialogはViewのメンバだったのをMainFrameのメンバに変更。 で、ヤヴァイ位置にできるオブジェクトは.hでの定義順序によって CArray系だったりCStatusBarCtrlクラスのだったり、色々。 0x00000004にできるのは、定義順で「さわるとデス(By SaGa2)」が 確定したオブジェクトの、CObjectの__vfptrとかいう奴。仮想関数ptr。 ((*(CObject*)(&m_Array))).__vfptr ↑これでブレークポイント設定しようとしたら、無効だとか言って怒られた。 マニュアルの「[VC50] SP1:/Og により仮想基本ポインタの初期化に 問題が発生」とかは関係ないよなあ。5.0の話らしいし。 後、リビルドは既にリビルダーの称号を授かれそうな位ヤリ捲ってるよ。
>343さん、遅くなりましたが御助言ありがとうございました! 「拡張」にしてたから駄目だったんですね。勉強になりました。
>343さんじゃなくて>373さんだった_| ̄|○ マ板で吊ってこよう……。
.NETで、ツリービューを右クリックしたときのメニューを作ったり追加するにはどうすればよいの??
385 :
デフォルトの名無しさん :03/11/08 17:33
あげとく。。
386 :
デフォルトの名無しさん :03/11/08 19:09
ユーザーが100個の数値データを入力するのですが、出来るだけ簡単な方法無いでしょうか? 自分が考えたのは @エディットボックスを100個作りそこからプログラムがデータを取得する。 Aテキスト形式である一定の規則(データとデータの間にスペースを入れる等)でユーザーが入力して それをファイルメニューなどから読み込ませる。 ぐらいしか思いつきません。@は作る方も面倒なので今のところAが有力なんですが 何かいいアドバイス下さい。
>>386 100の質問に答えるソフトは検索の邪魔なので
止めて下さい。
>>386 なんで100個も作る必要がある?
1個で十分じゃないか。
>>386 Excelは? インプレイス編集とか、CSV形式とか、手段はいろいろ
>>389 それだ!
エクセルのようなUIにすれ
エクセルなら、百や一万のデータ入力も苦にならないでしょ?
リストボックスとかリストビューとか・・・
>>390 どんなすぐれたUIでも一万ともなるとさすがに苦だろ・・・。
データ量が増えればツールかなんかである程度自動化したいと思うユーザーもいるだろうから、ファイルからの読み込みは必須でそう。
394 :
デフォルトの名無しさん :03/11/09 15:32
VisualC++ 6.0でMFCを使っているのですが メニューバーから設定用やバージョン情報用の別のダイアログを出すには どのようにすればいいんですか。。
>>394 //宣言
afx_msg void OnShowDialog();
//マップ
ON_COMMAND(ID_SHOWDIALOG,OnShowDialog)
//実装
void CMyFrame::OnShowDialog()
{
CMyDialog().DoModal();
}
>>393-393 やっぱりExcelですかぁ。
実を言うと作りたいアプリはグラフみたいなもんなんだけど、当方Cしか出来ないもんで。
Excelはあまり使えないんですよね。意地でもくVCで作ってやろうと思ったんだけど
長いものには巻かれたほうがいいですかね。
VS2003のようなドッキングバーはMFCから使えますか?
>>396 >当方Cしか出来ないもんで。
スレ違い
>>391 数値データが10000通り以上になるので・・・
>>399 VBやVJに対してVCしか出来ないと言う意味です。
MFCで便利な物があればなぁ・・・と
>400 で、リストビュー/リストコントロールはダメなん?
>>401 エディットボックスに直接数字をぶち込んだ方がユーザーとしては楽かな?
1万通り以上の数字の中から100個以上選ぶことになるからね。
例えば100.00〜200.00の間から100個とかね。
Excel使ってCSVで保存したファイルを読ませるのが一番良いかな。
>>402 選ぶんじゃなくて、リストビューをExcelのグリッド風に使えってことじゃないの?
>>403 そうでしたか、スキル不足ですね。勉強してきます。
405 :
デフォルトの名無しさん :03/11/10 22:17
MFCのDialogアプリケーションでCBitmapButtonに フォーカスがあるときにEnterを押すと終了してしまいます。 CButtonではそのボタンのOnClickイベントが上がります。 両者の違いはなんでしょうか。
>>405 Enterを押すとデフォルトボタンが押されることになっているからです。
アクティブなボタンの押し下げはスペースです。
普通のボタンは、フォーカスがあればデフォルトボタンになる(ので、 エンター押下を受け取れる)。 ビットマップボタン(オーナードローボタン)は、デフォルトボタンには なれない(のでエンター押下を受け取れない)。 ボタンのスタイル値を見ればわかるます。
408 :
デフォルトの名無しさん :03/11/10 22:48
今VC++6.0Proで簡単な練習用のサーバーアプリ作ってるんですけど .NETに乗り換えた方が簡単? それともMFCでやったほうが簡単? 実はVC++使い出して(VS6.0Proを買って今まではVB使ってました。) まだ2週間で、どっちに手を付ければ良いか非常に迷ってます。
捕手新党が自民党に吸収されたってね。 ただのヘタレ政党じゃん。
>406>407 ありがとう 勉強になりました。 ちなみにそういうことをやろうと思ったら どうしたらいいでしょうか? IDOKを拾ってそこで全部のボタンについて FOCUSがあるかどうか調べるくらいしかない?
>>410 DM_GETDEFIDに対して、ビットマップボタンがフォーカスを持っている
場合にそれなりの応答をする。
MFC用の(もしくはMFCと使える)UnitTest用のツールの名前を教えてください。 あとは検索します。
VC6.0にて、VBから呼び出し計算結果を返すDLLを作っていますが、 1000件ほど繰り返した場合、メモリ不足になって誤動作をしてしまいます。 new で確保したメモリはreturn前に delete しているんですが、 なんだかもうハマってしまいました。 こうじゃないか、というような意見があればお聞かせ願います。 お願いします。
配列をdeleteするときに[]をつけてないとか
>>412 C++Testとか?
std::vector <std::map <std::string, std::string> >
辺りで値を上げたけど。
レスありがとうございます。
>>414 いえ、再度確認しましたが配列のdelete [] も忘れてはいませんでした。
>>416 マシンによっては500件前後でも出ることを確認しました。
OSは200Proで開発とチェックを行っています。
new, deleteを全て boost::shared_ptr, boost::shared_arrayに
書き換えてみましたが、同じ状態になってしまいます。
パフォーマンスモニターで見ると
ループ中、どんどん使用可能メモリが減っていきます。
どうしたらよいのでしょう?
>>418 どうしたらってメモリリークしてる部分を探すしか・・・
new&deleteしてる関数を晒してみるとか?あんまり長いコードは見たくないけど。
というかリークしてるのはそのnewしたメモリってことで間違いないんだよね?
420 :
デフォルトの名無しさん :03/11/12 15:44
VC++でMFCを使って IRC鯖のDLL(外部からの呼び出しで起動)を作ろうと思ってるのですが DLLの作成は始めて(MFCも実は経験が浅いです。)なので どのように始めれば良いのか困っています。 初めの呼び出しはCWinTreadクラスを使えばいいのでしょうか?
お騒がせしました。 解決しました。 パスのチェックに使っていたAPIでエラーを起こしていたようです。 違うAPIに置き換えたら誤動作は解決しました。 レス頂いた方々はありがとうございました。
423 :
デフォルトの名無しさん :03/11/13 10:17
画面上のピクセル情報を取得したいのですが、 どうすればよいでしょうか?関数があれば教えていただきたいです。 x : 取得するピクセルの X座標 y : 取得するピクセルの Y座標 返り値 : (x, y) にあるピクセル値
426 :
デフォルトの名無しさん :03/11/13 17:13
VS.NET のオプションのような左側にツリーがあり ツリーを選択すると右側が切り替わるようなダイアログはどのように作ればよいでしょうか?
左側にツリーコントロールを作っておいて項目を選択すると 右側の子ダイアログを切り替える。
CodeProject!CodeGuru!
最小化したときにタスクバーの表示を消して タスクトレイにアイコンをいれるプログラムはどうやって作るのでしょうか?
WM_SIZE見てShowWindow(SW_HIDE)してShell_NotifyIcon
仕事はやっ
433 :
デフォルトの名無しさん :03/11/13 23:36
CStringに入っている、"Hüb123"と言う文字列に対し、 SpanExcluding("1") すると全部消えてしまうのですが、 どうしてなのでしょうか?
ウソでした。 ごめんなさいm(_ _)m
435 :
mochi :03/11/14 01:29
プロジェクトがMFC AppWizard(exe)で作られたプログラムなのですが、 WindowsXPやWindows2000では正常に動作するのに、Windows98SEは アプリケーション実行中強制終了されてしまいます。 因みにビルドで以下のような警告がでます。 : warning C4653: コンパイラ オプション '最適化 (1 つ以上の /Oawp[y])' は プリコンパイル済みヘッダーのものと一致しません; 現在のオプションを優先しプリコンパイルのオプションは無視されます。 原因がわかる方、教えてください。
>>435 警告は文字通りの意味。
プリコンパイル済みヘッダと、それ以外のソースファイルの最適化オプションが異なってる。
コンパイルオプションが全ファイル同じになってるか見直した後、リビルドしれ。
強制終了とは十中八九関係ない。
437 :
mochi :03/11/14 01:57
警告は表示されなくなりましたがやはり強制終了されます。 …Doc.cppソースファイルの最後の処理に AfxMessageBoxを入れているのですが、それは表示されます。 最後の最後に何が起こっているのかわかりません。
439 :
mochi :03/11/14 02:19
すみません。情報はデバックすると 例外処理は(初回)はparcor.exe(KEREL32.DLL)にあります : 0x0000005: Access Violation。 と出ることぐらいしかわかりません。 プログラムは未熟なもので。 これで何かわかるようでしたらお願いします。
440 :
mochi :03/11/14 02:23
付け加えます。parcorはプロジェクト名です。
>>439 そんな情報何の役にもたたん。
だいたいAccess Violation見るくらいデバッグのうちに入らん。
実行停止してコールスタックくらい見れ。
リビルドしる。
443 :
mochi :03/11/14 02:53
すみません。始めて聞く言葉で手間取ってしまいました。 コールスタックです。 KERNEL32! bff743ee() PARCOR! 00403918() MFC42! 5f4023d8() MFC42! 5f4022ae() MFC42! 5f402c99() MFC42! 5f402c66() MFC42! 5f402ba2() MFC42! 5f402976() MFC42! 5f4029d7() MFC42! 5f401cea() MFC42! 5f401c73() MFC42! 5f401bfb() MFC42! 5f401bba() KERNEL32! bff7363b() KERNEL32! bff945af() PARCOR! 00408c7a() ちょっと自分の今の知識では勉強不足のようなので 出直してこようかなと思っているんですが・・・ これで何かわかりますか?
(;´Д`)ちゃんとデバッグモードで実行してるよね?そうすると関数名表示されるでしょ? 項目をダブルクリックすると該当するソースに飛べるから、バグがないか調べなさい。
445 :
mochi :03/11/14 03:19
デバッグを開始しまず以下の関数で止まります。 BOOL CParcorDoc::OnNewDocument() 次にアプリケーションのツールバー内にあるコマンドをクリック すると処理が始まりParcorDoc.cpp最後のMessageBoxまで表示します。 その後 例外処理は(初回)はparcor.exe(KEREL32.DLL)にあります : 0x0000005: Access Violation。 と表示されOKを押すと 以下のようなものが出てきてきます。(先頭に黄色い矢印) BFF743EE xadd dword ptr [ecx],eax BFF743F1 dec eax BFF743F2 ret 4 BFF743F5 add dword ptr [ecx],0 BFF743F8 push 0FFh 関数名表示されるタイミングがわかりませんし、 ここでの処理もわからないような状況です。
446 :
mochi :03/11/14 03:31
ちょっと勘違いしてたようです。 コールスタック内の関数をクリックするということですね?
>>445 あのさ。
>>436 で早速言われてるけど、まず「リビルド」(コンパイルの中間ファ
イル:Debugフォルダの中身全部を消去して一からビルドしなおす)してみないと。
そうでないと空回りよ。
448 :
mochi :03/11/14 03:47
>Debugフォルダの中身全部を消去して一からビルドしなおす そうなんですか!? Debugフォルダ内を全て消去してみましたが、変わりませんでした。 ちょっと知識が足りないようなので、デバッグについて 自分で勉強してみようと思います。 ありがとうございました。
449 :
デフォルトの名無しさん :03/11/14 03:50
>>448 > Debugフォルダ内を全て消去してみましたが、
リビルド時にやってくれるから手動でやる必要はないぞ。
>>445 それ、ローカル変数オーバーラン起こしてないか?
スタックぶち壊してると良くそうなるぞ。
451 :
デフォルトの名無しさん :03/11/14 11:22
MFCでダイアログベースのアプリケーションは作り方がわかったのですが、IRCソフトとか、よくある、クリックしたらデスクトップ上を可愛いアイコンが動き回るみたいなアプリケーションは どうやったら作れるのでしょうか? 何で検索すればいいのかも悩んでおります
452 :
デフォルトの名無しさん :03/11/14 11:25
451ですが、Cでできるのかということすらわかりません。 もしできるとしても、今の私では知識不足で作れないとは思うのですが 作れるようになることを目標にがんばりたいと思うのでアドバイスお願いします。
>>451 まずはどっちを作るか決めるとこから悩め。
技術的接点無きに等しいぞ、その2つ。
>>451 そのダイアログでも何でもいいからウィンドウに対してSetWindowRgn後、MoveWindowあたりで自由に動かす。
より難しそうなのはIRCソフトですよね。 作れたらカッコイイなぁーくらいに思ってるんですがきっと無理なので、 アイコンがデスクトップ上を動き回るようなアプリを作れたらいいなぁと思います。 クリックしたらなんかイベントが起こるとか。 この文字で検索すれば参考になるページが出てくる、とかでもいいので、アドバイスお願いします。
>>454 SetWindowRgnとMoveWindowでアイコンの動く領域を指定するんですかね?
InitDialogで指定するんでしょうか。
それをどう使えばいいのかわからないので、頭に置いてだけおきます。
ありがとうございます。
>>457 そーいうソフトがほしいわけではなく、作りたいんです。
作り方を教えてくれるサイトなどあったら知りたいということです。
教えてくれるというか、勉強できるですね。 ないでしょうか。
>>458 457の検索キーのお尻見てみろ!
ウンコも自分で拭けないのか!
>>427 のようにやってみたいのですが
右側の子ウインドウの作り方がわかりません・・・
どこかに、サンプルのようなものはないでしょうか?
>>462 Viewを作って右側に貼ればいいのかな?
TabViewCtrlのサンプルと同じ要領だと思う。
MFCだとその辺が意外に面倒だから、一度
しっかりしたクラス作っておこうと思いつつ
毎度毎度その場凌ぎのクラスを作る罠。
464 :
デフォルトの名無しさん :03/11/15 12:59
ドキュメント/ビュー に関してです。 実際にウィンドウに表示するビューと、印刷/印刷プレビューさせるものが まったく違うものなんです。ウィンドウに表示するビューは CListView 形式で、データベースのビューアみたいなイメージですが、 印刷/印刷プレビューさせたいのは、リストから選択されたデータを使って 文書として整形したものです。 このような場合も、ひとつの ビュークラスで扱うんでしょうか? それともそれぞれ別のビュークラスを作成するんでしょうか?
465 :
デフォルトの名無しさん :03/11/15 14:14
新Visual C++6.0入門のp.262の実行結果が出ません。 教えて下さい。
466 :
デフォルトの名無しさん :03/11/15 14:18
467 :
デフォルトの名無しさん :03/11/15 14:51
エディットなどを作れるコントロールパネルはどこにありますか
は?
469 :
デフォルトの名無しさん :03/11/15 17:11
こんばんわ〜 スレッドー処理部分の関数について教えてください。 CreateThread関数の第3引数にクラス内のメソッド関数 を渡したいのですがエラーが出て困っています。 第3引数に渡す関数は、グローバル関数でないといけないのでしょうか? うまく処理部分をクラス内に隠蔽したいと思っています。 ご指導のほどお願いします。 //////////////////////////////////////////////////// class CThreadDlg : public CDialog{ ...................... DWORD WINAPI fnThread(LPVOID lpV);//スレッドで実行したい関数。 afx_msg void OnButton();//CreateThreadを呼び出す。 ...................... }; DWORD WINAPI TestThread(LPVOID lpV); //ためしに作ったグローバル関数。CThreadDlg::fnThreadと同じ処理 void CThreadDlg::OnButton(){ HWND hThread; DWORD d; //↓エラーが出ます。 error C2664: 'CreateThread': 3番目の引数を 'unsigned long (void *)' から 'unsigned long(__stdcall *)(void *)'に変換できません //hThread = (HWND)CreateThread(NULL, 0, CThreadDlg::fnThread, 0, 0, &d); //↓同じくエラーが出ます。 error C2664: 'CreateThread': 3番目の引数を 'unsigned long (void *)' から 'unsigned long(__stdcall *)(void *)'に変換できません //hThread = (HWND)CreateThread(NULL, 0, fnThread,0,0, &d); //コンパイル成功 & 実行可能 hThread = (HWND)CreateThread(NULL, 0, TestThread, 0, 0, &d); }
>>469 static DWORD WINAPI fnThread(LPVOID lpV);
↑
SDI ドキュメントビューで、ドキュメントクラスをいっさい使わない場合 (データ及びファイル入出力は独自のクラスを使う)、 ドキュメントクラスは適当にほっとけばいいですか? ここだけはコメントアウトしとけ、みたいなのあります?
>>470 c2352のエラーに苦しめられましたが、
何とか回避してクラス内に閉じ込めることが出来ました。
ありがとうございます。
473 :
mfc初心者 :03/11/16 04:39
MFCのシングルドキュメントでMCIを使ってメディアプレーヤーもどき を作りたいのですが、フレーム内に窓が出来てそこで動画の再生が 始まってしまいます。 フレーム内で再生するにはどうしたらよいでしょうか?
インスタンスメソッドを呼び出すのに何が必要か? ・該当メソッドを持つインスタンスのアドレス ・メソッド自身のアドレス この二つを渡さないとダメ。 だったら、どうしたらいいと思う?
>>474 (該当メソッドを持つインスタンスのアドレス->*メソッド自身のアドレス)()
>>471 AppWizardにそういうオプションあるの知ってる?
478 :
デフォルトの名無しさん :03/11/16 13:09
何でもかんでもCObjectから派生させたクラスを使いたがる香具師が居るのだが 正直どういったメリットがあるのか分かる人が居たら教えて欲しい
>>478 CObArrayを使いたがる香具師ならそれが理由だろ。
>>476 そうですか。ありがとうです。
>>476 ドキュメントビューを使わない、という奴のことですか?
ビュークラスは使いたいのです。
481 :
デフォルトの名無しさん :03/11/16 15:21
初めてなんですが、AppWizardの「関数の追加」で 関数に引数を入れたいときどうすればいいですか?
>>481 おいおい、AppWizardに[関数の追加]なんかないぞ、しっかりせい
名前がわからなければVCのバージョンと
例えばメニュー バーの[表示]からなにがし
あるいはCtrl+Wで表示されるダイアログ
のような言い方くらい工夫せい
484 :
デフォルトの名無しさん :03/11/16 18:55
>>482 >>483 詰め込みすぎて頭ん中ごっちゃになってしまいました。
整理して出直してきます。
485 :
デフォルトの名無しさん :03/11/17 17:14
MFCのDockの動作についてなんですが、 ツールバーをDockに入れた場合、 ツールバーって親のサイズを取得して勝手に自分のサイズを決定するので、 最小サイズを得る方法が、無いんですよね。 Dockのコンテナはどうやってツールバーのサイズを決定してるんでしょうか。 ソースを追っても実力不足で読み取れませんでした。
2行目意味不明ですね、書き直します。 MFCのDockの動作についてなんですが、 ツールバーをDockに入れた場合、 Dockのコンテナはどうやってツールバーのサイズを決定してるんでしょうか。 ツールバーって親のサイズを取得して勝手に自分のサイズを決定するので、 最小サイズを得る方法が、無いんですよね。
487 :
デフォルトの名無しさん :03/11/20 19:11
VC++6.0 MFCAppWizard MFC(exe) SDI を使用して、最終的に メニューバーなし、ステータスバーあり、のダイアログを作成したいのですが、 そういうことは、可能なのでしょうか?また、定番の方法があれば教えて欲しいです。 最近MFCを触り始めたばかりなので、MFCで何が出来るのかよくわからないです。 よろしくご指導お願いします。
そもそもなんで最終的にダイアログを作成したいのに始めにSDIを選ぶんだ
490 :
デフォルトの名無しさん :03/11/20 21:27
マウスカーソルについて クライアント領域にあるなし関係ナシに、現在選択されてる カーソル形態を取得する関数ってありますか? リアルタイムでカーソル画像をDIB(というかBITMAP)に書き続けるような処理を作っています
リリース版でビルドすると、CListCtrlクラスのSetItemCount(かEx版)で 1以上の値を与えてSetItemState等何か操作を行うと Access Violationが出るんだが、なぜ? 0なら出ないが、当然コントロールに何も表示されない。(仮想リストのケース) デバッグ版ビルドやランタイムライブラリのデバッグ版を使用したときは問題ない。
問題ないんじゃなくてたまたま動いているだけと思われ。
493 :
デフォルトの名無しさん :03/11/20 23:09
>>490 他のプロセスも含めてですよね。
そういう API はありません。
よけいなモノが付いてきてもいいなら、BitBltがつかえるのだがなぁ。
>>494 BitBlt でもカーソルは取れないケースが多いですよ。
>>492 そうだね。表立たなかったバグがリリース版で顕在化しただけ。訂正する。
ちなみに今回のCListCtrlは、リソースにDDXで結びつけたメンバ。
わかる人がいれば助言求む。
>>496 SetItemState()する前にSetItem()してる?
SteItemCount()だけではだめだったような気がした。
#気だけ。
>>496 InsertItemしてアイテム用の領域を作らないとダメ
>>493 ,494,495
レス有難うございます。
他のやり方を検討してみます。
>>498 あ、いけね、SetItem()じゃなくてInsertItem()だったね。
んー、反射的にレスしちゃうけど、
>>491 は仮想リストって書いてるよな。
InsertItem() するの?
>>491 ステップ実行でデバッグモードの時だけ通る関数内の処理調べておたべ
504 :
デフォルトの名無しさん :03/11/22 12:50
CListCtrlで選択アイテムが変化したときにコールバックされて かつItemDataがわたってくるようなハンドラが会ったと思うのですが どういう奴でしたっけ。クラスウイザードでどうやると作成されますか? お手数ですが教えてください
>>504 CListCtrl絡みの話なので助力になれるかも……
それはLVN_ITEMCHANGEDを処理するメッセージハンドラではないでしょーか。
「NM_LISTVIEW」構造体でコントロールのデータをやりとりするんで、
これをキーワードに検索かければなんかわかるかもしれませぬぞ。
CWnd* hwnd= GetDlgItem(IDD_TEST_DIALOG); CClientDC mydc(hwnd); CClientDC *pdc; pdc=new CClientDC(this); 初心者です。このままでもビルド出来るのですが、releaseとかdelete するならどのように書くのが良いでしょうか?
>>507 これって一連のコードなの?意味不明。
MFC初心者というよりC++初心者?
>これって一連のコードなの? 全体のコード50行の一部分だけです。 ダイアログとウインドウのCDCの設定です。(たぶん) リリース(解放)しなくてよいのかなと気になったので。
要するにdeleteする方法を勉強する気が無いし、 CClientDCがデストラクタでリリースするかどうか調べる気も無いと。
511 :
デフォルトの名無しさん :03/11/25 00:50
ダイアログアプリで「ファイル(F)」見たいなメニュー付けたくなったが可能かいな?
513 :
デフォルトの名無しさん :03/11/25 01:45
>>512 どうやるか教えてください。お願いします。
そんな質問は初心者スレちゃうんかー ダイアログのプロパティ見れ。
515 :
デフォルトの名無しさん :03/11/25 06:08
shell32.dllのアイコンを吸出しそれをコントロール(CListCtrl等)に貼り付ける ようとしてるのですが、アイコンの透過部分が黒く描画されてしまいます。 背景を透過してアイコンを描画したいのですが、どうすればいいのでしょうか? アイコンの吸出しは↓のようにしています。 HINSTANCE hInst = LoadLibrary("shell32.dll"); int hIcon = (int)LoadImage(hInst, (LPCTSTR)25, IMAGE_ICON, 32, 32, LR_CREATEDIBSECTION); CImageList il; il.Create(32, 32, ILC_COLOR, 1, 1); il.Add(hIcon);
>>515 もしやXPでは?
だとしたらビジュアルスタイルに対応してないとComctl32.dllのバージョン5
で描画が行われるので、XPの半透明アイコンがうまく描画されずにそうなる。
マニフェスト追加する必要あり。
ILC_MASKでいいのでわ。
>>516 ,517
レスどうもです。
ILC_MASKもやってみて変化はしたものの背景部が黒く描画されていたものが
白くなっただけでした。
結局、コントロールのアイテムを自分で描画することで解決しました。
>>518 DIBじゃ無理な気が
LoadImageでなくてLoadIconにして、CImageList::SetBkColorなどを試せばよかったはず
>>520 そうそう、背景がSOLIDならSetBkColorを使えばよかったのです。
後で気づきました。
>>488-489 遅レスで申し訳ございません。
ありがとうございます。
MFCアプリを理解する突破口が見えたような気がします。
Windows2000 VisualC++6.0 SDI ドキュメント/ビュー有 印刷有 です。 印刷プレビューの際に、独自のダイアログバーを表示させたいのです。 CMainFrame::OnCreate でダイアログバーを生成して、まずは非表示に しておきます。印刷プレビューの際、CMainFrame::OnSetPreviewModeを オーバーライドして、bPreview == TRUEなら表示、FALSEなら非表示、 というようにやりたいのですけど、問題は上記関数のデフォルトの動作。 pState->dwStates にマスクビットを立ててやれば、既存のコントロールバーは 非表示にされないで残る、ようなんですが、どのビットを立ててやれば よいかわかりませぬ。テクニカル ノート 30では AFX_CONTROLBAR_MASK (AFX_IDW_MYBAR) で、と書いてますが、MFCのソースを見る限りでは ダイアログバーの リソースは AFX_IDW_CONTROLBAR_FIRST から +32までの範囲。 続きます
このときAFX_CONTROLBAR_MASK (AFX_IDW_MYBAR)マクロに 渡してやる IDは、実行時に得られる模様・・・かな? デバッガで追ってみても、そのときの他のダイアログバーや ツールバーの位置や表示状態によって、変わるみたいですよね。 アプローチの仕方が間違ってるんでしょうか。 どうやって、印刷プレビュー時に特定のダイアログバー(コントロールバー) を表示させることができるんでしょうか?
525 :
デフォルトの名無しさん :03/11/28 16:53
mdbを再構成しようと思って試しに以下のコードを実行したのですがうまくいきません。 CDaoWorkspace::CompactDatabase(_T("C:\\test.mdb"),_T("C:\\_test.mdb")); エラー内容は データベースの形式 'C:\test.mdb'を認識できません。 という内容でした。 Access2000にて新規に作成したmdbをVC6で上記のコードを試しました。 いったいなにが原因なのでしょうか?
>>526 まさにその通りでした。
時期からしてそうかも、とは検討がついていたのですが
調べ方が甘かった様です。
ありがとうございました。
528 :
デフォルトの名無しさん :03/11/29 02:52
ダイアログエディタで、コントロールの配置を行った場合、座標とサイズはどこかに保持されるのでしょうか。 rcファイルにそれらしき数字が載っているのですが、その数字をMoveWindow関数の引数にしても駄目でした…。 仕方ないので、とりあえずはコントロール1個ずつGetWindowRectした結果を表示させているのですが、数が多くなってきたのでかなり大変です。 普通はどういう方法で座標、サイズを得るのでしょうか? (タブコントロールに配置するの、結構面倒ですね…)
vector<CWnd*> m_pChild_Wnd_Array; で伺か?
すみません、少し言葉足らずでした。
ダイアログエディタでタブコントロールを使ってをデザインしようとしています。
タブ上に配置するコントロールを実際の位置に置いておこうとするとタブ1枚目、2枚目上の
コントロールが重なってしまい見にくくなってしまいました。
そこで、
(1) 1枚目のコントロールを実際に表示する位置に置き、GetWindowRect関数を用い
すべてのコントロールの座標を得るソースを書き、ビルド後実行して座標を得る
(2) 1枚目のコントロールを端に寄せ、2枚目のコントロールを実際の位置に置き、.....
(3) 全コントロールの位置が求まると、最後にMoveWindow関数で実行時に意図する位置に
コントロールを配置するようにする。
という方法を今やっています。
ただ、コントロールが多くなってきて、かなり面倒くさい作業なので、何か
動的に座標とサイズがあれば、という意味でした。
ビルドして実行してみないとわからないような情報ではないので、どうにかすれば
(rcファイルの数値を計算するなど)得られると考えているのですが、よくわかりませんでした。
コントロールの座標を得るなんて、そんな特殊なことではないので何か定石のようなものがあると思っているのですが…
>>529-530 すみません、今環境が手元に無いので試せないのですが、
現在より手間が減るのであれば大変ありがたいです。
また後ほど実行してみます。
532 :
デフォルトの名無しさん :03/11/29 09:35
MFCで、自分が予想していない場所のメモリ破壊をしていることってありますか?
533 :
デフォルトの名無しさん :03/11/29 09:38
Document-Viewに依存しない作り方をしたいのですが いまいちアイデアが出でこないので質問します いまDoc-Viewでテキストファイルを表示するプログラムがあるんですが それを必ずしもDocクラスがないような場合にも再利用できるように変更したいのですが どういうアイデアがありますかね Docにテキストファイルの読み込み処理 Viewにその表示 って感じで作ってるんですが
>>531 悪いことは言わん、プロパティシートを使え
>>531 ダイアログエディタの座標系を実際の画素座標系に変換したいってことかな?
フォントが決まれば一定の法則性があるけど、動的に対処するなら
予めダイアログエディタの特定の場所((100,100)とか)にダミーの部品を置いて、
そいつをGetWindowRect()で実座標拾えば概ね変換係数が得られるっしょ。
んで、タブ上に配置する部品は、別にViewを作ってそっちで配置、タブ移動で
Viewを貼り付ければいいんでない?
一週間ほど待てるならサンプルを提示できるけど、ぐぐれば見つかると思うよ。
>>531 コントロールを載せた子ウインドウ(orダイアログ)をタブの数だけ
作って子ウインドウ自体を表示/非表示すればいいのでわ…?
>>532 てにをは間違って内科医?
とても正気には見えないぞ。
538 :
デフォルトの名無しさん :03/11/29 16:10
VC++.NETはVC++6より開発効率は良いのですか? 何かが改善されているとかはあるでしょうか?
>>538 開発効率では
.NET 2003 >> 超えられない壁 >> VC6
でしょうな。っというかC++標準準拠度が
上がったのは大きい。
540 :
いなむらきよし :03/11/29 18:02
キケー!
タブブラウザを作ろうとしている初心者です。 環境はWindows2000+VC++6.0+SDIです。 CTabCtrlをメンバに持つCHtmlView派生クラスで作成してます。 ビューに追加したタブに対してHTMLの内容を出力しようと思うのですが どの様な方法で出来るのかが分かりません。 ご存知の方がいらっしゃいましたらご教授願いたいです。
なんでSDI?MDIじゃないのか。
>>542 単純に子ウインドウを使用しない方法が良かったんです。
タブで切り替えが出来る方が操作しやすいかなと。
ふつうは、Tab1つにHtmlViewを一つ割り当てる訳。 TabがいくつもあるのにHtmlViewが一つだと、タブを切り替えるたびに HtmlViewの方はHTMLを読み込まなきゃいけないわけだけど。
>>538 STL絡みのバグが少しだけ直っている
操作性は今の漏れのマシンじゃ6より堕ちてる
Pen4のHTでRAM1G+SATA150以上でないと重いよー
Ctrl+Shif+B より F7 の方がよかった
実行のたびにいちいちリビルドするか聞いてくるし
>>544 参考になります。新たにタブクラスを用意する事にします。
(タブ)コントロールに読み込んだ内容を表示する方法はご存知でしょうか?
>>546 何というか、Windowsについての知識が
圧倒的に不足してる感じ。
TabCtrl(親ウィンドウ)
+→ 子ウィンドウ IWebBrowser2
ってやるんでないの?オープンソースのDonutを
覗いてみるといいと思われ。
ありゃWTLだし。
つーか
>>544 ですでにHtmlView使うように教えられてるんだから、
リファレンスでHtmlViewを見ればいいと思うが。
>>547 度々ありがとうございます。
じっくりとDonutのソースを眺めてみる事にします。
>>548 漏れもHtmlViewいろいろいじったことあるけど
細かいことしようとするとほとんどドキュメントがない
という罠。
Use the source. というわけだな。Donutマンセー。(WTLだけど)
>>545 キーの割り当ては替えられないのかな。
6.0ではカスタマイズできたが、どうなんだろう。
自分もネトゲ開発したいから.NETに興味津々、ではある。
>>552 [ツール]-[オプション]-[環境]-[キーボード]
つーか.NETが手元にないならこれ言っても通じねっか
>>545 SATA150って何よ?
適当に知ってる高性能なデバイスを言ってみたかっただけ?
今はまだATA133/SATAともに帯域余りすぎで性能差は無い。
SATAのタグコマンドもサポートしてる民生用IFは最近出たが
肝心のデバイスのほうがまだでていないっつーの。
>適当に知ってる高性能なデバイスを言ってみたかっただけ? ま、そんなとこですな。 はっきりとした損益分岐点を計算して言ったわけじゃなく 単なる感想・主観をつぶやいたに過ぎましぇんから。 そこでそんなに力みかえられてもご希望には沿えなさそうでふ。 あしからず。
漏れのWin2K、Celeron-850MHz、Mem256MB、IDEはNT系でダメダメな古目の VIAチップという環境だと、VC6ですら時々きびしい。 .NET (2003)はVC6と共存可能だってんで入れてみたが、何をするにも HDアクセス待ちとなって、さっぱダメだ。
VS.NETやOfficeみたいなちょっとカッコいいメニューを作る方法ってどうやるのでしょうか?
CodeProject!
>>557 あの「メニュー バー」は子ウインドウで作ったフェイクだったりする
Spy++のウインドウ検索で魚っ血してみそ
あのメニューバーはダイアログバーのようだね。 ダイアログバーってちょっと難しいよな。難しいというか、MSDNにないのな。 ツールバーみたいに縦横にサイズ変更可能(コントロール再配置?)を やりたいのだけど、うーむ・・・
>560 IEとかのあれならRebarのことでしょ?
そうそう。ダイアログバーってMFC用語でない? リバーにダイアログをバンドしてるだけじゃなかったか。
563 :
デフォルトの名無しさん :03/12/02 09:09
最近MFCプログラムを始めたのですが、 MDIアプリケーションにおいて自分で新しいウィンドウを作成する方法というのはどのような方法があるのでしょうか? MainFrameでOnDropFilesの中でドロップされたファイルを開きたいのですが、 MDI子ウィンドウを作成する命令が見当たりません。というかCreateもLoadFrameもいまいち何を渡せばよいのか…。 そこでAfxGetApp()->OpenDocumentFile(); で開いては見たのですが、どうも気分がすっきりしません。 もっと分かりやすい普通の方法があるような気がするのですが、 ウィンドウ作成のスタンダードなやり方というのはあるのでしょうか? 例えばドキュメントを開くと言った処理だけでなく、 独自のDoc/Viewウィンドウを作成したり、初期化したり、またさまざまな処理を行いたい時、 どのクラスの何を呼び出すべきなのでしょうか? 個人的にはMainFrameで構築するのが筋のように思うんですが… DocTempalteといい内部で管理されてる所がなんとなく分からないんです。 それとも細かい所はやはりWinSDK使った方が良いんでしょうか?
>>563 >独自のDoc/Viewウィンドウを作成したり、初期化したり、またさまざまな処理を行いたい時、
この「独自」という言葉が何を指してるのかわかりませんが、
CWinApp::InitInstance()の中でAddDocTemplateして追加してあるんだろうし
AfxGetApp()->OpenDocumentFile();でいいんじゃないの?
ここからCDocManager::OpenDocumentFileを呼ばれてるので、
その辺のソースを追えばどうでしょう?
Document-Viewから外れたことをしたいのであれば別ですが。
>>564 レスありがとうございます。
ネットで少し検索してみたらテンプレートから直接作成したり出来るみたいですね。
WinAppからテンプレートを参照して作成できれば、複数のドキュメントタイプがあっても出来そうですね。
ダイアログボックスのラジオボタンの値を取得するにはどうしたらいいですか? クラスウィザードを起動しても変数が追加できません。
>>566 DDX_Radioは?
クラスウィザードがダメなら自分で書けばいいよ
APIのGetDlgItemIntみたいなのないですか?
何がだめなの? void CMfctest5Dlg::OnSelectMonthcalendar1(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください CString s; CTime &t; m_cal.GetToday(t); s = t.Format("%A, %B %d, %Y"); m_edit.SetWindowText(s); *pResult = 0; } 't' : 参照が初期化されずに宣言されています。
できますた。 CString s; CTime a; CTime &t = a; m_cal.GetCurSel(t); s = t.Format("%A, %B %d, %Y"); m_edit.SetWindowText(s);
なぜか12日ずれてるんだけどなんで?
>>570 参照にする意味無いよ。
GetCurSelがCTimeの参照を引数に取ってるってんなら
参照のこと勘違いしてるよ。
>>573 CString s;
CTime t;
m_cal.GetCurSel(t);
s = t.Format("%A, %B %d, %Y");
m_edit.SetWindowText(s);
でできますた。感動しますた。C++ってすごいぜ
でも12日ずれてるのは直らないなー(´・ω・`)ショボーン…
他のPCにexe持っていって実行したら問題ない VC6.0と.NETの同居の問題か?
今度は年がずれてるよ。こんなコントロール使わないことにしますた。
雇い主さん、さっさとコイシを馘に。
( ・∀)人(∀・ )通報しますた!
「馘」なんて読むの?
583 :
デフォルトの名無しさん :03/12/03 20:19
MFC初心者です。 Docクラスで描画をしたいのですが CDC* pDC; pDC=GetDC(); これをViewクラスに書くとエラーは出ないのですが Docクラスで書くと「error C2660: 'GetDC' : 関数が不正な 0 個の実引数をともなって呼び出されました。」という エラーが出てしまいます。 対処法がありましたらよろしくお願いします。
>>583 Documentクラスなんか投げ捨てろ。
>>583 対処法は「がんがる」
先は長いぞ。まだ競技場も出ていないな。スタートラインも超えていないかも。
>>583 >Docクラスで描画をしたいのですが
MFC云々以前に設計を何とかしろ。
588 :
デフォルトの名無しさん :03/12/03 20:57
ハーバートギルドの本を読め
CFindFile で ファイル検索してるんですけど "*ワード*" みたいに、「ワード」を含むファイルの検索をしているんですが 日本語でうまく検索しない時があります どうすれば対応できるのでしょうか? Unicode とか関係あるのでしょうか?
>>588 どんな本ですか?
気になる。
「ハーバートギルド」で ググっても何も出ませんでした
幅と知ると、ちがう?
なんだよ 独習C かよ
>>589 "*"で検索して自分でファイル名比較すればよろし。
>>593 でけた。
というか、出来ていたのかも
検索したやつで MoveFile してたけど
なかなか移動しない
検索に引っかかってないのかなと思ったら
同名のファイルがあった。
やられた。
とりあえず、ありがとう。
モル━━━━(゚∀( * )━━━━!!!
CDocumentクラスの使いどころかいまいちわからない。 シリアル化でファイルに保存できるとか言ったって、 アスキーデータを書き出すだけだから使わないし、 変数とかも、DocumentよりViewやDialogなんかの、 実際にそれを使うクラスに持たせたほうが楽なような。 Document/Viewアーキテクチャの思想を全然理解せずに MFCを使ってるから、激しいムダがあるんだろうな。
>>596 俺も最初Documentクラスいらねーんじゃん?と思うことがよくあったけど
とりあえず無理やりあてはめて作ってた。シリアライズいらなくて、
ファイル読み書きは別の方法なんだけど。
それでも無理やりDoc/Viewにあてはめてくうちに、わかってくる。
わかってくると有効に活用もできるし、逆に、自信を持って「使わない」
という判断ができるようになると思う。
よく知らないけど自信を持って使いません。 「Doc/View → データと描画ロジックは分離すべき」 ということさえ分かっていればどうにでもなります。
599 :
デフォルトの名無しさん :03/12/04 01:33
フランク・クロケットの本を読め
600 :
デフォルトの名無しさん :03/12/04 09:34
シリアル化したファイルを読み込むときに、古いバージョンのファイルの時に 例外をスローして欲しいのですが、全然例外を投げてくれなくて悩んでます。 IMPLEMENT_SERIALでVERSIONABLE_SCHEMAとOR設定してないと 例外を投げてくれるんですよね? try{ if(cArc.IsStoring()){ } else { 読み込み処理 } } catch(CArchiveException E){ 古いバージョンの時の処理 } この様な感じなんですがどこか間違っているところがあるでしょうか
ちなみに、IMPLEMENT_SERIALでVERSIONABLE_SCHEMA|14 とか設定して、同じバージョンで保存したファイルを読み込むと、 読み込み処理の最初に UINT uiSchema=cArc.GetObjectSchema(); if(uiSchema!=14){ 古いバージョンの時の処理 } としてもintの-1相当しか帰ってきません
602 :
デフォルトの名無しさん :03/12/04 10:02
IMPLEMENT_SERIAL(CHoge, CObject,VERSIONABLE_SCHEMA|3 /*現バージョン*/) … if(ar.IsStoring()) { } else { UINT i = ar.GetObjectSchema()//保存されてるバージョンを得る; //ここで ver2 ならば2が入る }
CRecordset使ってExcel97ファイルを操作したいのですが カーソルの移動、フィールドの読み込みと挿入はできるものの更新と削除ができません。 CRecordset::Update()を呼び出した時点で保護例外が出てしまいます。 どのようにしたら更新と削除ができるのでしょうか? ちなみにCRecordsetメンバのCDatabaseからExecuteSQL()をつかって クエリ文を送ってみましたが、これも保護例外が出てしまいます。
>>602 601で書き込んだ部分もそのような事なんですが、
なんどやっても-1しか返ってこないんです・・・
保存するときの設定は必要ないですよね
605 :
デフォルトの名無しさん :03/12/04 10:34
-1 が帰るのは スキーマが不明な場合です 一度そのファイルを削除してからもう一度 古いバージョンで保存してみてはどうですか。 >保存するときの設定は必要ないですよね IMPLEMENT_SERIAL(CHoge, CObject,VERSIONABLE_SCHEMA|3 /*現バージョン*/) があるので大丈夫です。
クレー射撃のゲームを作ってくれ
ゲームかよ
[ウインドウ]-[新規ウインドウを開く] これが出てこない >このスレ しくしく
スコット・メーダーズの本を読め
>>609 真の教えて君への道のりはまだまだ遠いぞ!
犬童文子の本を読め
MFCでの印刷の際、どのプリンタでも文字のサイズを一定に するにはどうしたらいいんでしょう?罫線を引くときなんかは CDC::SetMapMode(MM_LOMETRIC); を指定してるので大丈夫なはず(?)ですが。 いろいろググってみてるんですが、CFont::CreatePointFont で 作成したフォントなら一定にできる・・・んでしょうか?
どのプリンタでも一定のサイズになるようにフォントを作るんだよ。
>>614 うーん、やっぱりフォントの作り方に答えがあるんですか。
CDCに何かを設定するんではなくてですか?
616 :
デフォルトの名無しさん :03/12/04 23:22
MSVC++6.0ってオークションしか入手方法ない?
.NET で何が不満?
619 :
デフォルトの名無しさん :03/12/05 15:47
すみません、教えてください。 ワーカースレッド内部でmdbを最適化したくて CDaoWorkspace::CompactDatabase(lpPath,tmpPath); という命令を書いています。 引数には思う値がきちんと通っているのですが なぜか二度目で落ちてしまいます。 具体的にはvoid PASCAL CDaoWorkspace::CompactDatabase内部の ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ DAO_CHECK(pDaoState->m_pDAODBEngine->CompactDatabase(V_BSTR(&varSrcName), V_BSTR(&varDestName), COleVariant(lpszLocale, VT_BSTRT), COleVariant((long)nOptions), lpszPassword != NULL ? (VARIANT)COleVariant(lpszPassword, VT_BSTRT) : _afxOptionalVariant)) ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ ここでAccess Violationで落ちてしまいます。 気になる点は1度目は if (pDaoState->m_pDAODBEngine == NULL)がtrueと評価され InitializeEngine();が実行されると言う点です。 仕方なく無理やり二度目もInitializeEngine();を実行しても同じようにエラーがでました。 なにか根本的に理解が足りていないのでしょうか? 教えていただけませんか?宜しくお願いします。
環境はWinNT4.0(SP6a) VC6 SPなし mdbはAccess2000形式です。 //以下の文を書き忘れていました。 //Daoのバージョンを3.6に設定する為に AfxGetModuleState()->m_dwVersion = 0x0601; 宜しくお願いします。
>>621 確かにスレッドセーフではないと思うのですが
今回はワーカースレッドでCompactDatabase関数を
実行しているだけで複数のスレッドから同時にCDaoクラス内のオブジェクトに
アクセスしているわけではないので大丈夫だと思っているのですが
どうでしょうか?
>>603 かなり前にも同じ質問があったような。
変更、消しができないのは仕様だったと思う
624 :
デフォルトの名無しさん :03/12/06 21:26
初めて書き込みさせていただきます。 学校の卒業課題で印刷するプログラムを作る事になったのですが、 どうやって作ったらいいのか分かりません。 OnDrawと言うのを使うらしいのですが、どなたか参考になるサイト教えて いただけないでしょうか。 ダイアログベースでEditに文字を打ち込んで 自分で作った印刷のボタンを押して印刷できるくらいでいいです。 使っているのはVisual C6.0でwindows98です。 よろしくお願いします。
プッシュボタン等のコントロールを操作不可(Disabled)にしたいのですが、 コントロール変数を使わずにSendMessage等で行いたいのです。 その方法を教えて欲しいです。お願いします。
GetDlgItem EnableWindow ModifyStyle GetWindowLong SetWindowLong
CToolBar..GetItemRect()とTBN_DROPDOWNで得られたNMTOOLBAR.rcButtonって結構違うのは何でだろう。
ネタじゃないです。 本当に分かりません
4ヶ月くらい勉強すればわかるようになるよ。
CTabCtrlについてなのですが、 ビューの中にタブコントロールを貼り付けたいと思い ビューのOnCreate時にCTabCtrlをCreateして、 タブ自体は表示されるようになりましたが切り替えができません。 MSDN Libraryにタブコントロールはメッセージ(NM_CLICKなど) を親に送るのでOnChildNotifyでそれを処理すればよいとあったのですが メッセージが送られていません。 何かご存知の方いらっしゃらないでしょうか?
OnChildNotifyは親から呼ばれるので、CTabCtrlの派生クラスでハンドルする。 親(ビュー)で処理したいならOnNotify
634 :
デフォルトの名無しさん :03/12/07 23:31
質問です。 IPv6で通信を行うために、winsock2が必要なんですが、MFCがwinsock2.0 には対応してない様子ですね。この場合なにか代替手段はないでしょうか?
すいません、書き忘れました。 MFCは必ず使うことを前提にした話です。
>>625 ネタだよね?
って言うってことはそんなに簡単な事なんですか?
MDIだったら印刷って言うのが最初からあるのですが、
ダイアログベースだと印刷が無くて…
>>638 ありがとうございます。
いま見たのですがホトンど本の紹介とかでした。
明日の朝までに作らなきゃいけなくて…
知ってる方がいましたら使う関数とか教えていただけないでしょうか?
お願いします
>>640 ありがとうございます。
あと5時間くらいあるので頑張ります!
>>640 本当にありがとうございました。
あまり凄くは無いですがいちを完成しました。
644 :
デフォルトの名無しさん :03/12/08 11:35
VCはじめて3ヶ月くらいの初心者なんですけど、すいませんが教えてください。 ダイアログを作成して、その上にピクチャーボックスをおいて、BMPを 表示したんですが、さらにこの上にEDITボックスを重ねて表示する方法はないでしょうか? または、Textout関数で、改行を含んだ文字列を出力する方法はないでしょうか? 諸先輩方、よろしくお願いします<(__)>
> または、Textout関数で、改行を含んだ文字列を出力する方法はないでしょうか? あるよ。 行ごとにTextOut
646 :
デフォルトの名無しさん :03/12/08 11:58
>>645 1バイト文字と2バイト文字が混じってたりしてたら
644クン、泣いちゃうぞw
てか、文字列長くなると死ぬよな、その方法だと。
DrawText() でいーんじゃね?
>>647 様
ありがとうございました。
CRectで縦長の四角形を指定してあげることで
縦書きにすることができました。
CRect rect5;
rect5.top = 10 ;rect5.bottom=300 ;
rect5.left = 121;rect5.right= 26 ;
pc->DrawText( buffer , rect5 , DT_WORDBREAK );
>>648 に自レス。left=121→left=12
それは縦書きじゃなくて、毎行一文字の横書きじゃないのか?
>>648 縦書きの場合はフォントが違うはずだが。
メトリクスがまるで違うから新聞紙切り抜いた脅迫状みたいになるよ。
オマエノ娘。ハ預カッタ。 ハァハァサレタクナカッタラ、つんくヲドウニカシロ
653 :
デフォルトの名無しさん :03/12/09 09:42
エイリアスを作る方法で union{ struct{ int A, B, C, D; }; int buf[4]; }; こういうやり方がありますが、例えば基底クラスに class Base{ public: int buf[4]; }; があったとして、その派生クラスでクラスサイズを増やさずに A,B,C,Dの別名を付ける方法はありますか?
>>653 class Derived : public BASE
{
public:
int& A() { return buf[0]; }
int& B() { return buf[1]; }
int& C() { return buf[2]; }
int& D() { return buf[3]; }
};
Derived d;
d.A() = 1;
d.B() = d.A() + 10;
d.C()++;
>>653 よ、654が言っているのはOOPの基本だぞ
「クラスサイズを増やさずに」
653のクラスサイズがインスタンスサイズに聞こえてならん どう違うのか本人に聞いて見れれば寝られそうなんだが・・・
>>654 なるほど。関数で呼び出す方法は気がつきませんでした。
>>655 そうなんですか?
クラスは構造体の便利版くらいにしか思っていなかったもので……
>>657 えーとインスタンスのサイズです。
同じストライドでないとアクセスに困るもので…。
クラスサイズというとどういう意味合いになるんでしょうか?
たぶん sizeof() で得られる値だろうね。
value クラスでかつメモリ上でのバイト並びに意味があるクラスなんでしょう(全て憶測)。
>>654 で良いと思う。
>>658 ここはMFCスレってことで・・・
ウインドウクラスを作るよな
ウインドウオブジェクトも作るよな
C++的に言うとstaticと非staticなわけだが
661 :
デフォルトの名無しさん :03/12/09 23:41
__stdcallと明示的リンクについて教えてください。 DLLからエクスポートする関数は__stdcallにするっていう決まりがありますが、 __stdcallをつけると関数名が_func@2みたいな感じに修飾されてしまいますよね。 で、これをGetProcAddressするときって、 GetProcAddress(hModule, "_func@2"); って書くのが正当な方法でしょうか。 それとも_stdcall(またはWINAPIマクロ)を付けた上で、DEFファイルに、 func って書いて修飾させないようにするのが正当な方法なんでしょうか。
>>661 後者!
GetProcAddress(hModule, "_func@2");
↑こんな気持ち悪いの(´・ω・`)ヤダ
>>661 DEFファイルで別名つける。ってのはともかくとして、
>DLLからエクスポートする関数は__stdcallにするっていう決まりがありますが
そんな決まりあったっけ。。。
664 :
デフォルトの名無しさん :03/12/10 01:05
>>662 レスありがとうございます。
DEFファイルはちゃんと使ったことがなくて、
過去の遺物という認識でしたが、この場合はほかに
選択肢がなさそうですね。メンテの仕方勉強しなくては。
665 :
デフォルトの名無しさん :03/12/10 01:14
>>663 手元のMSDNには以下の記述がありました。
(MSDNから抜粋)
DLL から関数をエクスポートする方法には、次の 2 つがあります。
モジュール定義ファイル (.DEF) を作成して、DLL のビルド時に .DEF ファイルを使う (名前ではなく、序数で DLL 関数をエクスポートする場合)
関数の定義に __declspec(dllexport) キーワードを使う
上のどちらかの方法を使って関数をエクスポートする場合は、必ず __stdcall 呼び出し規約を使います。
>>661 __stdcallでなくても、呼び出し元と先で一致させればなんでもいいと思うけど。
user32.dllからエクスポートされてるwsprintfなんて__cdeclだし。
>661 typedef int (__stdcall * MYFUNC)(int, int); MYFUNC lpFunc = (MYFUNC)::GetProcAddress(hModule, "_func"); >663 >665 C以外の言語からも呼び出すライブラリであるなら__stdcallにする。 Cからしか呼ばないのであれば、__cdeclでよい。 要するに利用側の言語の関数呼び出し規約による。
668 :
デフォルトの名無しさん :03/12/11 16:09
VC6.0で、ファイルのエラー原因を得るグローバル関数を別ファイルで作ろうと思いました。 でもコンパイルしたところ、 「致命的なエラー C1010 プリコンパイル済みヘッダーの検索中に予期せぬ EOF を検出しました。 BSCMAKE: error BK1506 : コンパイラは、指定されたファイル '.\Debug\hoge.sbr'を開くことができません。: No such file or directory 」 とか出るんです。 //////////hoge.hの内容//////////// #include "stdafx.h" void GetErrorData(CFileException *pErr, CString *pStr); //////////hoge.cppの内容///////////// #include "hoge.h" void GetErrorData(CFileException *pErr, CString *pStr) { switch(pErr->m_cause){ case 〜: ... } } という内容なのですが、どうしたらよいでしょうか。MSDNのC1010をみても意味が分からないです・・・ Viewクラスのcppファイルで #include "hoge.h" としてあります。
>>668 #include "stdafx.h"
>>669 cppファイルにもそれを追加したところコンパイル通りました。
ヘッダーファイルの方に stdafx.h がインクルードされているから大丈夫だと
思っていたんですが違ったんですね。どうもです
671 :
デフォルトの名無しさん :03/12/11 22:56
CWnd派生クラスでデバイスコンテキストにフォントをSelectObjectしておきたいのですが、 デバイスコンテキストを触っても良い初期化用の仮想関数とかメッセージハンドラはなんですか?
672 :
名無し@沢村 :03/12/11 23:05
673 :
デフォルトの名無しさん :03/12/11 23:07
えええええ?! まじですか?ネタですか?
>>671 >デバイスコンテキストを触っても良い初期化用の仮想関数とかメッセージハンドラ
の意味がわからん。
普通は必要な時に借りてきて、使い終わったら返すものだ
>>676 あいにく借りたものは返さないタチでな。
結局、OnPaint()だな
>>619 です
未だに悩んでいます。
怪しいところとかありましたら指摘していただけませんか?
環境の問題か!と思い.NETでコンパイルしてみましたが
やはり同じ状況です。
あと.NETなので必要のない以下の一行は削除しました。
AfxGetModuleState()->m_dwVersion = 0x0601;
今の環境は.NET Access2000形式 WinXPです。
>>621 でスレッドセーフじゃないと指摘されましたが
同時にCDao〜にアクセスする処理はしていません。
何故一度目では大丈夫で二度目はダメなのでしょうか?
何かしら解放する処理が必要なのでしょうか?
一度目のワーカースレッド内では何度CompactDatabaseを呼び出しても
問題はないです。
よろしくお願いします。
680 :
デフォルトの名無しさん :03/12/12 04:39
いくつかのペインで区切られたアプリに挑戦しようかと 考えておるのですが、ペインに区切ったあとで、それぞれの 領域を CView もしくはその派生クラスに関連付けしますけど、 漏れの作りたいアプリでは 1つのペインに複数のコントロールが 同居する予定なのです。そういう場合は CView にして、 自分で個々のコントロールを配置するということになるんでしょうか? ところで非MFCでペインを作るのは、自分で境界に線を引くことに なるんですか? ペイン用のWin32APIなんかあるんでしょうか?
>671 借り物ならOnPaintなりその時々のハンドラ内 自分のものなら好きにすればいい >680 ペインの内容による あと、WindowsのGUIの大半は、MFCとは関係ない MFCは用意されているウィンドウクラスをラップしてるだけ
>>679 DAO は「スレッドセーフじゃない」んじゃなくて、マルチスレッドに対応していない、
んじゃなかったっけ(なにかマルチスレッドで動かすとまずい実装になっている)。
ワーカプロセスを使うのが簡単では?
683 :
デフォルトの名無しさん :03/12/12 15:04
分割ウインドウに関してなのですが、初期設定値が反映されない みたいなのですが、どうしてなのでしょう? OnCreateClient関数で次のように設定しています。 表示はされるのですが、横の区切りが上にひっついた 形になってしまいます。 m_SpWndA.CreateStatic(this, 2, 1); m_SpWndB.CreateStatic(&m_SpWndA, 1, 2, WS_CHILD | WS_VISIBLE, m_SpWndA.IdFromRowCol(0,0)); m_SpWndB.CreateView(0,0, RUNTIME_CLASS(CSampleView), CSize(100,200), pContext); m_SpWndB.CreateView(0,1, RUNTIME_CLASS(CSampleView2), CSize(100,200), pContext); m_SpWndA.CreateView(1,0, RUNTIME_CLASS(CSampleView3), CSize(200,100), pContext); return TRUE;
684 :
デフォルトの名無しさん :03/12/12 15:13
>>683 なぜか初期の段階ではぜんぜん関連付けを
していない デフォルトのCChildViewが表示
されているみたい。なんでだろう。
詳しく説明した本ないですか?
ゴールデンレター このスレを見た人はコピペでもいいので 30分以内に7つのスレへ貼り付けてください。 そうすれば14日後好きな人から告白され、17日後に あなたに幸せが訪れるでしょう
>>682 なるほど。
ところでワーカープロセスってなんでしょうか?
検索してもどうもそれっぽいのにヒットしませんでした。
外部DLLかなにかでCDao〜を呼んで処理させるようにして
実行アプリケーション側ではCreateProcessでそれを立ち上げて
監視する、という風に想像したのですが
この解釈で正しいでしょうか?
688 :
デフォルトの名無しさん :03/12/12 22:51
質問です。 CListViewの派生クラスのビューのスタイルをLVS_REPORTにしてInsertItem でアイテムを追加しようとしてもできません。でもLVS_REPORTを指定しない 場合はうまくいきます。また、LVS_REPORTでもカラムを作っておくと同様に うまくいきます。 LVS_REPORTの場合にカラムなしでアイテム挿入はできないのでしょうか?
>カラムなしでアイテム挿入はできないのでしょうか? (確か)できない。代わりにカラムを表示しない オプションがどっかにあった(と思う)。
690 :
デフォルトの名無しさん :03/12/13 00:04
>>683 どうやら、
(1) 上下2つに区切る (2行1列)
(2) 下の行を左右2分割(1行2列)
これだと size が正常に機能するようです。
しかし
(1) 上下2つに区切る (2行1列)
(2) 上の行を左右2分割(1行2列)
これだと、うまくいかない。(1)で作成した
境界線が一番上に張り付いたように
なってしまう。
サンプルプログラムをみても、この形式のサンプルは
みつけることができませんでした。後者の形式で
成功したサンプルのお持ちの方いらしたら教えてください。
これからでかけるので、とりあえず、ここまで
レポートしておきまふ。
691 :
デフォルトの名無しさん :03/12/13 00:37
>>690 もうちょっと時間があったので、MSDNに収録されている
サンプルアプリのVIEWEXで、
>>690 の後者のように
区切り方を変更してみましたが、同じ症状でした。
FTPクライアントのように、上が2列、下が1列の
ウインドウを作るにはどうしたらいいんでしょうか?
過去ログにMoveWindowで動くというカキコがあったので
次のように試してみましたが、特に反応はありませんでした。
m_SpWndB.GetPane(0,0)->MoveWindow(0,0,100,200,TRUE);
test
>>691 うろ覚えだけど、RecalcLayoutとかはダメ?
>>687 ありがとうございます。
私も見つけたのですがこれはMFC4.2についての記事なので
既に解決しているのではないかと思っていました。
>>682 のワーカープロセスっていうのは
>>686 の解釈でいいでしょうか?
695 :
デフォルトの名無しさん :03/12/13 12:30
>>693 debugでトレースすると、ちょうど
OnCreateClientが終了した直後にMFCのソースの中で
RecalcLayoutが実行されているようです。
作成後に上下の区切り線を移動することはできるので
どこかに何かメッセージを送ると遠隔操作できるのかも
知れないのですが。
696 :
デフォルトの名無しさん :03/12/13 14:47
ヘッダファイルをインクルードするとき、いちいち手書きでそれを必要とする ファイルに書き加えているんだけど、もっとスマートな方法はないですか?
697 :
デフォルトの名無しさん :03/12/13 14:54
#include "allheader.h"
VC使って、ドライブイメージ作成アプリを作りたいんですが、 普通のファイルとは異なるため、方法がわかりません。 この関数、この方法を使え、等教えてください。
\\.\PHYSICALDRIVExで開けばいい
まさしくそんなツールを作ろうとして、テスト時に先頭セクタ飛ばして Windowsさえ立ちあがらなくなった私_/⌒|○
704 :
デフォルトの名無しさん :03/12/13 20:51
>>695 一応解決しますた。
Part1スレにも書いてありましたが
m_SpWndA.CreateStatic(this, 2, 1);
m_SpWndA.SetRowInfo(0, 400, 100);
m_SpWndB.CreateStatic(&m_SpWndA, 1, 2, WS_CHILD | WS_VISIBLE,
m_SpWndA.IdFromRowCol(0,0));
というように2番目の分割をする前に、
最初の分割に対して、SetRowInfo を実行するとよいようです。
CreateViewの size は、widthに関しては有効ですが、
heightに関しては無視されてしまう模様。逆に、2番目の
分割に関してはSetColumnInfoで分割位置を指定しようと
しても失敗するようです。こちらは CreateViewのsizeを
使わないとダメらしい。
随分クセがあると感じてしまうな。
705 :
デフォルトの名無しさん :03/12/15 20:42
ちょっと質問させて下さい。 くだらない質問で申し訳ないのですが・・・ 時間のかかる処理に、「しばらくお待ち下さい」というダイアログを出して、 処理が終わったら閉じる、と言うことをしたいのです。 dlgWait.ShowWindow( SW_SHOW ); /* 処理 */ dlgWait.ShowWindow( SW_HIDE ); dlgWaitに CStaticで文字を貼り付けています。 しかし実行してみると、dlgWait に何も表示されてないまま、関数を抜けてしまいます。 これってスレッドで処理するしかないのでしょうか? 簡単な方法があれば、教えて下さい。
>>705 処理の合間にPeekMessage使ってメッセージ処理
707 :
デフォルトの名無しさん :03/12/16 10:23
CBTProcフック関数を使って、バージョン情報コモンダイアログに 動的にエディットコントロールを生成しました。 しかし、生成したエディットコントロールに何等かのイベントが発生すると、 その親ウィンドウであるダイアログが閉じてしまいます。 これを閉じないようにする方法があれば教えて下さい。
>>706 うまくいきました!
ありがとうございます。
>>707 しらんコントロールからの通知メッセージを受けて終了しちゃってるんだろうね。
間に一枚 static コントロールでもはさんだらどうでしょう?
710 :
デフォルトの名無しさん :03/12/16 11:50
インクルードファイルが多すぎます・・・4つしかインクルードしてません。 なぜ?????
>>709 上手くいきました!
どうもありがとうございます。
warning C4182: #include のネスト レベルは 363 です; 無限再帰の可能性があります
ワロタ
VC6でMFCを使用して開発しています。 動作対象OSはWindows98以降です。(Windows95、NT4.0は対象外) この環境でもMFCの共有ライブラリは一緒に配布すべきでしょうか?
クリーンインスコでMFC42.DLLが入るのはどっから?
719 :
デフォルトの名無しさん :03/12/18 15:19
VC6なんですが、ダイアログエディタでコンボを貼り付けて、 オーナー描画を"固定"または"可変"に設定してビルド&実行すると "いいえ"の時よりコンボの高さがでかくなるんですけど、 これ一体何なんですかね。 回避方法がありますでしょうか。
>>719 そりゃオーナー描画だから、フォントを指定してやらないと。
デフォルトではシステムフォントの高さになってるんだyo
722 :
デフォルトの名無しさん :03/12/18 19:57
>>720 ご意見ありがとうございます。
いやそれがですね、フォント指定してるんですよ。
で、エディット部分に表示される文字は指定フォントになっているんだけど、
枠がでかいままなんです。フォント指定した後にSetWindowPosition()とか
やってもちっこくならないし、なんだかなぁ・・・。
てか、そもそもエディットの部分はオーナー描画の対象ではなく、勝手に
描画されますよね??
>>722 ああ、
CComboBox::SetItemHeight
>nIndex を -1 にすると、コンボ ボックスのエディット コントロール部分の高さ、またはスタティック テキスト部分の高さを設定します。
これを明示的にやらないとダメだわ
>>723 ぉおー。できました。これは見落としていましたです。
ありがとうございます。助かりましたぁ。
>>722 ついでにマメ知識。
「コンボボックスを MoveWindow とか SetWindowPos してもコンボボックス自体の高さは変わらず、
指定した矩形の高さはドロップダウンリストが表示される時の最大高さになる」
VC++本を探していますが知りませんか? win32apitとMFC関数が全部載っていてその使い方の解説と引数の詳細が載っている。 Cの関数辞典みたいなやつです。
727 :
デフォルトの名無しさん :03/12/20 22:29
CArchiveを使ってCStringをファイルに出力しようと //arはCArchive ar << CString("hoge\n"); 見たいに書くと hogeの前に何か変な文字が出力されてしまうのですが なぜでしょうか? 環境はVisual C++.NETです。
アプリを作っててだいぶsourceが長くなってきたんですが、 コンパイル時に下記のようなエラーがでてしまいます。 c:\program files\test\test.h(31) : error C2061: 構文エラー : 識別子 'testStack' がシンタックスエラーを起こしました。 別に間違ったコード書いてるわけじゃなさそうなんですが。 エラーの部分とか、別のところとか、ちょっと短くしてやると正常に出来るんです。 どういうところ確認すべきでしょうか。
sorry, 見なかったことにしてください。
残念だなー女みたいに突っ込みどころ満載だったのに
733 :
デフォルトの名無しさん :03/12/21 04:10
モードレスダイアログからモーダルダイアログを呼ぶと、
後ろのモードレスダイアログの再描画が行われなくなりました。
ウェブで検索してみると
http://forums.belution.com/ja/vc/000/052/49.shtml のような事例がありまして、モードレスダイアログでモーダルの動作をするようにすれば良い、
というようなことが書いてあるのですが
実際にはどのようにすれば良いのでしょう?
MFCではモーダルダイアログもモードレスダイアログで行ってる、みたいな記述も
いくつかのサイトで見つけて、何やら頭がこんがらがってます…
>733 ユーザー見えは以下のような違いだから モードレスで起動して親Windowをdisableしてダイアログ終了時に enableにすればいいんじゃない? そうすればユーザーから見ればモーダル。 モーダルの動作:ダイアログを閉じるまで親Windowsの操作ができない モードレスの動作:ダイアログを閉じなくても親Windowsの操作ができる
モーダルうぜーからやめれ
>>734 ありがとうございます。
モードレスダイアログをSHOWする前にEnableWindow(FALSE)を呼んで、
閉じた後にTRUEにすれば良いわけですね。
手元に環境が無くすぐに試せなくて残念なのですが、
この方法で親ウィンドウ、モードレスダイアログの前後関係は保たれると考えてよろしいのでしょうか?
>>735 Windowsプログラミングの知識なんて無いのに無理やりやらされて…
私も本気でやめたいです…
>>737 「俺はモーダルの作り方を知らない」ということ
使いづらいんだよユーザとして モーダルなんかPGのエゴだろ 面倒くさがってねえで ちゃんとモードレスにしとけ
あと、メニュー、ボタンなどのグレー表示な 何の説明もなくユーザを締め出す 最悪なインターフェース
>>733 CWnd::RunModalLoop() でモーダル化できる
>MFCではモーダルダイアログもモードレスダイアログで行ってる、みたいな記述
CDialog::DoModal() のソース追うと分かると思うよ
おかしい人は放置しましょう。
>>742 反論がなくなったバカが一矢むくいる唯一の道=個人的な人格批判
・・・それなりの相手に言われなきゃこたえないんだけどねw
UIの話してる時点でスレ違いバカです。
コントロールってのは適材適所なんです。 アホな人にはそれがわからんのです。
744が部下だったら今までに俺が作ったアプリのモーダルダイアログを すべてモードレスにして不都合無く動くように作り直させる。
744が上司だったら今までに俺が作ったアプリのモーダルダイアログを すべてモードレスにして不都合無く動くように作り直させられる。
749 :
デフォルトの名無しさん :03/12/22 23:50
23日の夜を、クリスマスイブイブって得意顔で言うおっちゃんっているよなw
>>749 イブは単に夜の意味、但し、一日の始まりが夕方という概念での夜なので
XmasEveは今の時制では前夜になる。
ってことだよね? で、それがMFCとどう関係が?
751 :
デフォルトの名無しさん :03/12/23 05:46
モードレスのメッセージボックスはいやだな
752 :
デフォルトの名無しさん :03/12/23 10:26
質問です。 googleツールバーみたいな、IEをツールバーを作りたいのですが、 MFCとATL、どっちの方が作りやすいでしょうか。 最初、ATLで作ろうと思っていたのですが、 ATLについて解説しているページが少なくて、 現在少し_| ̄|○気味です。 またできれば、ツールバーの作り方について 詳しく記載されているページがありましたら、 お教えいただきたいと思っております。
>>752 codeguruかcodeproject行けば
まんまのコードがあるかも
メッセージボックスは絶対に連続で出ない場面に限定してくれ ブラクラみたいになってるのをよく見かける チェックボックスかオプションボタンを使うべき場面で横着すんな
モードレス君 キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
757 :
デフォルトの名無しさん :03/12/23 17:41
ほう、反論できないアホがまだ粘っていたか
反論も何も、誰もスレ違いの話題にまじめに付き合うわけないじゃん (w
まあ、そう自ら退路を断つこともあるまい
荒らしは放置
ここでするのは作る側の議論なんだから使う方の意見が聞きたいんだったらWindows板でも行けば?
>>762 誰が使う側の意見を「聞こうと」しているんだよ、おまいか?
モーダルはPGのエゴだという見地が使う側の意見なのか、おまい式には。
俺は作る側と使う側の両方の立場を併せ持つ者の意見であると主張する。
それじゃ、何事も無かったかのように次の質問どぞー。
767 :
デフォルトの名無しさん :03/12/24 00:03
メッセージボックスをモードレスで出す方法を教えて下さい
作れ
769 :
デフォルトの名無しさん :03/12/24 11:49
C初心者です。 mallocでox0e00000x10Byteの大きさを確保したいのですが、引数のunsigned int の大きさを超えてしまい、確保できません。 VCでは不可能ですか?
最初のoxは0xのことで、*10方は10進で、 146MBか?unsigned intは超えないが。
わわわ 0x0e0000000の間違いでした!
>>771 もちろん無理。
確保しようとしているサイズが何バイトになるか考えれば判りそうなもんだが?
VCというかそもそも32bit Windowsの限界を超えている罠。
一体何がしたいんだ?
そのまま組んでもまともに動かん予感がするな。
3.5GBか。unsigned int は超えないけれど、mallocでは無理だな。 メモリがあるなら、AWEとか使う手があるが。
thx! AWEですか、初耳です。調べてみます。
あ、でもAdvancedServer以降でしか使えねーから。
げ、昔買ったv5を今でも使ってる洩れは… _| ̄|〇
高速性を求められる検索をメモリ内で実施したいんです。
デスクトップマスコットを作ろうと思うんですが MFCを使うかSDKでやるか迷ってます。 どちらが無難ですかね?
メモリマップトファイル
780 :
デフォルトの名無しさん :03/12/24 17:45
CImageに対して pDC->SetROP2(R2_XORPEN); を行い描画モードをXORに指定しているんだけど、 DrawTextはXORで書き込まれていないように見えます。 これって仕様ですか? DrawTextをXORのモードで描画することはできますか?
MFCでソフトを作ってる奴を見ても 全然尊敬の念を覚えないのは気のせいですか?
言語やライブラリで尊敬とか言ってる時点でどうでもいいよ。
783 :
デフォルトの名無しさん :03/12/24 18:32
>>781 同意。
MFCを使ったフリーソフトを公開して誇らしげにしてる奴を見ると苦笑してしまう。
難しいところを全部自動でやらして「苦労しました」なんて言われた時には涙が出てくるよw
まあ楽できるところは楽しないとな。 そのための開発環境だ。 開発者が目的の処理の開発に力を注げるようになるのは好ましいこと。
自作自演してまで・・・
>>784 >難しいところを全部自動でやらして
そんな機能MFCにあったっけ?
>>787 クラスを呼び出すだけでできるという意味だと思ふ。
MFC房必死すぎ( ´,_ゝ`)プッ
>>787 ワラタ
結果 == 技量 + 道具
道具に呑まれるばかりな技量の誰かさんに
苦笑されても気がつかない開発者が多勢を占める
痛PGに多いんだよね 結果 == ソフト + ハード がわかってなくて「ハードの性能上がったから」が口癖なやつ
いーからくーきよめ ここはMFCの良い悪いを語る場じゃないんだよ いつまでもくどくどねちねちと
中間言語はさて置き、開発速度・バグなしが要求される。 現場では、どんなにエレガントなプログラムを書いても全く評価なし。 自己満足だろと一笑されてしまう上司が多い。 アルゴリズムを評価する場は、学会やプロコンしかないのが現実。
なんか、すっごい狭義なアルゴリズムだな
>>794 どう足掻いてもハードに足を引っ張られることならよくある。
最新のハードでも重たい処理を古いハードでできるようにしろ
と言われた時には時には・・・
これだから非コンピュータ技術者のPGは(ry
まぁ、MFCを使ってでしかまともに組めない漏れから言わせてもらえば SDKのみでやってるのとか見るとそれなりに尊敬しますよ。 でもね MFCを使って組んだ方が必要な機能の実装のみに専念できるんですよ。 漏れはGUI周りで苦労したかないねぇ。
運悪くこのスレにバカが降臨してしまったようだな。
SDKでは組めないというMFC技術者は例外なく無能
頼むからプログラマの話したけりゃマ板行ってくれ。
>>804 ここで質問する奴は皆プログラマじゃないのかと小一時間(略
SDKでは組みたくないというMFC技術者は?
どうでもいいけど、SDKで組めない奴がMFCを使うのは 危険だということだけは言えるよな。 WinGUIアプリの動作原理をわかってないだろ。
>>807 やろうと思えばSDKでも出来るって言うなら
それはそれでいいと思うぞ。
自作自演あらしに質問が消えていく。。。 回答マダー?
>>802-803 Windowsの概要さえわかってれば問題ないだろ。
グラフィックスで勝負してるなら分かるが。
Win32APIでGUIアプリ組める程度で MFCでしかGUIアプリ組めないやつに 優越感持ってるやつはかなり痛いだろ もうちとましなレベルで競えよ Win32APIのみで組もうが、MFCで組もうが 糞なアプリは糞
>>813 MFC使っても糞なアプリを作る奴は何を使っても糞ってことだけは言える。
冬休みだな
816 :
デフォルトの名無しさん :03/12/25 13:23
MFCに挫折してWinAPIの勉強中。 ドキュメント/ビューアーキテクチャとか MDIとか、よく分からん。 しかしWinAPIもドキュメントが英語ばかりで 辛いわ・・・。 MFCの内部動作とか、効果的な使い方って 何で勉強しました? ダイアログベースなら 簡単なんだけど分割ウインドウとかになると さっぱり分からん。
いろいろ作っているうちに、わかるようになるよ。 目的のアプリに近いサンプルでも見ながら、地道にやるしかない。
MDIは消えつつあるし、SDIはあまり歓迎されてないと聞いてるな。 無駄に難しいし非効率だからだろうか?
819 :
デフォルトの名無しさん :03/12/25 15:46
>>818 MFCのプロジェクトってMDIかSDIになるんじゃないの?
普通の人はSDIのHello! Worldプロジェクトから
改良していくのかと思ってたんだけど、ちゃうんかな?
>>819 ダイアログも選べるからそこから始める奴は多いだろ。
簡単だから練習には持って来いだし。
つか、作ろうとしてるモノがドキュメントベースかどうかで MDI/SDI かダイアログかが決められるんであって。
>>818 [ウインドウ]-[新規ウインドウ]が無駄に難しいか?
>>821 s/ドキュメントベース/ファイルベース系/
お前ら、WTLとか使ってますか?
826 :
デフォルトの名無しさん :03/12/26 00:41
CImageでbitmapのget/putってできますか? #get/putはBASICでつ
827 :
デフォルトの名無しさん :03/12/26 00:57
>>826 似たようなことはできたと思われ。
関数名まで同じかどうかは忘れたが。
っつーかMSDN読めよ。
828 :
デフォルトの名無しさん :03/12/26 07:01
子ダイアログのボタンをリターンキーで押せるようにしたいのですが、どうすれば良いのでしょうか?
ウェブで検索してみたところ
ttp://ptvi.hp.infoseek.co.jp/vc/p_0000089.html こちらには
> WS_EX_CONTROLPARENTが指定されている場合、子ダイアログにあるボタンにフォーカスがある状態で、
> リターンキーを押してもそのボタンが押されません。
(略)
> 子ダイアログのPreTranslateMessageに処理を追加するいか無いようですね。
という風に書かれていたのですが、やはりこのような対処法しか無いのでしょうか。
スペースキーでは押せるのに、リターンキーは特殊なことしないといけないなんて、
なんとなく悲しいです。
Enterキーは[OK]だからだろ こんなのを急に変えたりすると 間違いなくブーイングの嵐だよ
モードレス?
モームス?
いえ、モーダルダイアログの上に子ダイアログを載せています。
プロパティシート?
タブコントロールをプロパティーシート風に使用しています。
タブコントロールをプロパティーシート風に使用しています。
CPropertySheet CPropertyPage AddPage
837 :
デフォルトの名無しさん :04/01/05 00:42
IEツールバーを作っているんだけど、 ツールバーに、動的に変化するテキストを貼り付けることってできる? (時間計測の結果を表示したい) ボタンの貼り付けはできるんだけど、テキストだけを貼りたいんだよね。 CToolBarクラスを見ても、使えそうなメソッドがどうにも・・・。
CFile::Openや、CreateFileでファイルをオープンしようとした時に、 すでに他のプロセスで開かれ、他のアプリでのオープンを許可していない 場合に、アクセスが拒否されますが、 どのプロセスが今使用しているかの判別方法はありますでしょうか? よろしくお願いいたします。
年賀状は、謹賀、賀正などの「賀詞」、 新年おめでとうございます、などの「祝詞」で始まります。 「賀詞」の場合、“賀正”、“迎春”、“賀春”は、 目上の人に対して失礼な言葉なるので注意しましょう。 目上の人に対しては「祝詞」を使った方が無難です。
目上の人には年賀状を出してはいけません
>>837 ステータスバー使えばいいじゃんとか言ってみる
>>837 スタティックコントロールやエディットコントロールをバンドして更新すれば?
843 :
デフォルトの名無しさん :04/01/06 11:54
AfxMessageBoxのボタンの文字列を変更する方法を教えて
>>843 メッセージ ボックス スタイル
を変更する。
自作メッセージボックス、どっかに落ちてないかなぁ。
VisualC6.0 からVisualC++.NET に切り替えたんだけど、 6.0にあった プロジェクトの設定ダイアログ -> リンカ -> オブジェクト/ライブラリモジュール って .NET だとどこにあるかわからないんです。
解決しました
849 :
名無し@沢村 :04/01/06 18:58
>>846 ヌヒよ、他人が作ったものは「自作」とは呼ばないんだよ
850 :
デフォルトの名無しさん :04/01/06 20:40
(a) VC++6.0 で MFCアプリWizardを使ってCEditViewを持つアプリを生成。 (b) CEditView派生クラスで OnPaintハンドラを追加 (c) OnPaintに次のコードを書いてビルド GetEditCtrl().SetSel(0,-1,TRUE); GetEditCtrl().Clear(); //GetEditCtrl().SetSel(0,0,TRUE); GetEditCtrl().ReplaceSel("テストあいうえおかきくけこ\r\n"); GetEditCtrl().ReplaceSel("テストあいうえおかきくけこ\r\n"); これでアプリが暴走するんだけど、何が問題なんでしょう? EditCtrlのクリア方法で最初の2行でいいんですよね? 3行目は入れても入れなくてもダメだった。
851 :
デフォルトの名無しさん :04/01/06 20:45
>>850 ついでに質問。
CEditViewクラスのOnDrawって、コード書いても
実行されないんだろうか? ダメだったから
OnPaintハンドラを追加してみたんだが。
どういう違いがあるんですっけ?
OnPaintはWM_PAINT発行時なんで分かりやすいですが、
OnDrawはどういうタイミングで呼ばれるんだろう?
852 :
デフォルトの名無しさん :04/01/06 20:57
>>850 メニューで消去コマンドを設定して実装したら
問題なく動作しました。消去した直後に
ReplaceSelするのがよくないのかな?
よろしければ教えてください。 void CXc31_orizinaruDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) { // TODO: この位置に保存用のコードを追加してください。 ar.WriteString("あいうえお\r\n"); ar.WriteString("あいうえお\r\n"); } } このプログラムはMFCで自動作成したのをar.WriteString("あいうえお\r\n"); と追加しただけのものです。 実行して、保存した場合はまったく形式がない「無題」 のファイルを保存します。 メモ帳.txt形式で保存したいのですがどのように プログラミングしたらよいですか?
>>853 俺も後学のために聞きたい。
ファイルダイアログは暗黙に呼び出されているみたいだけど、
せめて独自のファイルダイアログを呼ぶことはできないのか?
そういうのは全部自分で作る。
>>857 どこのクラスにID_FILE_SAVE_ASのハンドラを
追加したらいいんですかね。Viewクラス、フレームクラスなど
色々追加してみたけど、どこにも反応がない。
Wizardで作成されたソースを検索しても ID_FILE_SAVE_ASはヒットしない。ということは ソース内で明示的にコマンドメッセージをハン ドルしているわけではないみたい。 こういう場合、ハンドル関数をフックして独自の ものを実装するにはどうすればいいんでしょう?
>>853 新しいメニューコマンドを設定して、同じような関数を実装することが
できました。
// Viewクラスへのハンドラ
void CSample2View::OnFILESAVEAS2nd()
{
// TODO: この位置にコマンド ハンドラ用のコードを追加してください
CFileDialog fd(FALSE, "txt", "無題だよん.txt",
OFN_ENABLESIZING | OFN_OVERWRITEPROMPT,
"テキスト|*.txt|ドキュメント|*.doc|すべて|*.*||",
this);
if (fd.DoModal()==IDOK) {
CFile file(fd.GetPathName(), CFile::modeWrite|CFile::modeCreate);
CArchive ar(&file, CArchive::store);
GetDocument()->Serialize(ar);
return;
} else return;
}
void CSample2View::OnUpdateFILESAVEAS2nd(CCmdUI* pCmdUI)
{
// TODO: この位置に command update UI ハンドラ用のコードを追加してください
pCmdUI->Enable();
}
>>860 続き
// ドキュメントクラス
void CSample2Doc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: この位置に保存用のコードを追加してください。
ar.WriteString("テストテスト\r\n");
ar.WriteString("オマエモナー\r\n");
}
else
{
// TODO: この位置に読み込み用のコードを追加してください。
}
}
ID_FILE_SAVE(_AS)でやるときは BOOL CXXXXDoc::DoSave(LPCTSTR lpszPathName, BOOL bReplace) をオーバーライドすればいいんじゃないかな。 BOOL CDocument::DoSave()はvirtualついてるから。
>>859 そういうときはMFCのソースのほうをgrepしてみ。
ID_FILE_SAVE_ASからCDocument::OnFileSaveAs()のソースを見ればいい。
結は
>>862 さんの書いたとおり。
どーでもいい話なんですが、m_hWndとウインドクラスへの ポインタを混同してしまうことがしばしばありまつ。 まあ、コンパイラでひっかかるからいいんだけど、 たまに「reinterpret_cast したらいいのか?」とか やばいことを考えてしまう。(w 俺だけ?
865 :
デフォルトの名無しさん :04/01/08 19:58
View派生クラスにCButtonを貼り付けて、そのメッセージを 受け取ろうとしています。MSDNを参考にしてシングルクリック では成功したのですが、ダブルクリックでは反応がない。 おそらく、CS_DBLCLKSの指定がされてないのだろうと思い、 CButton の Create直後に SetWindowLong でClass Style を変更してみました。 LONG dwClsStyle; dwClsStyle = GetWindowLong(m_button_go.GetSafeHwnd(), GWL_STYLE); dwClsStyle |= CS_DBLCLKS; SetWindowLong(m_button_go.GetSafeHwnd(), GWL_STYLE, dwClsStyle); これでダブルクリックに反応するようになったのですが、 ボタンの文字が消えてしまいました。グレイの四角が 表示されるだけです。どの辺りに問題があるのでしょうか?
ウィンドウスタイルとクラススタイルごっちゃにするなと。
867 :
デフォルトの名無しさん :04/01/08 21:43
>>866 すいません。
GetClassLong でしたね。
しかしGetClassLongにしたら、ボタンは表示されたけど
またDouble Clickメッセージを受け取らなくなった・・・。
bResult = m_button_go.Create("逝け!",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(0,0,0,0), this, 3);
LONG dwClsStyle;
dwClsStyle = GetClassLong(m_button_go.GetSafeHwnd(), GCL_STYLE);
dwClsStyle |= CS_DBLCLKS;
SetClassLong(m_button_go.GetSafeHwnd(), GCL_STYLE, dwClsStyle);
spy++では CS_DBLCLKS が指定されているのに、
親ウインドウにはシングルクリックしか送られてなかったです。
引き続きアドバイス募集しまつ。
>>867 再起動してspy++で確認してみましたが、
特に SetClassLongをしなくてもデフォルトで
CS_DBLCLKSを持っているようです。
すると別のところに要因がありそう。
BS_NOTIFYが無いとBN_DBLCLKは通知されないけど。 あと、SetClassLongは同じウィンドウクラス(この場合Buttonクラス)全てに 作用しちゃうので、普通使わない。
>>869 来ました! ありがとうございます!
BS_NOTIFY ってMSDNの CButton::Create() には
記述がありませんでした。
GWL_STYLEで置き換わるのはClass StyleじゃなくてWindow Styleですよ。 ダブルクリック受け取るには、ラジオボタンかオーナードローに しなくちゃいけないようです。BN_DBLCLKのヘルプ参照。
ぐはっ レス付いてるの見えんかった
873 :
デフォルトの名無しさん :04/01/09 17:46
SDIアプリで右側に配置したダイアログバーの上に 別のダイアログを表示させるアプリを作っているんですが ウインドウを表示する前に正確なダイアログバーの位置情報が取れなくて困っています。 行っていることは、CMainFrame OnCreate中でDialogBarを作成 WM_SHOWWINDOWのメッセージハンドラ中に、ダイアログバーのウインドウサイズを GetWindowRectで取得しようとしているんですがこの値がまともな値になっていません ためしに、WM_SHOWWINDOWハンドラ中に、1秒タイマーを仕掛けて WM_TIMERハンドラでサイズを確認してみると正確な値になっているみたいです。 ウインドウ表示前に、ダイアログバーの正確なサイズを知る方法を知っている方は教えてください MFCは6.0です。
CBrush オブジェクトからCBrushオブジェクトを 生成することはできないんですかね? FromHandle はどうもオブジェクトの中身を変更しないみたいなんです。 代入もサポートしてないし。 ×の例 CBrush brush; brush.FromHandle((HBRUSH) GetStockObject(GRAY_BRUSH)); CRect rect; GetClientRect(&rect); pDC->FillRect(&rect,&brush); ○の例 CRect rect; GetClientRect(&rect); pDC->FillRect(&rect,CBrush::FromHandle((HBRUSH) GetStockObject(GRAY_BRUSH))); 背景塗りつぶし処理ですが、前者の場合は白になってしまう。
漏れMFCはよく知らんのだが、前者の方はAPIで言うところのSelectObjectは必要ないのか?
>>874 MSDNでCBrush::FromHandleを見てみて下さい
それで理解できなければC++を勉強し直してください
ヒントはstatic
static CBrush* PASCAL FromHandle(HBRUSH hBrush); だからね。インスタンスは変更できない。
質問の答えを書き忘れた CBrushからCBrushを生成することはできません というかそれで何がしたいのか分かりません(コピー?ハンドル共有?) 文脈から"HBRUSHハンドルからCBrushを"と読み取るとすると CGdiObject::Attachを参考にしてください
こういう勘違いが起きないようにC#では静的メンバはクラス名からしか呼べなくなったんだな。
どもども。static のついたメンバ関数は、そのクラスから生成された
オブジェクトで共有されるという理解をしてたんですが、静的メンバ関数
はオブジェクトを変更してはいけないんですっけ?
static CBrush* PASCAL FromHandle( HBRUSH hBrush );
とあって FromHandle( ) const ではなかったから、
何かオブジェクトを変更しているのかと思った。
>>878 んー たぶんハンドルのコピーを保持させようとしていたような気がします。
どうせ GetStockObject()のハンドルを Attach() するなら CBrush brush; brush.CreateStockObject(GRAY_BRUSH); でいけると思われる。
>>860 さん、861さん
どうもありがとうございました。無事メモ帳版データで保存できました。
返事が送れて大変すいませんでした。
教えていただきありがとうございました。
>>880 そもそもstaticメンバ関数は対象オブジェクトが存在しない。
884 :
デフォルトの名無しさん :04/01/09 23:54
>>880 ハンドルのコピーを複数クラスで保持することはポインタのコピーと同じ
問題がおきるから気をつけてくださいね(CGDIObjectは対応しているけど・・・)
うをおおお、全くのど素人からC++ドス画面から学び始めてはや一ヶ月。 やっとVC++で画面出して計算したり、色々出来るようになってきた! かなり楽しい! やっとこのスレにも参加出来そうです。
VC++っていじっていくとたのすぃ〜 メモ帳に保存できたことがすごくうれしかった。 私もまだまだド素人ですが、がんばっていきます。
「メモ帳に保存」という表現がどうもしっくりこない。
たぶんパソコンの仕組み自体がよく分かってないんだろうな。 そんな香具師でもその程度なら動作させれるVC++は 偉大だがある意味怖い
ソースをワードパッドで開いている人を見かけたことがある やっぱり基本的な仕組みを理解することは大事だ この意味で今の便利さはある意味怖い
わけもわからないまま ソースは秀丸で開くものだと丸おぼえしてる人もいますが。
いや開くのはなんでもええやん
>>891 ほら、なんでも良いと思ってる奴ここにハケーン
893 :
デフォルトの名無しさん :04/01/11 11:35
SDI+Doc/Viewで、Wizard使ってできるだけシンプルな スケルトンを作って、自分でツールバーとステータスバー を実装しようとしているんですが、実装先はView派生クラス にするのがセオリーでしょうか?FramWndのOnCreate だとうまくいかないんです。(Viewでは成功してる)
>>894 一般的にはどうやってんのかなと聞きたかっただけなんですが、
FrameWndの方でやると、実行時にエラーがでます。
今は良いですが、CSplitterWndを使う場合はやはりフレームウインドウに
ツールバーを貼り付けないとダメになりそう。フレームウインドウに
後から貼り付ける方法あるんでしょうか?
>>895 エラーの名前は debug assertion failed です。
ツールバーの CreateEx の部分で起こってます。
897 :
デフォルトの名無しさん :04/01/11 13:56
ボタンの大きさを表面の文字列(キャプションというのでしょうか) にあわせて動的に変更したいのですが 文字列の幅、高さを得るにはどのようにすればよいのでしょう? GetCurrentFontで得られる値をどうにかすればよいと考えているのですが…
>>897 CDC::GetTextExtent
はどう?
VC++ 5のデベロッパースタジオ使ってんだけど、共有DLLじゃなくてstaticDLLを 使いたいが、やっぱり駄目かな?簡単な計算ソフトを知人に送りたいんだけど MFC.DLLのライブラリー群なんて絶対に入ってないし。。。 ぐぐってみたけどビルド-アクティブな構成の設定でWin32Releaseを選択すると 動くと書いてましたが、本当でしょうか? いい方法知りませんか?
>>899 俺、フリーウェアの公開は共有DLLでやってるけど、
ダメなんかな? 今のところ起動できないという
報告はないんだが。
>>899 そりゃデバッグ版をリリースに使っちゃまずいだろ。(デバッグ用でない普通の)MFC
のDLL自体はwin95でもなけりゃ普通はOS標準で付いてるよ。持ってなきゃ入れた方
が良いんじゃないの?
つーかAppWizardにDLLをどうするかの項目もあるはずだが。
MFCアプリケーションで、ウィンドウの左上隅に表示される"mfc"という小さなアイコンの 絵を書き換えたいんですけど、どこをいじればいいんでしょうか?
>>903 リソースのアイコン IDR_MAINFRAME では?
>>903 ちなみにデフォルトではIDR_MAINFRAMEに大きいアイコンと小さいアイコンの
二つが入ってるから、両方書き換えるか、小さいアイコンを削除するかしておいた
方が良い。
レスどうもです。 今確認してみましたところ、IDR_MAINFRAMEはあるのですが、 大きい方だけで小さい方がの絵が見当たりません。 恐らく小さい方が画面左上に出ているのだと思うのですが・・・
ちなみに今使用しているのは.NETに入っているVC++7.0です。 以前ステューデントパックで購入したVC++4.0はアイコンが 大小2つあったのですが・・・変だなぁ。
>>906 VCバージョンが何か書いてないので正確には言えんが、アイコンを開いて
メニューの「イメージ」に「デバイスイメージを開く」とか「イメージの種類」とか
いう項目があるだろ?あるいはツールボックスにデバイスイメージの種類に
関するコンボボックスが出てないのか?
>>908 あっ、ありました。
どうもありがとうございます。
>>910 ソースはともかく、扱うデータとかだと
バイナリとテキストで色々扱いが違うし、間違って
保存したりしたら改行コードが勝手に変えられたりするな。
890 名前: デフォルトの名無しさん 投稿日:04/01/11 01:57
わけもわからないまま
ソースは秀丸で開くものだと丸おぼえしてる人もいますが。
891 名前: デフォルトの名無しさん 投稿日:04/01/11 01:59
いや開くのはなんでもええやん
892 名前: デフォルトの名無しさん 投稿日:04/01/11 10:59
>>891 ほら、なんでも良いと思ってる奴ここにハケーン
---
という流れで、「ソースはともかく」って・…・
ソースを開く話とちゃうんかいな。
>>ビルド-アクティブな構成の設定でWin32Releaseを選択すると
>>動くと書いてましたが、本当でしょうか?
>>いい方法知りませんか?
駄目でした。
>>901 つーかAppWizardにDLLをどうするかの項目もあるはずだが。
普通のは6/5あたりのあるのですが、デベロッパースタジオでは抜けてます。
やっぱり学習用だからかな?
>>913 そういや、Learning はMFCをスタティックリンクか、DLLか、
どちらかしか使えなかったような。
どっちだったかは忘れたけど。
たしかDLLだけ。
スタティックリンクと普通のとどう違うのかはっきりわかりません。 友達に出来たexeあげたらdllが三つ足りなかったから 自分でルートにおいて使ったそうです。
MFCのDLL持ってないようなWindows環境のヤシっているの? いるかもしれないとは思うけどすごく不便じゃない?
ちなみにMFC42(VC5〜6対応)環境は ・win98以降なら標準 ・win95でもIE4のインストールでOK MFC40(VC4対応)環境は ・win95でもIE3.02インストールでOK
>>917 持ってるやつでもDLLが無いですって言われるみたいです
だからそいつはシステムフォルダからわざわざExeのルートに
DLLをコピーしてやってくれたみたいです。
思うに、スタティックリンクにすればWin本体のDllを使うのですか?
>>919 DLLの意味を調べ、100回くらい音読せよ。
DLLはスタティックリンクできない。
まとめ。 Learningは共有DLLしか使えない。 MFC7で作ったプログラムはWin95では動かない。(たとえMFCのDLLをWin95にコピーしても)
>>921 Win95はサポート終了、つまりM$製品としての扱いをされなくなっているし、
Win98ももうじきサポート終了(あと4日だっけ?)。
↑
てなことを言っているメーカーのライブラリを使う以上は期待しちゃいかんことだろ。
いまどきwin95なんか使ってるヤシのサポートなんて考えなくていいだろ・・・ つーかそういうヤシは自分で環境作れ
職業で必要のあるなしと、意味があるなしは別の話しだからね
誤爆した
ところでMFC70ってwinXPなら標準で付いてるの?
食生活で顎の発達が阻害されて歯の生える場所がないからだが、 場所自体が無いのに矯正だけで直るものなの? やっぱり場所確保のために歯を何本か抜いちゃうの?
>>927 そんなこと心配するくらいならスタティックリンクしろや
回答の鉄則:Yes/Noで答えられる質問にはまずYes/Noで答えるべし。
はじめまして 今、VC+6.0でActiveXを組み込んでダイアログを作成しています。 プログラム上からActiveXのプロパティを変更したいのですができません ActiveXコントローラにメンバ変数を設定して、ビルドすると動作しなくなります。 メンバ変数を読み取り専用にすれば動くのですが・・・・ ActiveXってプログラム上からのプロパティの変更はできないのでしょうか?
Win32ApplicationでのプログラムをMFCで使いたいのですが方法がよくわかりません。 ヘッダー2つとWinMainのあるファイルと関数と定義等のあるファイル1つの 合計4つなのですがどなたか指南してください。よろしくお願いします。 プロジェクトに追加するだけだとプリコンパイル済み〜予期せぬEOF〜 とのエラーがでてしまって・・・。
>>933 Win32App Project ではなく、ソースだけ?
>>933 新しいプロジェクトをMFCを使用する設定で作ってソース見れ。
それでもわからんかったら、そうやって作った新しいプロジェクトにソース移せ。
>>933 俺も今別スレのコードをコピペして
コンパイルしたら予期せぬEOFが出ちゃって
何かと思ったら、 int main() { } の終わりの
大カッコがないのが原因だった。
意外とその辺に原因があるのでは?
ついでにエラーコードもここに書くといいかも。
937 :
デフォルトの名無しさん :04/01/12 22:46
938 :
デフォルトの名無しさん :04/01/12 22:47
レスありがとうございます。遅くなりました。
>>934 Win32Applicationで実行可能なソースがありまして、その機能をMFCで
使いたいのです。当方、MFCで少しGUIと機能を作ってしまったので
それに付け加えたかったのです。
>>935 少しやってみました。Win32Applicationで作ったものをMFCにする感じのことが
できそうなので、そちらも少しやってみます。
>>936 fatal error C1010というかんじです。括弧等は考えましたが、すでに実行可能な
ソースですし、違うかもしれません。
>>938 やってみます。また報告します。
皆様ありがとうございます。
>>938 .cppにしたところ、同様のエラーが出てしまいました。
933であるようにヘッダー2つは問題ないようでしたが、関数と定義等のあるファイルを
追加すると出るエラーです。WinMain()のあるほうはそのまま使うわけではないのでまだ
追加していません。
>>939 MSDNでエラーコード検索してみた?
なんか検索されるけど。
俺は意味ワカラン。(w
>>933 それって単に stdafx.h をインクルードしてないだけでは?
>>933 うお、そうでした…。
ありがとうございました、これからがんばってみます。
皆様ありがとうございました。とても助かりました。
が ん が れ
AfxMessageBoxで変数を表示するにはどうすればいいですか?
たびたびすみません。 あれからまた問題がありまして、 error C2197: 'int (__stdcall *)(void)' : 実引数が多すぎます。 と、いうエラーが追加したファイルにあった関数すべてに出てしまいました。 Win32Applicationの時には出なく、MFCのときにでたので引数とかポインタとかが 間違っているというよりは根本的に何かおかしい原因があるのではないかと思って いろいろ調べていますが見つかりません。 どなたか助言いただけないでしょうか・・?
>>933 なんだかプロジェクトとソースの取り扱いに関して誤解しているような気がする。
プロジェクトの設定やstdafx.hの取り扱いをよく確認してみたら?
アドバイスありがとうございます。 お察しのとおり当方まだ未熟すぎてとてもためになります。 そのあたりを調べてみます。ありがとうございました。
>>946 int hoge を表示したかったら
CString msg;
msg.Format("%d", hoge);
AfxMessageBox(msg);
っていうか、こんな質問するぐらいだから、デバッガ使いこなしてないっしょ?
俺もデバガの使い方よーわからん TRACEくらいしか使ってないw
デバガメとかけて虫取りと解く。 その心は?
>>951 ASSERT, VERIFYでトラップ張っとくと、原因究明が楽になるよ。
Assert解説コード通りにつけたは良いけど意味分かりませんが何か?
955 :
デフォルトの名無しさん :04/01/14 01:16
ボタンをクリックしたときのメッセージってボタンを押してから 離したときに出ますよね。ボタンが押された瞬間に処理を 開始したいんですけどどうしたらいいんでしょうか。
すんまそん、 誰か、独学で煮詰まってきた漏れに教授してやってください。 入力をCStringで受けたとします。 ファイルからにせよ、入力からにせよ。 そうするとそれを数値とがcharに変換できなくてあぼーんします、 charで受けても、結局CStringに表示の際に変換しなきゃいけなくて そんときにもあたまこんがらがってあぼーんです。 クラス間で変数使えなくて、関数の返り値でCString使って クラス間移動したりすると、やっぱり数値とかcharに変換出来なくてあぼーんです。 こんな漏れ、でもがんばって少しずつ少しずつプログラムが出来つつありますが、 こんな段階でのぞくべきサイトや書籍等、教えてくださったら感謝感激します。 ああ、ポインタ、わかんない、ああ、ああ、頭がー pDC->の時に分かったと思ったら。 文字列の頭のアドレスだけ持ってきたって、結局それ以下\0が出るまで コピーなりしてくれる奴とそうで無い奴覚えなきゃいけないじゃないですか。 覚えてないし、調べてコード書いてたら、何種類も書いて ああ、機能一つつけるのに、もう二時間、四時間。 一つだけ教えてください、この苦しみが報われる日がいつかくるでしょうか。
>>955 OnDown
かなんか、マウス押した瞬間に反応するイベントがあらあよ。
>>853 シリアライズがらみの、この件だけどドキュメントテンプレートの
IDで指定したIDコードのリソース文字列で設定できるみたい。
デフォルトではIDR_MAINFRAME。
書式はシルトの標準講座MFC6.0のp487に書いてあるけど
転載が面倒なんで、がんばってどこかで調べてちゃぶ台。
どうしても分からなければ書きますが、MSDNあたりに
ないんかな。
そのへんは全部MSDNに書いてあるっつーの・・・
char str[] = "abcdefg222";
CString cstr = str;
char *sss = cstr.GetBuffer(80);
TRACE( "%s", sss );
>>956 ゆってる意味が分けわからん
CStringへの変換と、charへの変換したが、これでいいのか?
あと、ポインタとchar型配列は見かけ上同じように扱えるが?
>>961 技術的な質問してないんだから答える必要はないと思われ。
ああ、ほんとだ。 スマネ
そろそろ次スレだね
965 :
デフォルトの名無しさん :04/01/14 08:42
アプリ中の別スレッドで、FormViewのエディットコントロールからリストコントロールへ フォーカスを移すにはどうしたらよいですか。 m_List.SetFocus(); としてもフォーカスが移らないので UpdateData(FALSE); としたらアサートが起きました。コールスタックを辿っていくとコメントの記述で CWnd::FromHandle()を使うらしいことがわかったのですが、 CWnd *pWnd=FromHandle(g_hListHWnd);//グローバル変数でリストのハンドルをあらかじめ確保しておく pWnd->SetFocus(); としてもフォーカスは移りませんでした。
>>965 メッセージを投げて、メインスレッド側でSetFocusかな。
>>965 >SetFocus
>ウィンドウは、呼び出し側スレッドのメッセージキューにアタッチされているもの
>でなければなりません
これがあるので、例え ::SetFocus(g_hListHWnd) としても無理だ罠
最近大学の授業で使用することとなりVCを使い始めたのですが、 どうも自分の力量では理解できませんでしたので・・・ ある山の上にあるタンクから100個のボール(Bitmap)が左右の山の嶺を、乱数 を用いて方向を決めて転がっていくというプログラムを作っています。 描画には下の関数を使用しています。 void BitDisp(CWnd* h1,int bmp,int x,int y,int w,int h) { CDC pM; CBitmap pB,*pold; CDC* pDC=h1->GetDC(); pB.LoadBitmap(bmp); pM.CreateCompatibleDC(pDC); pold=pM.SelectObject(&pB); pDC->BitBlt(x,y,w,h,&pM,0,0,SRCCOPY); pM.SelectObject(pold); } ボールを転がっているように見せるのにはBitmapを描画して消す、というの を繰り返すという手順でやりたかったのですが、それが分からなかったので 背景と同じ色のビットマップを作ってそれを上書きするという方法をとって みました。プログラムを動かすとだんだん動作が遅くなり、そのうち止まっ てしまいます。おそらくメモリ(RAM)が解放されずにどんどん消費されてい ってるのではと思います。 他のサイトでDCの解放というものを見たのですが、使い方がいまいち分からず 結局状況を改善することが出来ませんでした。 どなたかどうか助言をお願いします。 既出だったらすいません、その時は言ってください。
Flashでやれ
とりあえずReleaseDCが見当たらないね
>>966 >>967 かかれたとおり
::PostMessage(g_hListHWnd, WM_USER+31, 0, 0);
で出来ました。感謝です。
>>968 void Bitisp( ) の最後で
h1->ReleaseDC(pDC);
を入れてみたら、どうだろ?
>>972 >h1-ReleaseDC(pDC);
やってみましたが、画像が消えずに残ってしまいました。
うーん、これってビットマップの代わりに円の描画とか
でやるしかないのかな・・・
973=968でした。 訂正:h1-ReleaseDC(pDC); でプログラムが遅くなったり止まったりというのは解消できていました。 その後ネットで調べながら何度か試したら出来ました。 どうやら、 h1->Invalidate(TRUE); h1->ReleaseDC(pDC); という記述をしたら画像も消えてさくさく動くようになりました。 970,972さんどうもありがとうございました。
>>976 どうもありがとうございます。CFileFindをMSDNで調べると
CFileFind finder;
BOOL bWorking = finder.FindFile("*.*");
while (bWorking)
{
bWorking = finder.FindNextFile();
cout << (LPCTSTR) finder.GetFileName() << endl;
}
これでフォルダ内にあるファイルを列挙することが出来たんですが
ワークスペース内のファイルとフォルダしか表示することが出来ませんでした。
パスの指定はどうやるのでしょうか?
>>977 finder.FileFind(_T("B:\\*.*"));
>>978 レスありがとうございます。
bWorking = finder.FindFile(_T("C:\\*.*"));
こうやるとCドライブのファイル、フォルダが表示されるようになりました(いくつか謎のファイルも表示されましたが・・・)。
でもこれって一定のフォルダしか表示されませんよね?
CStringのオブジェクトszPathに入っているパスのフォルダにあるファイルを表示したいのですが・・・。
何回もすいません。
脳みそ無いのか。 szPath += _T("\\*.*"); Finder.FindFile(szPath);
>>980 お恥ずかしい・・・。出来ました。ありがとうございます。
VC6でグラフの描画プログラムを作っています。 スクロールバーでスクロールしているときにグラフの再描画が発生して その処理をさせているのですが、スクロールのマウスイベントが 終了していない状態でポップアップがでて再描画しているため、 再描画処理が終るとスクロール処理が走り、そこで再描画が発生してループになってしまいます。 マウスイベントを破棄する関数とかないでしょうか? 教えてください。