■MFC相談室 mfc17d.dll■
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/11/21(火) 10:38:31前スレ
■MFC相談室 mfc16d.dll■
http://pc8.2ch.net/test/read.cgi/tech/1146117893/
0233デフォルトの名無しさん
2006/12/28(木) 11:20:58ttp://msdn2.microsoft.com/en-us/library/ms670614.aspx
0234225
2006/12/28(木) 11:25:06調べてみたら
CListCtrl::GetFirstSelectedItemPosition
で取れるようです
0235225
2006/12/28(木) 12:24:51表示はできましたが最初のメニューだけすごく小さいのです
サブメニューは普通に表示されます以下ソースです
CMenu menu;
CPoint posMouse;
VERIFY(menu.LoadMenu(IDR_MENU1));
::GetCursorPos(&posMouse);
menu.TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTBUTTON, posMouse.x, posMouse.y, this);
0236225
2006/12/28(木) 12:32:21CMenu* pPopup = menu.GetSubMenu(0);
pPopup->TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTBUTTON, posMouse.x, posMouse.y, this);
0237デフォルトの名無しさん
2006/12/28(木) 12:45:141週間くらい悩むような問題を質問しろよ。
0238225
2006/12/28(木) 15:30:47文句しか言えない無知は黙ってろ
0239デフォルトの名無しさん
2006/12/28(木) 16:43:49どうすればいいのでしょうか?調べたんですがflagを立てるやり方しか見つかりません
その方法ではユーザーインターフェーススレッドのような複雑な処理をしているときになると
通じないと思いますぜひ知恵をお貸しください
0240デフォルトの名無しさん
2006/12/28(木) 16:46:340241デフォルトの名無しさん
2006/12/28(木) 16:49:190242デフォルトの名無しさん
2006/12/28(木) 16:54:48なにがどう関係ないのかの説明をいただきたい
0243デフォルトの名無しさん
2006/12/28(木) 16:55:130244デフォルトの名無しさん
2006/12/28(木) 17:00:280245デフォルトの名無しさん
2006/12/28(木) 17:06:24そのようなものは無いと思うんですが
0246デフォルトの名無しさん
2006/12/28(木) 17:14:100247デフォルトの名無しさん
2006/12/28(木) 17:15:530248デフォルトの名無しさん
2006/12/28(木) 17:34:50スレッド側に、メッセージ受けると終了するような仕組みを作る。
メインスレッドからスレッドにPostMessage or PostThreadMessage。
必要に応じて、メインスレッドはスレッドが終了するまで待機。
0249デフォルトの名無しさん
2006/12/28(木) 17:37:02ありがとうございますやってみます
0250デフォルトの名無しさん
2006/12/28(木) 22:05:29ユーザー定義メッセージのとこなんですが。
メッセージマップで
ON_MESSAGE(WM_USER_ENDTHREAD, OnUserEndthread)
ヘッダで
afx_msg void OnUserEndthread(UINT wParam, LONG lParam);
実体部で
void CPg1::OnUserEndthread(UINT wParam, LONG lParam)
{
;
}
としているのですが、コンパイル時に
pg1.cpp(130): error C2440: 'static_cast' : 'void (__thiscall CPg1::* )(UINT,LONG)' から 'LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)' に変換できません。
とでます。
VC6 では問題ないのですが・・・。 ご教授下されば有難く思います。
0251デフォルトの名無しさん
2006/12/28(木) 22:17:090252250
2006/12/28(木) 22:30:23void を LRESULT にしろってことですかね?
ユーザ定義メッセージハンドラの仕様が変わったというだけのことですか。
0253デフォルトの名無しさん
2006/12/28(木) 22:44:340254デフォルトの名無しさん
2006/12/29(金) 02:14:54結局、どうしたっけな・・・。
0255239
2006/12/29(金) 12:15:18Instanceでの処理は止まらないので終了することができません
WM_QUITの代わりのメッセージを作ったとしても終了処理をどうすればいいのでしょうか
Instance→Run→ExitInstanceの流れを通らないとスレッドの破棄は難しいのでしょうか?
>>248さんの終了処理するような処理をどうすれば実装できるか困っています
0256デフォルトの名無しさん
2006/12/29(金) 12:36:41文字通り、サブスレッド側でメッセージを受け取れば宜しい。
逆に言えば、サブスレッド側をそのように作らないといけない。
詳細は、サブスレッドの作りが判らないしスレ違いになるので割愛。
0257デフォルトの名無しさん
2006/12/30(土) 01:57:47タブ上にリストコントロールを表示する為、メンバ変数作って
OnInitDialog関数内でリストをCreateしています。
(タブはリソースエディタで貼り付けています)
表示はできたんですけどなぜかリスト内の項目が選択できません。
なんででしょう?とりあえずこんな感じで作ってます。
m_Tab.GetClientRect(&rcRect);
ClientToScreen(&rcRect);
rcRect.left -= 21;
rcRect.right -= 5;
rcRect.top += 44;
rcRect.bottom += 52;
m_ListCtrl.Create(LVS_SINGLESEL|WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_NOCOLUMNHEADER|LVS_REPORT|LVS_SHOWSELALWAYS,
rcRect, GetParent(), IDC_JOURNALSHOWSET_LIST_KP);
0258デフォルトの名無しさん
2006/12/30(土) 02:20:50本当に?
GetParent()はダイアログの親ウィンドウを返してると思うんだけど。
0259デフォルトの名無しさん
2006/12/30(土) 09:25:15結果オーライ
> 90 名前:デフォルトの名無しさん[] 投稿日:2006/12/04(月) 13:59:24
> ダイアログにタブコントロールを乗せ、複数のリストビューの表示をタブで切り替える
> ソフトを書いていたんですが、タブに重ねたリストビューの列サイズを操作すると
> リストビューの表示が乱れる現象が出てしまいました。
>
> (中略)
>
> 結果オーライといえばそれまでなんですが、どうしてこれで問題が解決するのか納得が
> いきません。リソース中の定義順が何に影響しているのでしょうか?
0260デフォルトの名無しさん
2006/12/30(土) 15:35:510261デフォルトの名無しさん
2006/12/30(土) 15:57:27ダイアログに追加していたんですが、ダイアログを終了する時にビープが一発鳴る
ようになってしまいました。
どこで鳴ってるのかデバッガで追ってみたところ、InitInstance の最終行、return FALSE;
で出て行ったあとのようです。この先も追いたいんですが、F11ではこれ以上追えません
でした。どういう風にデバッグすればいいでしょうか?
0262デフォルトの名無しさん
2006/12/30(土) 16:50:160263デフォルトの名無しさん
2006/12/30(土) 17:21:32の終了という構図です。Wizardが作ったコードそのままですけど、下記のような
雰囲気です。
BOOL MyDialogApp::InitInstance()
{
いろいろ初期化
CMyDialogDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
;
else if (nResponse == IDCANCEL)
;
return FALSE;
}
0264デフォルトの名無しさん
2007/01/01(月) 19:01:01ヒント:
void CMainFrame::RecalcLayout(BOOL bNotify)
CWnd::RepositionBars()
0265デフォルトの名無しさん
2007/01/03(水) 11:56:09以下のようにCFileDialogを使用して、ファイルの読み込み処理をつくりました。
これを、ビューの領域に表示するにはどうすればいいのでしょうか?
「void CFOpenView::OnDraw(CDC* pDC)」に処理を書けばいいと思うのですが、全然わかりません。
どなたか、教えてください。
void CFOpenDoc::OnFileRead()
{
CFileDialog CFDlg(TRUE, _T("txt"), NULL, OFN_HIDEREADONLY, _T("TEXTファイル(*.txt)|*.txt|すべてのファイル(*.*)|*.*||"));
CString String, FilePath;
CStdioFile StdFile;
if( CFDlg.DoModal() == IDOK){
FilePath = CFDlg.GetPathName();
if(StdFile.Open(FilePath,CFile::modeRead)){
StdFile.ReadString(String);
StdFile.Close();
} else {
AfxMessageBox(_T("ファイルが開けない"));
}
}
}
0266デフォルトの名無しさん
2007/01/03(水) 12:09:43文字列を表示するだけ
0268デフォルトの名無しさん
2007/01/03(水) 17:20:42フォームにボタンを配置して、そのボタンのCaptionを動的に変更したいのですが、方法が分かりません。
CButtonクラスメンバの中にもそれっぽい関数が見付からず途方に暮れてます。
方法があれば教えてください。お願いします。
0269デフォルトの名無しさん
2007/01/03(水) 18:40:160271デフォルトの名無しさん
2007/01/03(水) 20:22:26MP3ファイルをオープンするために呼び出す関数 vbmp3_openはヘッダ中に以下のように宣言されています。
BOOL APIENTRY vbmp3_open(const char* pszName, InputInfo* pInfo);
で、プログラム中で
vbmp3_open(FileName, &pInfo); // FileNameはCString型
としたところ、Debugでのコンパイルは成功するのですがReleaseのコンパイルが以下のエラーとともに失敗します。
error C2664: 'vbmp3_open' : 1 番目の引数を 'CString' から 'const char *' に変換できません。
この変換を実行可能なユーザー定義変換演算子がないか、または演算子を呼び出せません。
といった状態です。解決方法はありませんでしょうか。
0272デフォルトの名無しさん
2007/01/03(水) 21:16:140273デフォルトの名無しさん
2007/01/04(木) 09:35:43MDIタブの実装方法は難しくてここの住人に答えるのは無理ってことかぁ
0274デフォルトの名無しさん
2007/01/04(木) 09:55:03ないものは教えられない
0275デフォルトの名無しさん
2007/01/04(木) 10:05:09自分でMFCを拡張してタブを実装する技術はないってことだな>274
0276デフォルトの名無しさん
2007/01/04(木) 10:05:35Office2007のリボンの実装方法聞いてるのと同じようなものだからなあ。
頑張れば出来るんじゃね?としか言いようが無い。
0277デフォルトの名無しさん
2007/01/04(木) 10:07:560278デフォルトの名無しさん
2007/01/04(木) 13:46:54んで何が聞きたいんだ?
0279デフォルトの名無しさん
2007/01/04(木) 21:35:190280デフォルトの名無しさん
2007/01/05(金) 02:58:20以下のように2行コメントにしてみて
for(int i=0; i<FEMALE_MAX; i++){
if(female[i].IsMarried()==TRUE)
continue;
if(female[i].GetAge()<16)
continue;
// if(female[i].CheckQuality()==FALSE)
// continue;
propose(female[i]);
}
0281デフォルトの名無しさん
2007/01/05(金) 13:58:480282デフォルトの名無しさん
2007/01/06(土) 09:18:47femaleが空なんじゃないか?
つーか、FEMALE_MAXが0なのか。
0283デフォルトの名無しさん
2007/01/06(土) 09:43:43// continue;
こういう余計な制限もとっちゃおうぜ。
0284デフォルトの名無しさん
2007/01/06(土) 09:44:44// continue;
よく考えたらこれだって別に大した制限じゃねぇな。
0285デフォルトの名無しさん
2007/01/06(土) 09:46:04continue;
さすがに遠慮したいから入れておこうな。
0286デフォルトの名無しさん
2007/01/06(土) 09:47:49しょうがない、female -> maleに置き換えるんだ。
0287デフォルトの名無しさん
2007/01/06(土) 10:06:14くだらない話になると書き込みが増えるな
ROMってるやつ多いのか?
0288デフォルトの名無しさん
2007/01/06(土) 12:06:22CImageのLoadFromResourceに関して質問です
BITMAPリソースは読み込むことができるのですが、jpgファイルをバイナリリソースとして格納した場合に、こいつを読み取ってくれません
LoadResourceを使ってtmpファイルでも書き込んでからCImage::Loadなんて馬鹿馬鹿しいですし
何とか簡単にリソースに埋め込んだバイナリデータのjpgを読み込ませる方法はないでしょうか?
ちなみに、こんな感じでやってます
CImage image;
image.LoadFromResource(GetModuleHandle(NULL),ResourceID);
0289デフォルトの名無しさん
2007/01/06(土) 12:20:490290デフォルトの名無しさん
2007/01/06(土) 13:06:390291デフォルトの名無しさん
2007/01/06(土) 13:19:40>>288
::CreateStreamOnHGlobalとCImage::Load(IStream *)を使えば、ファイル無しでできる。
効率から言うと、バイナリリソースアクセス用のIStream実装を書いた方が良いけど('A`)マンドクセ
0292デフォルトの名無しさん
2007/01/07(日) 01:51:10普通のツールバー(ドッキングされているツールバー)はスケルトン作成(SDI or MDI)したソースを見れば
分かりそうな感じですが、それとスタイルが違うツールバーはどのように作れば良いですか?
グーグルで調べているのですが、思ったような情報に行き当たらず困っております
0293デフォルトの名無しさん
2007/01/07(日) 02:56:210294デフォルトの名無しさん
2007/01/07(日) 03:26:52サンクス
CreateStreamOnHGlobalでいけました
というか、IPictureをかまさないとストリームにならないのでかましたわけですが
これを使うとCImageの意味がまったくをもってないですね(笑)
0295デフォルトの名無しさん
2007/01/07(日) 10:14:35具体的な方法はMFCのソース読めばわかるよ
確かバーの上に張り付いてるやつを別ウインドウ開いて丸ごと引っ越すだけだったと思う。
0296デフォルトの名無しさん
2007/01/08(月) 17:20:10レスありがとうございます
ど素人(入社1年目)なので、それだけですとやり方が分かりません・・・
0297デフォルトの名無しさん
2007/01/08(月) 17:27:33ツールバー上のアイテム(ボタン?)をドラッグした時に
点線の四角形またはそのアイテムのアイコン(半透明)を
ドラッグ中のマウスポインタの横に表示させるにはどうすれば良いですか?
イメージとしては、VC++でダイアログリソース編集時にコントロールアイコンを
ツールバーからドラッグした時のような感じで
0298デフォルトの名無しさん
2007/01/08(月) 18:01:41自力で調べて判らないようなら上司なり先輩なりに聞け。
それでも判らないようならあんたには不適当な要求仕様なのだからそう上司(なり指示した人間)に言え。
0299デフォルトの名無しさん
2007/01/08(月) 18:30:36スレタイを2万5千回ぐらい嫁。
0300デフォルトの名無しさん
2007/01/08(月) 18:36:216時間も7時間もやってらんない。
0301デフォルトの名無しさん
2007/01/08(月) 18:47:17相談室だから>>298のようなアドバイスもアリじゃないか
0302デフォルトの名無しさん
2007/01/08(月) 18:52:35あと2ちゃんで仕事をにおわせると答えてもらいにくくなるよ
タダで教えてその内容で相手は金を得るわけだし
0303デフォルトの名無しさん
2007/01/08(月) 18:52:59要求仕様のさばき方相談室じゃないんだよー
0304デフォルトの名無しさん
2007/01/08(月) 19:37:22できない仕事をかかえこまないように
0305デフォルトの名無しさん
2007/01/08(月) 22:18:54なんつーか色々と色んなことが困難だw
0306デフォルトの名無しさん
2007/01/08(月) 22:19:300307デフォルトの名無しさん
2007/01/08(月) 23:27:04質問の意味が2通りに取れるんだが
MFC標準のCToolBarをフローティング状態で表示したいってこと?
それとも独自にフローティングツールバーを実装したいってこと?
おそらく前者の意味で聞いてるんだと思うけど、
それならCFrameWnd::FloatControlBar()でフローティング状態にできるよ。
後者なら、MFCのソースを参考に自分で書けとしか言えません。
0308デフォルトの名無しさん
2007/01/09(火) 11:46:02そのテキスト上でのマウスドラッグはバーのドラッグ処理になりますが、
これってどのような仕組みなのでしょうか。
ダイアログバー内に貼り付けた自作ウィンドウクラスにも
このような動作を組み込みたいんです。
OnNcHitTestでHTTRANSPARENTやHTCAPTIONを返してみても
まったく動かなかったり、コントロールだけが動いたり、
ダイアログバー内でダイアログ自身が動いてしまったりと、
仕組みがわからずに苦戦しています。
同じスタティックテクストでも
IDC_STATIC以外の名前を付けるとドラッグにならないようなので、
コントロールバークラスがIDC_STATICに対して
なにか特別なことでもやっているのでしょうか。
0309デフォルトの名無しさん
2007/01/09(火) 12:48:240310デフォルトの名無しさん
2007/01/09(火) 12:51:330311デフォルトの名無しさん
2007/01/13(土) 23:36:22ドキュメント: プログラム内で共有するデータを扱う, メンバ変数がたくさんある, ファイル入出力
ビュー: ユーザとのインタフェースを扱う, 描画を取り仕切る, コントロール管理
の認識でOKですか?
0312デフォルトの名無しさん
2007/01/13(土) 23:58:140313デフォルトの名無しさん
2007/01/14(日) 00:00:08概ねOKじゃね?
どっちかっていうとその役割よりドキュメントとビューがセットで1つになってること(ドキュメントテンプレートってのなかった?)
新規作成でできるもんがドキュメント+ビューを型にしたインスタンスであることって方が重要のような気がするがわかっているならOK。
そうすると自然にMDIのアプリは
1.メインフレーム(メニューとかくっついてる)
2.(ドキュメント+ビュー)X新規作成で生成された数分
3.その他のツールウィンドウやダイアログ
で構成されることになる。
VCだと
・メインフレーム(メニューとかくっついてる)
・ソースコードエディターとかリソースエディター等など(新規作成からできる奴)
・ソリューションエクスプローラーとかアウトプットウィンドウとか・・・
にあたる。
強引に「こうやって作れよ!」っていう型なんで設計からしてこうやってなってないと駄目っちゃ駄目だなw
0314311
2007/01/14(日) 00:12:54http://jbbs.livedoor.jp/bbs/read.cgi/game/19692/1168442603/
私は、真珠さんって少し変わった趣味を持った人だなー、とかは思いますけど、それだけで叩いたりするのってひどいと思いませんか?
私はあまりネットには詳しくないのでよくわからないんですが、なんかほなみんさんが2chとか言ってたので調べてみると見つかったので書き込んでみました。
このままだと真珠さんがかわいそうなんで、誰か真珠さん側についてほなみんさんを叩き返してくれませんか?私じゃ勝てそうにないので。
0316デフォルトの名無しさん
2007/01/14(日) 00:46:000317デフォルトの名無しさん
2007/01/14(日) 01:44:250318デフォルトの名無しさん
2007/01/14(日) 06:58:08なんで初心者に向かって何の前置きも無しに、あまりお目にかからないMDIのさらにレアな
複数のドキュメントタイプを持つアプリの解説を始めるのか、理解に苦しむよ。
VS2005でMFCアプリのデフォルトプロジェクトがMDIになったのは大失敗な気がする。
>>311
http://msdn2.microsoft.com/ja-jp/library/4x1xy43a(VS.80).aspx
この解説が分かりやすいよ。
0319デフォルトの名無しさん
2007/01/14(日) 08:06:10ええ!?
>>313のどこをどう読めばが複数ドキュメントの解説がメインになってるの?
とんだ濡れ衣だ!勘違いなら謝ってよ!
0320デフォルトの名無しさん
2007/01/14(日) 08:06:57○複数ドキュメントタイプ
0321デフォルトの名無しさん
2007/01/14(日) 09:00:21>重要のような気がするがわかっているならOK。
SDIでは100%成り立たないし、単一のドキュメントタイプをもつMDIなら自明で重要性は感じられない。
これが重要な意味を持つのは複数のドキュメントタイプをもつMDIしかないように思った。
確信犯だと思ったんだが、気に障ったのなら謝るよ。漏れの知らない世界があるんだろうね。
0322デフォルトの名無しさん
2007/01/14(日) 10:00:53え?じゃあ、君の勝手な妄想で俺につっかかってきたの?
それとあきらかにその文章で複数ドキュメントタイプの説明なんて書いてないのにその態度はなんなの。
しかも、確信犯の使い方も間違ってるし。
こんなの業務でやったら大変だぜ。改めろよ。
0323デフォルトの名無しさん
2007/01/14(日) 10:23:180324デフォルトの名無しさん
2007/01/14(日) 10:27:37これ昔からだろ、2005ではじめて触ったのか
0325デフォルトの名無しさん
2007/01/14(日) 11:07:34MFC以前からある
ドキュメント/ビュー
MFC2.0で追加された
0326デフォルトの名無しさん
2007/01/14(日) 12:59:31つまり class CHogeDocTemplate : public C[Single/Multi]DocTemplate
の OpenDocumentFile で特定のフレームを閉じる様にしたいのですが、
閉じる時に CFrameWnd::DestroyWindow や OnCloseDocument を使うと
OnClose が呼びだされないがこれで大丈夫なのか、
だめだとしたら正しい閉じ方はどうなのかを教えていただきたいのです。
よろしくお願いします。
0327デフォルトの名無しさん
2007/01/14(日) 13:14:370328デフォルトの名無しさん
2007/01/14(日) 13:34:04OnClose が呼びだされないのは当たり前
0329デフォルトの名無しさん
2007/01/14(日) 13:39:10普通にとはどのようにでしょうか?
>>328
その通りです。OnClose から閉じる方がドキュメントを閉じる等の処理も
正しく行われるように読めたので出来ればそうしたく質問しております。
0330デフォルトの名無しさん
2007/01/14(日) 13:47:01OnCloseDocumentからOnClose が呼びだされないのは当たり前
0331デフォルトの名無しさん
2007/01/15(月) 21:50:20OnDocumentCloseはドキュメントを閉じる時
と考えれば何も問題ないべ
0332デフォルトの名無しさん
2007/01/16(火) 04:24:49起動しただけでCPU使用率50%という異常な状態になっていました。
このプログラム自体、起動と同時に行う処理はほとんどなく、
SDIのスケルトンと同じようなもののはずなんですが。。
処理がないのにCPU使用率が高いまま下がらないのは
原因としてどのようなことが考えられますか?
もしくは原因を調べる方法とかってありますか?
■ このスレッドは過去ログ倉庫に格納されています