■MFC相談室 mfc16d.dll■
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/04/27(木) 15:04:53前スレ
■MFC相談室 mfc15d.dll■
http://pc8.2ch.net/test/read.cgi/tech/1131958904/
0002デフォルトの名無しさん
2006/04/27(木) 15:41:30だと?
舐めるなよゴミ野郎!
0003デフォルトの名無しさん
2006/04/27(木) 15:48:09だ、良く見ろボケ
0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
2006/04/27(木) 16:58:580006デフォルトの名無しさん
2006/04/28(金) 21:06:540007デフォルトの名無しさん
2006/04/28(金) 21:57:270008デフォルトの名無しさん
2006/04/29(土) 00:55:370009デフォルトの名無しさん
2006/04/29(土) 13:47:586.0の知識はほとんどそのまま流用できますか?
0010デフォルトの名無しさん
2006/04/29(土) 13:52:27嫁
0011デフォルトの名無しさん
2006/04/29(土) 22:39:070013デフォルトの名無しさん
2006/04/30(日) 08:34:23CString周りがそこそこ違う。
実装レベルで見るとかなり違う。
0014デフォルトの名無しさん
2006/04/30(日) 18:22:380015デフォルトの名無しさん
2006/05/01(月) 17:23:287.0以降、ATL/MFCが統合されて、atlmfcになったって感じなのかな。
正直、単一プロジェクトでMFCとATLをミックスして使う気にはなれんが…。
0016デフォルトの名無しさん
2006/05/01(月) 17:42:580017デフォルトの名無しさん
2006/05/02(火) 22:57:50http://f42.aaa.livedoor.jp/~imawaka/imgboardphp/src/1146577850180.jpg
のエラーが出るんですが、
ダイアログに「ActiveXコントロールの挿入」をした際に出ます。
なぜでしょうか?
0018デフォルトの名無しさん
2006/05/02(火) 23:00:470019デフォルトの名無しさん
2006/05/04(木) 20:39:03XPスタイルで描画するにはどうすればいいのでしょうか?
0020デフォルトの名無しさん
2006/05/05(金) 20:50:15ListViewのカスタマイズなんですが、
ListViewに表示されるスクロールバー(CScrollBar)のオブジェクトを得るにはどうすればいいのでしょうか?
メッセージマップでOnHScrollやOnVScrollにイベントは着ますが、その引数CScrollBar* pScrollはNULLのままです。
0021デフォルトの名無しさん
2006/05/06(土) 22:35:17CString cstr;
cstr = "12345";
lpsz = (LPCSTR)(LPCTSTR)cstr;
ここで、ブレークポイントを入れてlpszの中を見てみると
'1'だけしかありません。
どうして"12345"とすべて表示されないのでしょうか。
0022デフォルトの名無しさん
2006/05/06(土) 22:52:430023デフォルトの名無しさん
2006/05/06(土) 23:03:120024デフォルトの名無しさん
2006/05/06(土) 23:12:41プログラムでCDialog d1, d2と定義し、
d1.Create( IDD_DIALOG1 );
d2.Create( IDD_DIALOG1 );
とすることで生じる問題はないのでしょうか?
とりあえず表示はできたのですが。
目的は同じダイアログを複数作成したいということなのですが。
0025デフォルトの名無しさん
2006/05/06(土) 23:15:390026デフォルトの名無しさん
2006/05/06(土) 23:18:12問題ない
002724
2006/05/06(土) 23:20:01安心しました。IDとタイトルは後から変えることにします。
0028デフォルトの名無しさん
2006/05/06(土) 23:22:40szName = (const char *) inputDlg.m_edit;
のキャストでもエラーやメッセージが出ずにビルドがOKになります。
どうしてなのでしょうか?
002928
2006/05/06(土) 23:25:040030デフォルトの名無しさん
2006/05/06(土) 23:31:43うそだと思うなら中みてみろ
0031デフォルトの名無しさん
2006/05/06(土) 23:37:32003228
2006/05/06(土) 23:40:29szName = (const char *) inputDlg.m_edit;
はエラーになるのです。
error C2440: '型キャスト' : 'CString' から 'const char *' に変換できません。
この変換を実行可能なユーザー定義変換演算子がないか、または演算子を呼び出せません。
0033デフォルトの名無しさん
2006/05/06(土) 23:46:46LPCTSTRというマクロがある。
0034デフォルトの名無しさん
2006/05/06(土) 23:50:18cstr = "12345";
lpsz = (LPCSTR)(LPCTSTR)cstr;
はlpsz "12345"
となるのですが、
私のプロジェクトだと
cstr = "12345";
lpsz = (LPCSTR)(LPCTSTR)cstr;
はlpsz "1"
となるのです。
なぜなのかがわかりません。
003528
2006/05/06(土) 23:59:28http://f42.aaa.livedoor.jp/~imawaka/imgboardphp/src/1146927530603.jpg
ことです。
003628
2006/05/07(日) 00:01:18違った文字列が設定されてしまうのです。
003728
2006/05/07(日) 00:05:50http://f42.aaa.livedoor.jp/~imawaka/imgboardphp/src/1146927892987.jpg
うまく"yyy"として処理されるのです。
なぜ、私のプロジェクトだと、"yyy"が"y"だけとなるのでしょうか?
0038デフォルトの名無しさん
2006/05/07(日) 00:06:47003928
2006/05/07(日) 00:12:22違う型みたいなんですが
http://f42.aaa.livedoor.jp/~imawaka/imgboardphp/src/1146928274145.jpg
定義としては同じ「CString」なんですよ。
004028
2006/05/07(日) 00:24:54やはり、"y"となります。
http://f42.aaa.livedoor.jp/~imawaka/imgboardphp/src/1146929050374.jpg
004128
2006/05/07(日) 00:27:52文字列は"y"としか返さないんですよ。
どうすればよいのでしょうか?
0042デフォルトの名無しさん
2006/05/07(日) 00:30:570044デフォルトの名無しさん
2006/05/07(日) 01:00:08終わった話だけど、ちょっと気になった。
0045デフォルトの名無しさん
2006/05/07(日) 01:05:170046デフォルトの名無しさん
2006/05/07(日) 01:14:07おそらくVS2005はユニコードベースになったんだろ。
0047デフォルトの名無しさん
2006/05/07(日) 10:04:32UNICODE、マルチバイト間を互いに変換するコンストラクタがあるから大丈夫
0048デフォルトの名無しさん
2006/05/07(日) 10:09:12>cstr = "12345";
>lpsz = (LPCSTR)(LPCTSTR)cstr;
>はlpsz "1"
まず最初の (LPCTSTR)cstr は CString::operator LPCTSTR() が呼ばれて文字列の先頭アドレスが返される。
多分UNICODEビルドになっていてLPCTSTRはLPCWSTR、UNICODE文字列なのだろう。
これをLPCSTRにキャストしても内容は変化しない。UNICODE文字列をマルチバイト文字列として解釈することになる。
UNICODEの"1234"はメモリ上では
0x31 0x00 0x32 0x00 0x33 0x00 0x34 0x00 0x00 0x00
となっている。
コレをマルチバイト文字列として解釈すると、2番目の0x00がヌル文字として機能してしまいそれ以降が見えなくなる。
よって
0x31→'1' 0x00→'\0'
↓
"1"
と見えるわけだ。
0050デフォルトの名無しさん
2006/05/07(日) 16:40:370051デフォルトの名無しさん
2006/05/08(月) 21:19:18マニフェストを適用していますが、オーナー描画しているボタンだけ
丸みのある表現となりません。
何かスタイルでも設定が必要なのでしょうか?
0052デフォルトの名無しさん
2006/05/08(月) 21:50:370053デフォルトの名無しさん
2006/05/08(月) 22:03:52やっぱそこも自分でやらないとだめなんだ。
まったく同じようにするにはどうすればいいんでしょう?
0054デフォルトの名無しさん
2006/05/08(月) 22:45:03ファイルなどで定義できるようにして、可変個引数の数も任意の数を渡せる
ようにしたいと考えています。
イメージとしては
LPCTSTR calcStr[2] = {_T("%d + %d + %d + %d"),
_T("%d + %d + %d + %d + %d")};
CString csTmp;
for(int i = 0; i < 2; i++){
csTmp.Format(calcStr[i], ????????????);
TRACE(_T("%s\n", csTmp);
}
のような感じです。
このとき、Format()関数で可変個の引数を渡す部分(上記????????????の部分)を
どのようにすればよいか、色々探してみたのですが手段が分かりませんでした。
どなたかご存知の方いらっしゃいましたらご教授願えませんでしょうか。
0055デフォルトの名無しさん
2006/05/08(月) 22:55:310056デフォルトの名無しさん
2006/05/08(月) 22:57:26書式で指定した分しか使わないから
0057デフォルトの名無しさん
2006/05/09(火) 03:43:54int A = 1 ;
int B = 2 ;
CString csTmp;
int i = 0 ;
while(i < strlen(calcStr)){
if(calcStr[i] == '@'){
i++ ;
CString s ;
switch(calcStr[i]){
case 'A' :
s.Format("%d", A) ;
csTmp += s ;
break ;
case 'B' :
s.Format("%d", B) ;
csTmp += s ;
break ;
}
i++ ;
}else{
csTmp += calcStr[i] ;
i++ ;
}
}
テキトー
005854
2006/05/09(火) 23:33:05>56 氏の方法で試してみることにします。
0059デフォルトの名無しさん
2006/05/14(日) 22:00:18やはりAPIの勉強をしてからのほうがいいでしょうか?
そのうちデータベースと組み合わせていきたいんですが
いい書籍あったら教えてください
0060デフォルトの名無しさん
2006/05/14(日) 22:14:18大丈夫、MFCを使いこなせるようになる頃には、いやでも大概のAPIの知識は身につく。
書籍に関しては書籍スレへ。
0061デフォルトの名無しさん
2006/05/15(月) 00:08:50APIの勉強というより、Windowsの動作の仕組みを勉強しておけば
MFCでもAPIでもわかりやすくなると思う。
0062デフォルトの名無しさん
2006/05/15(月) 15:18:100063デフォルトの名無しさん
2006/05/15(月) 15:21:40CString
0064デフォルトの名無しさん
2006/05/15(月) 15:22:010065デフォルトの名無しさん
2006/05/15(月) 15:31:110066デフォルトの名無しさん
2006/05/15(月) 15:35:01ボタンをクリックしたら
変数をリストボックスに追加していきたいんですが
初心者ですいません a=5だとしたら5をリストに追加したいです
0067デフォルトの名無しさん
2006/05/15(月) 15:37:02ちょっとびっくり
0068デフォルトの名無しさん
2006/05/15(月) 15:40:00Cやってから最近MFCやりはじめたんですが…
printf関数の使い方とはもちろん違いますよね…
0069デフォルトの名無しさん
2006/05/15(月) 15:41:010070デフォルトの名無しさん
2006/05/15(月) 15:43:030071デフォルトの名無しさん
2006/05/15(月) 15:44:49CString ss;
int a = 5;
ss.format("%d", a);
xxx.AddString(ss);
0072デフォルトの名無しさん
2006/05/15(月) 15:47:03ss.formatをしないといけないんですね
勉強になりました
0073デフォルトの名無しさん
2006/05/15(月) 16:05:440074デフォルトの名無しさん
2006/05/15(月) 19:46:140075デフォルトの名無しさん
2006/05/15(月) 20:00:210076デフォルトの名無しさん
2006/05/16(火) 00:25:18このスレ的には
0077デフォルトの名無しさん
2006/05/16(火) 23:23:18CString -> std::string
は
std::string CStringToString(CString *str){
LPTSTR lpt;
lpt = str->GetBuffer();
std::string Restr;
Restr.erase();
for(int a=0; a<str->GetLength(); a++){
Restr.append((char*)lpt);
lpt++;
}
Restr.append("\0");
str->ReleaseBuffer();
return Restr;
}
これで出来ったぽいんですが.
逆のstd::string->CStringってどうやるんですか?
mbstowcs
とかいろいろ調べてますが,うまくいかない...
0078デフォルトの名無しさん
2006/05/16(火) 23:39:36ちゃんとoperator = () が定義されるはずだから
代入だけでMB <-> UNICODEは勝手にやってくれると思うよ。
0079デフォルトの名無しさん
2006/05/16(火) 23:48:55CString cstr;
std::string str = "test";
cstr = str;
ですか?
error C2679: 二項演算子 '=' : 型 'std::allocator<_Ty>::value_type' の右オペランドを扱う演算子が見つかりません (または変換できません)。
with
[
_Ty=std::string
]
という風に返ってきます.
後検証した結果,上で書いたやつも全角文字を使った瞬間正常動作しなくなりました...
全角文字に対応した
CString <--> std::String
の方法どなたかおしえていただけないでしょうか・・・
0080デフォルトの名無しさん
2006/05/16(火) 23:53:04すまそ。適当にやった。operator =()が定義されてるのは
Cスタイルの文字列配列だった。正しくはこうだ。
CString cstr;
std::string str;
cstr = str.c_str();
str = CStringA(cstr);
0081デフォルトの名無しさん
2006/05/17(水) 00:02:54動きました...
一日悩んでたことが数行で解決したのですっごい脱力です...
本当にありがとうございました
0082デフォルトの名無しさん
2006/05/23(火) 16:47:55SDIアプリケーションで
カラム作るのに最適(一回しか通らない)な
イベント、オーバーライド
って何ですか?
0083デフォルトの名無しさん
2006/05/23(火) 16:51:10CListViewじゃないの?
0084デフォルトの名無しさん
2006/05/23(火) 16:52:120085デフォルトの名無しさん
2006/05/23(火) 17:00:530086デフォルトの名無しさん
2006/05/23(火) 17:17:090087デフォルトの名無しさん
2006/05/23(火) 17:20:100088デフォルトの名無しさん
2006/05/23(火) 17:25:130089デフォルトの名無しさん
2006/05/23(火) 17:28:05OnInitializeUpdateで初期化フラグつけて作ることにしました。
引き続き、いい方法あったら教えてください。
0090デフォルトの名無しさん
2006/05/23(火) 18:54:08OnInitialUpdate ドキュメント関連付け後
どっちも新規作成ごとに呼ばれる
0091デフォルトの名無しさん
2006/05/24(水) 13:03:49行がいっぱいになったら自動でスクロールバーがでるのはいいのですが
位置も最下段にしたいばあいはどうしたらよかとですか?
int nMinPos;
int nMaxPos;
this->GetScrollRange( SB_VERT, &nMinPos, &nMaxPos );
this->SetScrollPos( SB_VERT, nMaxPos );
こうやってかいたけど、だめだーた・・・
0092デフォルトの名無しさん
2006/05/24(水) 13:59:160093デフォルトの名無しさん
2006/05/24(水) 14:02:55//参考までに。EditViewは使ったことないから知らない
void scrollToBottom(CEdit & edit)
{
edit.SetRedraw(false);
edit.LineScroll(edit.GetLineCount());//最後までスクロール
edit.LineScroll(-1);//改行で終わると最後が空行なので戻す
edit.SetRedraw();
}
0094デフォルトの名無しさん
2006/05/25(木) 03:12:57プログラミング Microsoft Visual C++ .NET Vol.1 基礎編、Vol.2 活用編
vol1は難なく読めたんだがvol2が最初からわからん・・・
一番最初のCOMシュミレーションの所だけは理解したつもりだけど
COMのところがさっぱりわからん。ウイザードをどう使えばインターフェースが作れるんだろう?
あのCOMシュミレーションのMETHOD_PROLOGUEってhas-aの継承に対するdynamic_castみたいな事を
やってるんだよなぁ、多分。DYNAMIC_DOWNCASTかな?うまく言えないけど。よくわからん
0096デフォルトの名無しさん
2006/05/25(木) 13:32:16チェックボックスがフォーカスを受けると、フォーカス枠はCaption文字列を囲むのが
通常の動作のようですが、ボックス全体を囲むフォーカス枠を表示したりする方法を
ご存知でしたら教えてください。
Captionの文字列を無しにしたらフォーカス枠自体が描画されなくなってしまって
困ってしまいました。
よろしくお願いします。
0097デフォルトの名無しさん
2006/05/25(木) 14:50:15009896
2006/05/25(木) 16:59:49やぱーり自分で描いてあげるんですね。
ありがとうございました。
0099デフォルトの名無しさん
2006/05/26(金) 11:24:34同じようにDocからFrameを見たいいときにはどうすればよいのでしょう?
Frameのメソッド呼び出したり、Frameのコントロールにアクセスしたいのです。
0100デフォルトの名無しさん
2006/05/26(金) 11:31:570101デフォルトの名無しさん
2006/05/26(金) 11:36:37010299
2006/05/26(金) 11:41:140103デフォルトの名無しさん
2006/05/26(金) 15:31:19VC6でMailSlotを使おうとしているのですが、非同期読み込み
をさせたくて、以下のようなコードを書きました。
---
ReadFileEx(m_hSlot, Buf, 4096, &overlapped, NULL);
Rsts = WaitForSingleObjectEx(m_hSlot, nWait, FALSE);
---
が、タイムアウト時間を十分大きく取った上で、Wait中にデータ
を投げてもWaitが解除されません。(結局タイムアウトで抜ける)
ループで回してやると、次の回ではWaitForSingleObjectExはすぐ
抜けてくれます。
MailSlotではこういう使い方は出来ないんでしょうか…。
0104デフォルトの名無しさん
2006/05/27(土) 23:39:27OCXの登録ができなくなりますが、
それはなぜでしょうか?
OCX
void FuncA()
{
FuncB();
}
DLL
void FuncB()
{
FuncC();
}
DLL
void FuncC()
{
}
0105デフォルトの名無しさん
2006/05/29(月) 16:57:39StartDoc()EndDoc()など行って、印刷をできるようにはなったのですが、
TextOut()のX座標Y座標の計算の仕方がわかりません。
論理フォントのlfHeightの分だけプリンタのY座標を増やしたいのですが…
0106デフォルトの名無しさん
2006/05/29(月) 17:35:480107105
2006/05/29(月) 18:26:53lfHeightだけ移動すればうまくいくようになりました。
プリンタの既定のフォントを
pPrintDC->GetCurrentFont()->GetLogFont(&logFont);
で取得したのですが、この高さではうまくいきませんでした。
0108105
2006/05/30(火) 17:29:47全角文字の幅をきっかり半角文字の2倍にするにはどうすればいいでしょうか。
現在、lfFaceNameは
0109デフォルトの名無しさん
2006/05/30(火) 18:17:010110デフォルトの名無しさん
2006/05/30(火) 20:56:00>>108
9ポイントとか12ポイントとか、そういう 3 の倍数じゃないと
ずれるとかいう話を聞いた。
(10.5 でもいいんだっけ?)
0111デフォルトの名無しさん
2006/05/30(火) 21:34:170112デフォルトの名無しさん
2006/05/30(火) 22:49:31間違い。
デバイス単位で「全角文字」の幅が偶数になるようにしなけりゃ
ならんので、そんな単純な話にはならない。
0113105
2006/05/31(水) 09:29:30どんどん深みにはまって行くな…。印刷ぐらいメモ帳でしてほしい。
0114デフォルトの名無しさん
2006/05/31(水) 11:10:10印刷で全角文字と半角文字が混じっていても
罫線がずれないようにしたいという質問なら
PC初心者板で聞けば回答が得られるかも
0115デフォルトの名無しさん
2006/05/31(水) 11:30:59文字情報にできているのなら、一旦テキストファイルに落としてから印刷要求つきでメモ帳を起動すればできなくもない。
0116デフォルトの名無しさん
2006/05/31(水) 11:38:09問題解決にはならんだろ。
0117デフォルトの名無しさん
2006/05/31(水) 15:11:47でもプログラミングと関係ない。
0118デフォルトの名無しさん
2006/05/31(水) 21:41:34新しいウインドウを生成するにはどうしたらいいのでしょうか?
子ウインドウってやつですかね?
0119デフォルトの名無しさん
2006/05/31(水) 21:45:450120デフォルトの名無しさん
2006/06/03(土) 01:02:46どこで配布してるの?
lunascapeでも似たようなドッキングウィンドウを使ってるみたいなんだけど?
0121デフォルトの名無しさん
2006/06/03(土) 01:18:550122121
2006/06/03(土) 01:44:49自動的に隠れたりするってこと? なら知らない
0123デフォルトの名無しさん
2006/06/03(土) 10:06:34さっさと標準コントロールにしてほしい
0124デフォルトの名無しさん
2006/06/03(土) 10:12:050125デフォルトの名無しさん
2006/06/03(土) 10:12:420126デフォルトの名無しさん
2006/06/04(日) 17:18:300127デフォルトの名無しさん
2006/06/04(日) 18:42:38MFCでってのが一般的とは言えない、作りたいものによるだろうが
0128デフォルトの名無しさん
2006/06/05(月) 00:53:350129デフォルトの名無しさん
2006/06/05(月) 01:18:540130デフォルトの名無しさん
2006/06/06(火) 16:27:270131デフォルトの名無しさん
2006/06/06(火) 17:27:18入門書を買ってきて勉強しましょう。
0132デフォルトの名無しさん
2006/06/06(火) 17:48:23SQLサーバーに置いているデーターベースを表示と操作するプログラムを作りたいんですが
ほかの本をみても2003からしか対応してなくて困ってるんです
0133デフォルトの名無しさん
2006/06/06(火) 20:46:25MFCのデーベース用のクラスの名前で検索すれば見つかるだろう。
0134デフォルトの名無しさん
2006/06/07(水) 07:16:42本読めとかも本の名前言ってないし
ここほんとにMFCできるやついんの?
ただの知ったかの集団か
0135デフォルトの名無しさん
2006/06/07(水) 09:21:370136デフォルトの名無しさん
2006/06/07(水) 09:27:340137デフォルトの名無しさん
2006/06/07(水) 09:40:09これは簡単に見つかるな
いったいなにがわからないのか理解不能
0138デフォルトの名無しさん
2006/06/07(水) 10:14:340139デフォルトの名無しさん
2006/06/07(水) 21:26:41しかし、SDKは面倒くさい
0140デフォルトの名無しさん
2006/06/07(水) 21:32:39******Viewクラスのどのイベントを使えばいいのか分からない
やりたいことはViewに描いた図や画像をD&Dで自由に動かせるようにしたいってこと
今、マウス操作の簡単なゲームを作成しているんだが、D&Dの部分で躓いている
0141デフォルトの名無しさん
2006/06/07(水) 22:25:180142デフォルトの名無しさん
2006/06/07(水) 23:38:540143デフォルトの名無しさん
2006/06/08(木) 00:13:42つまり、
int hoge[100];
って配列だったら 100 って値を取得したいんだ
Java だったら普通に Length で取得できるんだが・・・
0144143
2006/06/08(木) 00:15:01なければやり方を教えてください
0145デフォルトの名無しさん
2006/06/08(木) 00:25:440146デフォルトの名無しさん
2006/06/08(木) 00:29:08ありがとう!
0147デフォルトの名無しさん
2006/06/08(木) 00:40:58例えば、
int hoge[100];
ってなっているやつに 101 個以上のデータを格納できるようにしたい
メモリ系は苦手なので関数があれば嬉しいんだけどな・・・
0148デフォルトの名無しさん
2006/06/08(木) 01:10:150149デフォルトの名無しさん
2006/06/08(木) 01:39:140150デフォルトの名無しさん
2006/06/08(木) 09:01:24今時そんな屁の足しにもならないもん使うなよ。
0151デフォルトの名無しさん
2006/06/08(木) 14:16:49子ウィンドウCでメッセージが発生したとき、
PreTranslateMessageを使うと
親ウィンドウAのPreTranslateMessage→子ウィンドウBのPreTranslateMessage→子ウィンドウCのPreTranslateMessage
という順序で呼ばれ、途中でTRUEが返されればそこで止まる、
という理解でよろしいのかしらん?
0152デフォルトの名無しさん
2006/06/09(金) 01:22:30逆。子ウィンドウCが最初で、TRUEが返されるまで親を辿っていく。
0153デフォルトの名無しさん
2006/06/10(土) 18:59:00UpdateAllViews(NULL)を別のスレッドから呼んでやると
実行時エラー?が出るんだがどうしたらいい?
0154デフォルトの名無しさん
2006/06/10(土) 19:30:38ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_multithreading.3a_.programming_tips.asp
0155デフォルトの名無しさん
2006/06/10(土) 19:43:16読んでみる。
アリガト
0156デフォルトの名無しさん
2006/06/10(土) 20:44:24「UpdateAllViewsを呼んでね」
って独自のメッセージを送る
0157デフォルトの名無しさん
2006/06/10(土) 21:31:04おお、そのほうがよさげです。
ども。
0158デフォルトの名無しさん
2006/06/11(日) 13:59:37サンクス
0159デフォルトの名無しさん
2006/06/12(月) 09:27:04delete [] hoge;
hoge = new int[101];
0160デフォルトの名無しさん
2006/06/12(月) 17:07:14開発環境eVC++4.0でCStaticに表示される文字を
180度回転させた状態で表示したいのですが上手くいきません。
以下、OnInitDialog内での記述です。
// this->m_Test1はCStatic
CRect workRect;
CFont* pTest1Font;
LOGFONT logFont;
CString strText = "TODO:This is Test courier New";
memset(&logFont, 0, sizeof(LOGFONT));
this->m_Test1.GetWindowRect(workRect);
this->m_Test1.ScreenToClient(workRect);
pTest1Font = new CFont;
lstrcpy(logFont.lfFaceName, _T("courier New"));
logFont.lfEscapement = 1800;
pTest1Font->CreateFontIndirect(&logFont);
this->m_Test1.SetFont(pTest1Font);
this->m_Test1.SetWindowText(strText);
こうするとCStaticの表示領域外で文字が回転しているらしく
上手く領域内に表示出来ません。
どうすれば宜しいのでしょうか?
お願いします。
0161デフォルトの名無しさん
2006/06/12(月) 17:29:330162デフォルトの名無しさん
2006/06/12(月) 19:44:33なんでSetWindowTextなんだろうね
なんかのサンプルいじったのかな?
0163105
2006/06/13(火) 16:40:10違うプリンタで印刷した場合、罫線の位置がずれてしまうそうなのです。
(不思議なことに横線はずれていないのに縦線だけずれています。)
今、SetMapMode()の引数にMM_TEXTを指定しているのですが、
MM_LOMETRICなど試してみましたが、紙に何も印刷されませんでした。
MM_TEXTで印刷した場合のLineToの座標の意味について教えて下さい。
0164デフォルトの名無しさん
2006/06/13(火) 16:58:160165105
2006/06/13(火) 17:14:04MM_LOMETRIC それぞれの論理単位は、0.1 mm にマップされます。
x 座標の正方向は右、y 座標の正方向は上になります。
MM_TEXT それぞれの論理単位は、1 デバイス ピクセルにマップされます。
x 座標の正方向は右、y 座標の正方向は下になります。
・・・上下逆になるんですね。ありがとうございます。
0166デフォルトの名無しさん
2006/06/13(火) 17:59:09で、そのダイアログにリストビューを張ってるんですが、
FormViewに何かのウィンドウが乗っかって
リストビューの部分が隠されると、再描画がされないのか
リストビューが埋まってしまいます。
他のウィンドウがのかってもちゃんとリストビューが埋まらないようにしたいんですが
どうしたらいいでしょ〜か。。。
0167デフォルトの名無しさん
2006/06/13(火) 18:09:03再描画されない原因を突き止めろ
0168デフォルトの名無しさん
2006/06/13(火) 18:50:010169デフォルトの名無しさん
2006/06/13(火) 20:31:53LVS_OWNERDATA および LVS_EX_CHECKBOXESスタイルを
設定した場合にチェックボックスが描画されないという
問題にぶち当たってしまい、Web を検索したところ同様の悩みを
持ってる人はいるようなのですが解決方法がどこにも・・・
ご存知の方いらっしゃいますでしょうか?
[参考URL]
ttp://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200505/05050038.txt
ttp://www.codeguru.com/forum/archive/index.php/t-288682.html
ttp://www.codecomments.com/archive372-2005-4-450031.html
0170デフォルトの名無しさん
2006/06/14(水) 09:52:58ieDlg.cppに
CIeDlg::~CIeDlg(void)
{
CoUninitialize();
}
と書いてデストラクタを追加しようとしたら、
error C2084: 関数 '__thiscall CIeDlg::~CIeDlg(void)' はすでに実体を持っています。
となる
デストラクタが二重宣言されているんだなと思い
ieDlg.cppをくまなく見てみたが、どこにも他には宣言されていない
何がまずいのでしょうか?
0171デフォルトの名無しさん
2006/06/14(水) 10:08:55まさかとは思うが一応念の為に聞いてみる。
ieDlg.hにあるなんて落ちじゃないよな?
0172170
2006/06/14(水) 10:23:47ieDlg.hでクラス定義がされてるんだね
見てみたんだけどコンストラクタはそこで宣言されているけど
デストラクタは宣言も定義もされていないんだよね
0173デフォルトの名無しさん
2006/06/14(水) 10:36:03んじゃあれだ、宣言なしに関数を定義しようとしただろ。
クラス定義内にデストラクタの宣言は必要だよ。
#で、その程度のデストラクタだったらクラス定義内で定義してしまうのもあり。
0174172
2006/06/14(水) 10:41:36それだ!!
ieDlg.h内でコンストラクタのすぐ下に
~CIeDlg();
と書いたらうまくいきました
本当に、ありがとうございました!!!
0175デフォルトの名無しさん
2006/06/14(水) 11:04:00>デストラクタは宣言も定義もされていないんだよね
ぅおぃ!
0176172
2006/06/14(水) 13:06:57VC6でダイアログベースで作業してるんですが
AfxConnectionAdviseを使おうとしたら
そんなもん定義されてないといわれます
ヘルプみたのですがAfxConnectionAdviseのページには
どのヘッダをインクルードすればよいか記述されていませんでした
海外のMSDN見てみたのですが同じく書いてありませんでした
なんで〜〜
0177172
2006/06/14(水) 13:08:48遊んでるのがちょうどよいようです
失礼しました
0178デフォルトの名無しさん
2006/06/14(水) 14:05:19eclipseでjavaでもいじった方がいいと思う
0179172
2006/06/14(水) 16:10:15まで入力するとちゃんとヒントツールチップが出るんだけど
引数埋めてビルドすると
AfxConnectionAdvise は定義されていない識別子だと出る
Afx.*はMFCのグローバル関数だそうだけど
VC6じゃ使えないのだろうか?
AfxConnectionAdviseでぐぐってもそんなエラーに関する情報は見つからない
0180デフォルトの名無しさん
2006/06/14(水) 16:19:480181デフォルトの名無しさん
2006/06/14(水) 16:51:29普通のMFC Application(exe)じゃ使えないのかなぁ
0182デフォルトの名無しさん
2006/06/14(水) 16:56:240183デフォルトの名無しさん
2006/06/14(水) 17:05:54で探してみたら、afxctl.h に定義されてる。stdafx.h に
#include <afxctl.h> // MFC の ActiveX コントロール
がないなら入れとけ。
0185デフォルトの名無しさん
2006/06/14(水) 17:27:510186デフォルトの名無しさん
2006/06/14(水) 17:58:54新規にダイアログベースのMFCアプリケーションプロジェクト作成して、
ダイアログに適当なActiveXコントロールを、
ダイアログエディタ上でダイアログ上で右クリックして挿入してみたが、
StdAfx.hには#include <afxctl.h>は追加されなかったです
0187デフォルトの名無しさん
2006/06/15(木) 15:06:44CMainFrame のファイルでは HWND hWnd = m_hWnd; で取れたんだけど
他のファイルでは m_hWnd は"定義されていない識別子です"とかのコンパイルエラーに
なってしまうのはなぜ?
0188デフォルトの名無しさん
2006/06/15(木) 15:37:060189187
2006/06/15(木) 17:15:470190デフォルトの名無しさん
2006/06/15(木) 17:20:160191デフォルトの名無しさん
2006/06/15(木) 17:23:34C++のクラスが分かってないのか、MFCを調べる気がないのか知らんけど、
どっちか足りないと思う方を勉強してこい
0192デフォルトの名無しさん
2006/06/16(金) 01:46:41CMainFrameのヘッダファイルで宣言されているm_hWndを
別の、例えばCViewとかから使いたいなら
CView.cppでCMainFrameのヘッダファイルをインクルードして
m_hWndをextern宣言してやればいい、と思うけどどう?
0193デフォルトの名無しさん
2006/06/16(金) 08:30:42妄想するのは勝手だけど
0194デフォルトの名無しさん
2006/06/16(金) 09:26:29スコープが見えてこないからなんとも言えんが…
ヘッダをインクルードして
CMainFrameのポインタ取って来て
そっから適当に搾り出してきたらイイジャナイカ。
てかC++に対して基礎がよくわかってないようですが…
0195187
2006/06/16(金) 13:19:09お騒がせしました。
0196デフォルトの名無しさん
2006/06/18(日) 19:17:43メインスレッドで生成したダイアログのリストボックスにサブスレッドから
InsertStringすると実行時にDebug Assertion Errorが発生してしまいます。
メインスレッドで文字列挿入してみたら上手くいきました
どうすればいいのかさっぱりわかりません・・・どなたかご教授お願いします
環境:VisualStudio.NET2003 VC++ MFCアプリケーション
0197デフォルトの名無しさん
2006/06/18(日) 19:20:160198196
2006/06/18(日) 19:37:16((CMainDlg *)AfxGetMainWnd())->AddLog
これでサブスレッド、別クラスから下のAddlogを呼んでます。
void CMainDlg::AddLog( char* format, ... )
{
static char buf[512];
vsprintf( buf, format, (char *)(&format+1) );
lsLog.InsertString( -1, buf ); ←ここでDebugAssertionError
lsLog.SetCurSel( lsLog.GetCount() - 1 );
}
最近MFCいじり始めたばかりで、根本的何かが間違ってる気がするんですが、おねがいします
0199デフォルトの名無しさん
2006/06/18(日) 21:10:59こりゃないだろ。
0200デフォルトの名無しさん
2006/06/18(日) 21:35:13ツールバーのようにフォーカスを持たないですけど、
あのようなボタンってダイアログ内には置けないんでしょうか?
0201デフォルトの名無しさん
2006/06/18(日) 21:50:440202デフォルトの名無しさん
2006/06/19(月) 21:20:14やりとりのし方ってどうやるのでしょうか?
今はスレッドからListCtrlやEditCtrlに直接
SetItemやらSetWindowTextやらやっています。このやり方はマズイ?
0203デフォルトの名無しさん
2006/06/19(月) 21:32:40ヒント:排他処理
0204デフォルトの名無しさん
2006/06/19(月) 22:16:28ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_multithreading.3a_.programming_tips.asp
ここ、テストに出るからよく読んどくように。
0205デフォルトの名無しさん
2006/06/20(火) 05:41:38呼び出してexplorerみたいなカラムを追加しようとしました。
HELPにある CListView::GetListCtrl のサンプルコードを、まんまクラス名
だけ変えて実行してみましたが、見た目には何も追加されていません。
デバッガでみると、イベントから呼び出されて問題なく実行しているのですが、
見た目はカラムを追加してないのと同じ状態です。
実際にリストには何も追加していませんが、そのせいなのでしょうか?
0206デフォルトの名無しさん
2006/06/20(火) 09:42:380207デフォルトの名無しさん
2006/06/20(火) 09:51:10listviewをスプリットウィンドウに貼り付けてあるのですが、これがまずいのでしょうか?
0208デフォルトの名無しさん
2006/06/20(火) 09:53:420209デフォルトの名無しさん
2006/06/20(火) 10:42:33ドキュメント/ビュー アーキテクチャについての質問です。
ドキュメントクラスでSTLコンテナを使用していた場合、Serialize()で>>や<<を使ってのファイル入出力は可能でしょうか?
0210デフォルトの名無しさん
2006/06/20(火) 10:44:10cs.style |= LVS_LIST;
にしてます。
0211デフォルトの名無しさん
2006/06/20(火) 11:00:42cs.style |= LVS_REPORT にしたら表示されました!
HELPみても、説明がループしてたりリンク切れしてて、なんだかよくわかりませんね。
0212デフォルトの名無しさん
2006/06/21(水) 21:29:52mfc??.dllが必要です。
と表示されます。
MFCのライブラリがないパソコンで動かすには
どうしたらいいでしょうか?
0213デフォルトの名無しさん
2006/06/21(水) 21:35:440214デフォルトの名無しさん
2006/06/21(水) 21:54:280215デフォルトの名無しさん
2006/06/21(水) 22:41:350216デフォルトの名無しさん
2006/06/21(水) 23:57:280217デフォルトの名無しさん
2006/06/22(木) 15:56:57mfc71dll.lzhでユーザーに探させるか、DLLを同梱して配布する。
ベクターとかにあるはず。
ビルドするときスタティックリンクすることもできるけど、
naf???.libが無いみたいなエラーが出るときはプロフェッショナル版じゃない
環境だろうから、スタティックリンクは無理。
と、丁度調べてたので書いてみる。
0218212
2006/06/22(木) 16:15:35スタティックリンクのやり方を教えてください
0219デフォルトの名無しさん
2006/06/22(木) 16:19:321.調べない
2.読まない
3.試さない
4.理解力が足りない
5.人を利用することしか頭にない
0220sage
2006/06/23(金) 03:20:000221デフォルトの名無しさん
2006/06/23(金) 07:42:07役立たずの能なしは氏ね
0222デフォルトの名無しさん
2006/06/23(金) 09:17:05一番の役立たず乙
0223212
2006/06/25(日) 21:23:33すごく簡単でした。
0224デフォルトの名無しさん
2006/06/25(日) 22:57:09フライトプラン見ました
0225デフォルトの名無しさん
2006/06/28(水) 01:22:09仮面ライダーカブト第21話見ました
すごく簡単でした
0226デフォルトの名無しさん
2006/06/28(水) 20:49:56どうしてもVC++でプログラムを作らなければならなくなって
MFC7.1でシコシコランチャー程度のものを作ろうとしております
で
・TransparentをTrueにしてさらに上からビットマップ画像をかぶせているんですが表示が安定しない
他のウィンドウがかぶさると欠けたりボタンだけ残して消えたりする
・Borderをなしにするとダイアログが移動できない
というので困ってます。
なんとかヒント程度でも教えていただけたらとすがる思いです。
0227デフォルトの名無しさん
2006/06/29(木) 07:58:360228デフォルトの名無しさん
2006/06/29(木) 12:56:440229デフォルトの名無しさん
2006/07/04(火) 11:18:56最近MFCの本自体見ないんですが。
0230デフォルトの名無しさん
2006/07/04(火) 11:55:19MFCは過去の遺産になりつつある感じ。
0231デフォルトの名無しさん
2006/07/04(火) 12:03:140232デフォルトの名無しさん
2006/07/04(火) 14:53:16win32が使えれば使える
0233デフォルトの名無しさん
2006/07/04(火) 15:16:460234デフォルトの名無しさん
2006/07/04(火) 16:26:120235デフォルトの名無しさん
2006/07/04(火) 17:54:21>
> MFCを使うなら
> Visual C++(1)はじめてのWindowsプログラミング 翔泳社
> ↓
> Visual C++(2)はじめてのオブジェクト指向プログラミング 翔泳社
> ↓
> Visual C++(3)はじめてのMFCプログラミング 翔泳社
> ↓
> 標準講座MFC6.0 翔泳社
> ↓
> MFCによるWindowsプログラミング アスキー
> ↓
> プログラミング Microsoft Visual C++ .NET Vol.1 基礎編、Vol.2 活用編 日経BPソフトプレス
> (MFCによるWindowsプログラミングがあればVol.2だけでもよい)
> ↓
> MFCインターナル アジソンウェスレイパブリッシャーズジャパン
オイラ的には
・ 標準講座MFC6.0 翔泳社
・ プログラミング Microsoft Visual C++ .NET Vol.1 基礎編
・ ATL COMプログラミング
・ プログラミング Microsoft Visual C++ .NET Vol.2 活用編
「Microsoft Visual C++ .NET Vol.1」は「標準講座MFC6.0」があれば要らないかもしれないけど
Vol.2だけ買うのも気持ち悪いので一応リストアップしてます
0236デフォルトの名無しさん
2006/07/05(水) 00:04:53俺まだ、踏ん切りが付かない・・・
0237デフォルトの名無しさん
2006/07/05(水) 12:57:12コードを書いたんですが再描画が重いのです。
どこかでMFCに再描画を抑制制御する関数があると
読んだのですが今調べてもなかなか見つかりません。
0238デフォルトの名無しさん
2006/07/05(水) 12:57:470239質問です!
2006/07/05(水) 15:17:59オーナードローでドロップダウンのリストを描画させるところまでは
上手くいったのですが、ドロップダウンリストの表示項目数は
どの様に指定すれば良いのでしょうか?
オーナードローでなければ、IDE上でドロップダウンのハンドルをドラッグすれば
指定できるのですが・・・
0240デフォルトの名無しさん
2006/07/05(水) 16:33:23こういう格納のしかたをするにはどんな方法がありますでしょうか?
構造体の要素のなかにlistboxの項目を格納しておきたいのです
(しかも数が決まっていない)
typedef struct{
int No;
int Name;
CStringArray Item; ←こんな風にしたい
} LISTINFO, *PLISTINFO;
0241デフォルトの名無しさん
2006/07/05(水) 17:00:520242デフォルトの名無しさん
2006/07/05(水) 17:31:230243デフォルトの名無しさん
2006/07/06(木) 02:52:17afxcoll.hをインクルードしてない、
afxcoll.hをインクルードする前に#define _AFXDLL をしてない。
windows.hをインクルードしてしまっている。
こんなところか。
0244デフォルトの名無しさん
2006/07/06(木) 09:29:28exeファイルを他のPCに持っていくと
MFC7.1.dllがねーよとエラーがでるんですが
exeの中にこのdll入れるのってどうやるんですか?
0245デフォルトの名無しさん
2006/07/06(木) 09:46:50MFCの使用を「スタティックライブラリでMFCを使用する」
0246デフォルトの名無しさん
2006/07/06(木) 18:42:45アプリをVC++で作りたいのですが、DLLでWH_CALLWNDPROCをフック
してもDLLを呼んでいる画面のメッセージしか取れません。
何か良い方法は無いでしょうか?
0247デフォルトの名無しさん
2006/07/06(木) 18:57:530248デフォルトの名無しさん
2006/07/06(木) 19:09:38ありがとうございます。やっぱりMFCが原因なんですね・・・
Cオンリーで動作するソースを公開してる人が居たので、
DLL部分だけそのままでウィンドウ部分をMFCのSDIアプリに
移植してみたのですが動きませんでした。
できればMFC拡張DLLとして使いたかったのですが原因も判らないし、
素直にCで作るしかないのかな・・・
0249デフォルトの名無しさん
2006/07/06(木) 19:21:11MFCと関係ないということ
0250デフォルトの名無しさん
2006/07/06(木) 19:29:28動作したのでMFC絡みかと思ってたのですが・・・
もうちょっと調べてみます。ありがとうございました。
0251デフォルトの名無しさん
2006/07/06(木) 21:57:43何か変な処理をした覚えもないのに突然落ちることがある
特にファイルを開くダイアログを開いた後が確率高い気がする
とはいえ、開いていなくても落ちる時は落ちる
こういった現象への対処はどうすれば良いですか?
0252デフォルトの名無しさん
2006/07/06(木) 22:03:24覚えがないだけで変なことをしているに1票。
0253デフォルトの名無しさん
2006/07/06(木) 22:15:01何も付け足さずにビルドしてみる。
それで落ちなければ何か変なことをしている。
0254デフォルトの名無しさん
2006/07/06(木) 22:29:23多分、コレ
http://support.microsoft.com/default.aspx?scid=kb%3Bja%3B909486
AdobeReaderアンインスコするか、PdfShell.dll消すか
プログラムの最初に、CoInitializeすると、落ちなくなるそうな
0255デフォルトの名無しさん
2006/07/06(木) 22:34:14>またはダイアログ ボックス名前を付けて保存が Windows XP Service Pack 2
>ベースのコンピュータでボックスすると、プログラムが終了します。
凄い訳だな、わけ判らんw
0256239
2006/07/06(木) 22:36:480257デフォルトの名無しさん
2006/07/06(木) 23:23:33教えてください。よろしくおねがいします
0258デフォルトの名無しさん
2006/07/07(金) 00:05:400259デフォルトの名無しさん
2006/07/07(金) 01:27:390260257
2006/07/07(金) 08:40:57どのOLEを使えばいいのかがわかりません
>>259
まずメディアプレイヤーでもFLASHの再生ができませんでした
0261デフォルトの名無しさん
2006/07/07(金) 09:49:16動かす先の座標を取得してからInvalidateでウィンドごと再描画してるんですが
チラついてしかたないんですが
0262デフォルトの名無しさん
2006/07/07(金) 09:53:570263デフォルトの名無しさん
2006/07/07(金) 10:00:32WM_PAINTに正しく応答していれば、動かす先の座標なんか必要無いんだが。
0265デフォルトの名無しさん
2006/07/07(金) 11:23:080266質問です!!
2006/07/07(金) 11:34:13幾分、解りやすくなりましたかね・・・?
コンボボックスのドロップダウンリストの高さ(低くしたい)を、
コーディングで指定するにはどの様にすれば可能でしょうか?
(このコンボボックスはWM_DRAWITEMのメッセージハンドラ内でオーナードローしています)
MoveWindow()も試みましたが、効果ありませんでした。
0267デフォルトの名無しさん
2006/07/07(金) 11:52:270268デフォルトの名無しさん
2006/07/07(金) 12:39:410269258
2006/07/07(金) 12:52:33使ってみてはどうだろう?
0270デフォルトの名無しさん
2006/07/07(金) 12:58:02ダイアログエディタで高さ調整できたよ
リスト10件ぐらいで2つぐらいしか出ないようになった。
オーナードローじゃない場合と何も変わらない。
0271デフォルトの名無しさん
2006/07/07(金) 13:11:04MoveWindowでも高さ変わった。
0272266
2006/07/07(金) 13:24:03大変申し上げにくいのですが、
No Integral HeightのプロパティがFalseになってました
Trueにして解決です・・・
ほんと、ごめん(;_;)ゴメンナサイ
0273デフォルトの名無しさん
2006/07/08(土) 22:47:59あのMFCの質問をしたいのですが、
メインのアプリケーションウィンドウ(MyApp)がトップにある状態で、ほかのアプリケーションをトップ(アクティブ)にして、MyAppをバックグラウンドに移します。
その状態で、MyApp側であるDialogクラスをDoModalすると、モーダル表示にはならず、モードレス表示になります。
Spyで調べてみたら、親ウィンドウがNULLになっていましたので、
そのDialogクラスをインスタンス化するさいに、引数にWndクラスポインタを渡したのですが、どうもモードレス表示になります。
なぜ、モーダル表示にならないのでしょうか?
0274273
2006/07/08(土) 22:56:23は、親のメインウィンドウのポインタです。
0275デフォルトの名無しさん
2006/07/09(日) 00:10:10全く以って状況が伝わってこないな。
>メインのアプリケーションウィンドウ(MyApp)がトップにある状態で、ほかのアプリケーションをトップ(アクティブ)にして、MyAppをバックグラウンドに移します。
これはマウスでやったのか?それとも「メインのアプリケーション」とやらからやったのか?
そもそもメインのアプリケーションウィンドウっていうことはメインじゃないウィンドウもあるのか?
0276273
2006/07/09(日) 00:13:23MyAppがトップにある状態で、マウスクリックで他のアプリケーションをトップにします。
そうすると、MyAppが他のアプリケーションの後ろに隠れますよね。
その状態で、MyAppがあるDialogクラスをDoModalするとモーダル表示ではなくて、モードレス表示になるのです。
0277デフォルトの名無しさん
2006/07/09(日) 00:24:30MyAppが何か時間のかかる処理をしていて、その間に別のアプリを
フォアグラウンドにして操作していたらMyAppの処理完了通知
ダイアログか何かがModalにならないって事?
0278デフォルトの名無しさん
2006/07/09(日) 00:26:260279273
2006/07/09(日) 00:29:21まあそんなことです。
MyAppがバックグラウンドにある状態でDialogクラスをDoModalすると、モーダルじゃなくて、モードレスになってしまうのです。
これはなぜなのでしょうか?
0280デフォルトの名無しさん
2006/07/09(日) 00:29:39システムモーダルにして表示してる?
0281273
2006/07/09(日) 00:32:34いえ、特に意識して表示はしてません。
単に、CDialog::DoModalを呼び出しているだけです。
何か足りない処理があるのでしょうか?
0282280
2006/07/09(日) 00:56:43SetWindowPos(hDlg, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE);
0283273
2006/07/09(日) 10:02:40たしかに、そのやり方ですと、指定したウインドウを前面に持ってくることができますが、
問題点は、DoModalされたダイアログの”オーナーウィンドウ”と”親ウィンドウ”がNULLだということです。
通常モーダル表示されたダイアログはオーナーと親を持ちますが、
このオーナーと親がないためにモーダル化されないという問題なのです。
あと、お聞きしたいことがありまして、
Windows上にあるメインアプリケーションウィンドウのハンドル(またはウィンドウクラスポインタ)を取得する場合はどうすればよいのでしょうか?
0284デフォルトの名無しさん
2006/07/09(日) 12:45:480285デフォルトの名無しさん
2006/07/09(日) 13:04:310286273
2006/07/09(日) 15:04:17それを渡せばうまくいきました。
ありがとうございました。
0287デフォルトの名無しさん
2006/07/15(土) 23:37:11mfc7.1.dllってWindowsに最初からあるもんじゃないんですか?
0288デフォルトの名無しさん
2006/07/15(土) 23:40:28入ってるかどうか確認すればいい 入ってなきゃ拾ってくればいい
0289デフォルトの名無しさん
2006/07/15(土) 23:50:17ない。
代わりにmfc71.dllはアプリケーションと共に再配布できる。
0290287
2006/07/15(土) 23:54:57ちなみに、mfc7.1.dllはアプリケーションと同じフォルダに入れとけばいいんですよね?
0291デフォルトの名無しさん
2006/07/15(土) 23:58:34それでいい。
一応書いておくがmfc71.dllだぞ。
0292287
2006/07/16(日) 00:00:030293デフォルトの名無しさん
2006/07/16(日) 01:48:05ボタンの中に1つでもdisable状態のボタンがあるとサイズ変更ができません。
直前でGetToolBarCtrl().SetState(id,TBSTATE_ENABLED); しても駄目でした。
やる方法があれば教えてください。
ViewとかDocのOnUpdateXXXでCCmdUIに細工しろっていうのは無しでお願いします。
そもそも最初にOnUpdateXXXが呼ばれるより前に処理してるんですけどね...
0294293
2006/07/16(日) 14:19:440295デフォルトの名無しさん
2006/07/16(日) 14:49:360296251
2006/07/17(月) 00:43:00ありがとうございます。
リンク先の情報、とても参考になりました。
レス遅くなりまして申し訳ございませんでした。
0297デフォルトの名無しさん
2006/07/17(月) 19:00:26AfxBeginThread関数を使ったスレッドの作成が必要になったため
AfxBeginThread(RUNTIME_CLASS( CGraphThread )) 関数を使ってビルドしたところ
リンカエラーがでるようになりました。*CGraphThreadは自分でオーバーロードしたクラスです。
試しに
CRuntimeClass* prt = RUNTIME_CLASS( CGraphThread );
としてみたところやはり同じエラーだったのでRUNTIME_CLASSを使うときに何かlibが必要とされているような気がしています。
どのようにすると、よいのでしょうか?
ボスケテクダサイ。
<エラーの内容>
error LNK2001: 外部シンボル ""public: static struct CRuntimeClass * __stdcall CGraphThread::GetThisClass(void)"
(?GetThisClass@CGraphThread@@$$FSGPAUCRuntimeClass@@XZ)" は未解決です。
0298デフォルトの名無しさん
2006/07/17(月) 19:25:110299デフォルトの名無しさん
2006/07/17(月) 21:04:49>Only CObject-derived classes declared with DECLARE_DYNAMIC, DECLARE_DYNCREATE, or DECLARE_SERIAL will return pointers to a CRuntimeClass structure.
0300デフォルトの名無しさん
2006/07/17(月) 23:05:41ちょっと時間掛かりましたが、ようやく理解できました。
ご指摘のとおり、マクロ定義をやっていませんでした。このようにして使うことになってたのですね。
エスパー度の高い質問にも関わらず、的確な回答でした。
本当にありがとうございました。
0301デフォルトの名無しさん
2006/07/19(水) 01:50:41リソース?にある画像ファイルを表示する方法がわかりません。
プログラム作成手順は以下のような感じです。
1)アプリケーションウィザードから
"ダイアログベース" & "HTMLダイアログを使用する" をチェックしプロジェクトを作成
→CDHtmlDialog を継承したクラスが作成される
2)リソースビューからBitmapを作成
→bitmap1.bmpというファイルがプロジェクトに追加される。適当に描く。
3)デフォルトで作成されているhtmlファイルに
<img src="bitmap1.bmp"> と追加
4)コンパイルして実行。結果、表示されず。
その表示されてない画像のプロパティを右クリで調べてみたところ
res://c:〜\アプリ名.exe/bitmap1.bmp
のようになってました。
ちなみに3を <img src="http://〜どっかのWebの画像ファイル"> みたいに
やったらその画像はちゃんと表示されました。
CDHtmlDialog ぐぐっても満足する結果が出てこなかったので
何か根本的に間違っているのでしょうか?
以上よろしくお願いします。
0302デフォルトの名無しさん
2006/07/19(水) 10:51:19CDHtmlDialog クラス (MFC)ユーザー インターフェイスの実装にダイアログ リソースではなく
HTML を使用する ダイアログ ボックスの作成に使用します。
msdn2.microsoft.com/ja-jp/library/8bed8k60.aspx - 10k - キャッシュ - 関連ページ
[ 他、msdn2.microsoft.com内のページ ]
0303301
2006/07/19(水) 11:47:55回答ありがとうございます。
恐縮なのですが、よろしければもう少しヒントをお願いできないでしょうか?
ベースとなるHTMLファイルはリソースから読めているんですが(ボタンや文字などは表示される)
リンクする画像が読めていないという質問です。
・CDHtmlDialogで使うHTMLにおけるimgタグの書き方(画像リソースを特定できるようなsrc属性の書き方)
・画像リソースをCDHtmlDialogで使うHTMLから読めるようにバンドルする方法
のいずれかあるいは両方に問題があるのかと思いますが・・・
0304デフォルトの名無しさん
2006/07/19(水) 12:23:540305301
2006/07/19(水) 13:27:12サンプルは質問前に見たことあって
・サンプルのHTMLに <img src="folder.gif"> と書いてみた→表示される
(HTML右クリでの画像のプロパティをみたら確か res://c:〜\アプリ名.exe/folder.gif のようになっていた)
・自分のプロジェクトを>301の手順で作成し同じように <img src="bitmap1.bmp"> と書いてみた→表示されない
そこで
・>301の手順で作成されたプロジェクトとサンプルプロジェクトとの違いがサンプルのどこを読めばいいのかわからないのと
(サンプルプロジェクトの作成手順(リソース追加手順など)がわかればよいのですが)
・file: や http: では表示されるので>303のような問題がなにかあるのでは?
と思い>301と>303で質問させていだたいた次第です。
>>304
よろしければ>301と>303において問題点があればご指摘お願いできませんでしょうか?
へたれですみません。
0306デフォルトの名無しさん
2006/07/19(水) 13:31:520307デフォルトの名無しさん
2006/07/19(水) 14:30:040308301
2006/07/19(水) 14:34:48多分ものすごく根本的な問題(私がVCでのリソースバンドル手順に詳しくない)だと思います・・・
パス関連はサンプルと見比べて同じようになるようにしたつもりですが多分できてないのでしょうね。
だめならとりあえず自己解決するまで画像は外部に置き file: でやっておこうと思います。
皆さんどうもありがとうございました。
0309301
2006/07/19(水) 14:43:51あー確かにサンプルでは"2110"となっていたような気がします。
でも>301の手順で作成したリソースのフォルダ?は"Bitmap"という名前で作成され
"2110"ではなかったと思います。(参照先のパスはサンプルと同じような構成にはしました)
そこらへんに何か違いがあるのかもしれません。(どのような違いがあるのかわからないのが悲しい・・)
帰ったらもっとその辺いじってみたいと思います。
ありがとうございました。
0310301
2006/07/19(水) 22:18:35カスタムタイプを「2110」で新規作成し、プロパティの参照先を対象のbmpファイルにしたらうまくいきました。
なお、参照先をgifファイルにすると破壊される(BMP形式になってしまう)ので
ファイルを再度コピー&上書きしてくる必要があるようでした。
いろいろ試した結果、リソースを res: でアクセスできるようにするためには
リソースタイプが「2110」でなければならないみたいです。
(3000とか1000とか適当なものはだめでした)
あと、リソースビューからインポートするとうまくいかないようなので一応書いておきます(VS.NET 2003)
・bmpファイルはタイプが勝手に「Bitmap」になってしまう。
・gifファイルはタイプを指定するダイアログが出てくるが、2110と指定しても「2110」でなく「"2110"」となってしまう(+ファイル破壊)
どうもありがとうございました。
0311デフォルトの名無しさん
2006/07/20(木) 22:27:100312デフォルトの名無しさん
2006/07/20(木) 22:37:330313仕様書無しさん
2006/07/21(金) 09:35:41しない。
0314デフォルトの名無しさん
2006/07/22(土) 10:45:33これを起こらないようにするにはどうしたらよいでしょうか?
デストラクタにReleaseBufferとかおいてみたんですけど、やっぱりメモリリークは起きたままでした。
0315デフォルトの名無しさん
2006/07/22(土) 10:52:390316デフォルトの名無しさん
2006/07/22(土) 10:54:230317デフォルトの名無しさん
2006/07/22(土) 11:10:01プログラムを終了すると、
VCの出力ウィンドウに「メモリリークが起きました」的なメッセージが出てきます。
CStringを使わないようにするとこれが消えます。
使うとまた出てきます。
0318デフォルトの名無しさん
2006/07/22(土) 11:34:130319デフォルトの名無しさん
2006/07/22(土) 11:59:370320デフォルトの名無しさん
2006/07/22(土) 14:23:44ちなみに、自宅のはVC.NETで会社のはVC.NET2006でした。
もうちょっと調べてみます。
0321デフォルトの名無しさん
2006/07/22(土) 15:02:200322デフォルトの名無しさん
2006/07/22(土) 15:17:340323デフォルトの名無しさん
2006/07/23(日) 03:08:340324デフォルトの名無しさん
2006/07/23(日) 20:47:080325デフォルトの名無しさん
2006/07/24(月) 01:50:30MSDNで見たけどわからないのよ
0326325
2006/07/24(月) 01:57:12ビュー内のいらんとこ塗りつぶすわけね
0327デフォルトの名無しさん
2006/07/24(月) 07:42:19同じく知りたいです。CImageじゃなくても良いから。
DotNetだと数行で出来るのにMFCで出来ないのは悲しすぎる。
0328デフォルトの名無しさん
2006/07/24(月) 08:40:550329デフォルトの名無しさん
2006/07/24(月) 22:02:08原因がわかりました。
CStringが原因ではありませんでした。
CPtrArrayを使っていて、GetAtで取得したポインタをキャストせずにdeleteしていたため。
デストラクタでdeleteが呼ばれず。
メモリリークしてるというものでした。
お騒がせしてスミマセンでした。
0330デフォルトの名無しさん
2006/07/24(月) 22:09:41そうすると生成時にRGBA(32Bit)のビットマップを生成して、
1ピクセルずつ、RGBとαを描き込んでいくという方針でよろしいでしょうか?
0331仕様書無しさん
2006/07/25(火) 11:50:53Direct Xや、GDI+のAPIを使えば、いいんでは? ここいらへん(下の方)
のコードが参考になる?
ttp://park17.wakwak.com/~dragoon/gdiplus5.htm
>328
たぶん、特定の色をマスク色にして、それ以外の色の部分を透過率を指定
して背景イメージと合成させたいのでは?
既存の関数を組み合わせて、自分でそういう機能を実現する関数を作ら
ない限り、同時にはムリと思うな。全ピクセルで透過率が固定とか、左上
から右下方向で透過率変わるとか、要求を全部組み込んでも、さらに
新しい要求が生まれるだけだし。
0332デフォルトの名無しさん
2006/07/25(火) 12:06:170333デフォルトの名無しさん
2006/07/25(火) 17:05:067年以上前にVC++6で、作ったプログラムを開発し直す必要ができました。
それで、プログラムを実行しようとしたところ、
MSVCRTD.DLL(やMFC42D.DLLなど)が見つからなかったため、
このアプリケーションを開始できませんでした・・・
というメッセージが表示されました。
Visual Studio 2005は入っているのですが、
これらは利用できないのでしょうか?
このプログラムを最新環境で動作させるには、
VC++6を入手して、プログラムを書き換えるなどした方がいいでしょうか?
0334333
2006/07/25(火) 17:29:08実行時にユーザがグラフィカルエディタでプログラミングして、
それで生成したCソースをコンパイルしてdllを作り、
それを多数組み合わせて計算をするという
コンパイラが含まれているようなシミュレーションプログラムです。
こういうのは、最近のVC++では、どんな風に作るものでしょうか?
dllの代わりに.NETで同様のことをするべきでしょうか?
ちなみに私のこれまでの経験は、Java暦5年のみです。
0335デフォルトの名無しさん
2006/07/25(火) 17:34:13経験ゼロじゃ話にならんだろ
0336デフォルトの名無しさん
2006/07/25(火) 17:39:07リリースビルドしたやつは無いのか?
とりあえずは、どうにかしてデバッグ版のランタイムを入手すれば動くと思う。
0337333
2006/07/25(火) 18:08:27>>336
そうですね。一通りの理解と、動作環境が必要ですね。。。
とりあえず、開発環境のPC(VC++6等も有り)一式を貸してもらったので、
それで動かして理解してから、今後の修正方法を考えます。
UNIXでも動かしたいとかJavaだと遅いから駄目(?)とか言われてますが。
どうも、お騒がせしました。
0338デフォルトの名無しさん
2006/07/25(火) 20:21:40上FormView,下EditViewなんだけど
EditViewに表示される文字の色を変えたいんすけど
どうしたらいいんでそ。
ON_CTLCLRないし><
0339仕様書無しさん
2006/07/25(火) 20:48:51WM_CTL_COLORメッセージハンドラで、pDC->SetTextColor(RGB(255,0,0));
とかで可能だったような。行単位とか、一部の単語だけとか、部分的に
文字の色を変えたいならEditViewではムリぽ。
0340デフォルトの名無しさん
2006/07/25(火) 23:32:59VC MFC ダイアログベースアプリケーションで
IDC_LIST1 m_list
のリストコントロールの中にいくつかのCString文字例が入っていて
その中に AAA という項目が存在するか調べるにはどうすればいいでしょうか。
これじゃダメみたいですね。
if( -1> m_list.FindItem("AAA",-1))
{
MessageBox("","",MB_OK);
return;
}
0341デフォルトの名無しさん
2006/07/25(火) 23:54:59ダメじゃなにがダメなのか意味わからんだろ
0342デフォルトの名無しさん
2006/07/25(火) 23:57:19とりあえず方針としては1つ1つ要素を取得してAAAと比べればいいんじゃないだろうか?
0343デフォルトの名無しさん
2006/07/26(水) 07:46:01このif文は絶対FALSEになるんじゃないかな...
見つかれば 0以上、見つからなければ-1、-1より小さくなることはない。
0344デフォルトの名無しさん
2006/07/30(日) 17:52:23新規にプロジェクトを作成して、Dlgクラスのクラスウィザードにより
WindowProc()を追加しました。
キー入力イベントを取りたいので、WindowProc()のmessageがWM_KEYDOWNかどうかで
判定したいのですが、そのメッセージが通知されてこないようです。
WM_LBUTTONDOWNなら通知されるのですが、キー入力判定を行うためには
どのようにすればよいか、どなたかご教授願います。
0345デフォルトの名無しさん
2006/07/30(日) 18:09:060346デフォルトの名無しさん
2006/07/30(日) 18:57:17には、どうすればいいのでしょうか。
ちなみに、VC++のバージョンは.Netの2003です。
0347デフォルトの名無しさん
2006/07/30(日) 19:02:120348デフォルトの名無しさん
2006/07/30(日) 19:07:120349デフォルトの名無しさん
2006/07/30(日) 19:44:550350デフォルトの名無しさん
2006/07/30(日) 20:57:160351デフォルトの名無しさん
2006/07/31(月) 16:06:41どんなものでしょうか。
0352デフォルトの名無しさん
2006/07/31(月) 17:19:430353デフォルトの名無しさん
2006/07/31(月) 19:10:290354デフォルトの名無しさん
2006/07/31(月) 21:01:210355デフォルトの名無しさん
2006/07/31(月) 21:59:14スレッドセーフってなんですか?
0356デフォルトの名無しさん
2006/07/31(月) 23:30:19選択できる項目が左のコラムだけに限られてしまいます。
横一行が綺麗に選択できるようになる設定を教えてください。
よろしくお願いします
0357デフォルトの名無しさん
2006/07/31(月) 23:56:47ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_multithreading.3a_.programming_tips.asp
>For size and performance reasons, MFC objects are not thread-safe at the object level, only at the class level.
0358デフォルトの名無しさん
2006/08/01(火) 00:04:47m_ThreadSafe = TRUE;
とかで速度を捨ててスレッドセーフオブジェクトに変身して欲しい。
Mutexとか面倒臭い。
0359デフォルトの名無しさん
2006/08/01(火) 00:19:23何をもってスレッドセーフなの?
PCが落ち無きゃいいなら別にやりようがあるだろうけど、
アプリの整合性まで責任とってくれるようなしろもんじゃないならいらねぇじゃん。
どうせ自分でやらなきゃならねぇことはカワラネェし。
だいたいCStringがもつもんじゃねぇだろw
センス0だなw
0360デフォルトの名無しさん
2006/08/01(火) 01:29:22357でも読んどけwww
0361354
2006/08/01(火) 01:58:25ちなみに、インスタンスが別々でも複数のスレッドで、
CString a = "aaa";
+++++++++++++++++++++++
CString b = "bbb";
とかやろうとしたら、排他しないとまずいんですかね?
なんかグローバルで共有されてるところへアクセスしてそうなんで…。
MFC objects are not thread-safe at the object level, only at the class level.
これがちと理解できません。英語苦手で済みません。
0362デフォルトの名無しさん
2006/08/01(火) 02:32:42mfcの使い方をある程度覚えたつもりなんだが
いまいちソフトウェアの作り方が把握できてない
将来自作ソフトウェアでも公開したいと思ってる俺に
いい教本を教えてたもれ
0363デフォルトの名無しさん
2006/08/01(火) 06:09:50これなら判ると思った本を買って実際にビルドしてみるといい。
(CD付きかサイトでソース公開してる本にしとけよ)
0364デフォルトの名無しさん
2006/08/01(火) 06:14:48俺CStringのメンバ持ってるクラスでマルチスレッド作ったけど
問題なく動いてたぞ、まずかったのかコレ・・・
0365デフォルトの名無しさん
2006/08/01(火) 10:32:29> This means that you can have two separate threads manipulating two different CString objects,
> but not two threads manipulating the same CString object.
同一オブジェクトに対しては排他しないとダメ。
0366354
2006/08/01(火) 10:37:52どうも。
それならちと楽になるっす。
>For size
ってあったから、
CString a = "zzz";
CString b = "zzz";
とかやると別のインスタンスでも共通のものをさして
サイズを節約とかしてるのか勝手に思い込んでました。
0367デフォルトの名無しさん
2006/08/02(水) 19:37:03を処理したいのですが、イベントを取得する方法はあるのでしょうか?
0368デフォルトの名無しさん
2006/08/03(木) 23:17:130369デフォルトの名無しさん
2006/08/04(金) 02:58:410370デフォルトの名無しさん
2006/08/04(金) 20:48:48CRectTrackerの場合はマウスを放した後に、
Trackを抜けてくることがわかりましたw
ので、WM_LBUTTONUPを取る必要はなくなりましたw
お騒がせしました。
後、フックでもやってみて、ちゃんとできることを確認しました。
ありがとうございました。
0371デフォルトの名無しさん
2006/08/09(水) 18:27:02他のグループボックスの下に隠れちゃうんです。
上にするにはどうしたら良いですか?
0372デフォルトの名無しさん
2006/08/09(水) 18:50:38タブ順序を逆にする。
0373デフォルトの名無しさん
2006/08/10(木) 00:24:29resource.hを見ると
#define IDC_BUTTON1 1234
#define IDC_STATIC5 1234
#define IDC_RADIO8 1234
みたいな感じでIDの値が重複しているものが結構あります。
またこれらはリソースシンボルで見ると全部「使用中」にチェックが点いています。
それぞれ別のダイアログクラス(タブ)で使用しているのですが
こういう場合だと問題ないのでしょうか?
一応問題なく動作はするのですが。
0374デフォルトの名無しさん
2006/08/10(木) 06:52:150375デフォルトの名無しさん
2006/08/10(木) 07:12:51少ないとなんかいいことあるのか?
0376デフォルトの名無しさん
2006/08/10(木) 07:19:40環境によ(ry
0377デフォルトの名無しさん
2006/08/10(木) 09:13:480378デフォルトの名無しさん
2006/08/10(木) 09:48:52同じ親を持つ子ウィンドウのIDが重複していなければ問題ない
0379デフォルトの名無しさん
2006/08/10(木) 23:00:45オマエにゃ使えないってことだよ
0380デフォルトの名無しさん
2006/08/10(木) 23:11:30昔、タブコンのページがそれぞれ似たような内容で重複前提で
リソースのIDを統一して組んだら偉い目にあったw
0381デフォルトの名無しさん
2006/08/11(金) 14:05:11というか、Winではウィンドウハンドルだし、リソースファイル編集にリソースIDが炒るだけだよね。
0382デフォルトの名無しさん
2006/08/12(土) 01:44:330383デフォルトの名無しさん
2006/08/12(土) 06:02:00ヒント:GetDlgItem()はCDialogごとに使う。
0384デフォルトの名無しさん
2006/08/12(土) 20:34:08ひとつうまくいかないのでお伺いします.
チェックボックスをチェックしたときに特定の動作を埋め込みたいのですが,
そのクリックメッセージが取れません.
クリックやダブルクリックのメッセージを拾ってきても,チェックボックスをクリックしたときはメッセージが投げられていませんでした...
どうすればいいのでしょうか?
0385デフォルトの名無しさん
2006/08/12(土) 21:05:20MDI子Viewからアクセスしたいのですが
コードの実装方法で悩んでいます。
1、毎回(CMainFrame*)AfxGetMainWnd()する
2、m_wndStatusBarのポインタを保持するメンバを追加する
3、m_wndStatusBarのHWNDを保持するメンバを追加する
結構頻繁に呼び出すのですが、、
上記以外の方法でエレガントな手法は無いですか?
0386デフォルトの名無しさん
2006/08/12(土) 21:06:56はともかく、WindowsXP SP2/VS2005だと、NM_CLICKはハンドルできてるな。
0387デフォルトの名無しさん
2006/08/12(土) 21:52:30検証はしてないけど、こんなのあったよ。
http://support.microsoft.com/default.aspx?scid=KB;EN-US;q261289&
0389デフォルトの名無しさん
2006/08/13(日) 01:08:38凄まじい頻度で特定ペインのテキスト変更するだけなら、表示しないダミーのメニュー
作ってCMainFrameのstatic UINT indicators[] ={...}の適当なとこに割り当てて
void CHogeView::OnUpdateHoge(CCmdUI *pCmdUI)
{
pCmdUI->Enable();
pCmdUI->SetText( private_string );
}
という手もある。m_wndStatusBarをぐりぐり弄るなら、ぐりぐり用関数作って
その内部で1かなー
0390389
2006/08/13(日) 01:11:440391デフォルトの名無しさん
2006/08/13(日) 01:35:500392デフォルトの名無しさん
2006/08/13(日) 03:59:41お聞きしたいです。よろしくお願いします。
MFCDLL内でメインスレッドからスレッドAを作り、
そのスレッドA内でダイアログボックスに貼り付けた
OCXを使用したいのですが上手く動作しません。
OLEのイベントをスレッドAで受け取りたい(実行したい)のですが
OLEの初期化(OleInitialize)をDLL使用者であるメインスレッド上で行ってしまうと
OLEのイベントがメインスレッド上で行われてしまいます。
どうやらOleInitialize() を呼び出した最初のスレッドが、
シングルスレッドのインプロセスコンポーネントのオブジェクトへの
すべての呼び出しを処理するクライアントスレッドになってしまうらしいです。(↓参照)
http://www.microsoft.com/japan/developer/library/VBCon98/vbcondesigningthreadsafedlls.htm
そこでOLEの初期化をスレッドA上で実行したのですが
そうすると今度はメインスレッドからOLEにアクセスできなくなってしまいました。
どうすればスレッドAのイベントをスレッドA上で実行させつつ
かつメインスレッドからスレッドAにアクセスすることができますか?
よろしくお願いします。
0393デフォルトの名無しさん
2006/08/13(日) 04:08:090394デフォルトの名無しさん
2006/08/13(日) 07:39:02俺にはとても書けないくらいすごいライブラリだよ
0395デフォルトの名無しさん
2006/08/13(日) 07:56:070396デフォルトの名無しさん
2006/08/13(日) 08:16:110397デフォルトの名無しさん
2006/08/13(日) 10:15:160398デフォルトの名無しさん
2006/08/13(日) 11:04:47日本語でおk
0399デフォルトの名無しさん
2006/08/13(日) 19:09:47見てみて感想は?
0400デフォルトの名無しさん
2006/08/13(日) 19:25:390401デフォルトの名無しさん
2006/08/13(日) 20:32:36ちょっとしたプログラムを作っているのですが、WMV 形式のファイルを
再生させた時に何故か例外が発生します。
その例外は、
wmvcore.dll 0xc0000005 access violation
です。
この例外を無視して良いのか否かで悩んでおります。
無視しても大丈夫なのでしょうか?
0402デフォルトの名無しさん
2006/08/13(日) 20:40:59コード自体はまあ普通。ハンガリアンの好き嫌いはあるだろうけど。
設計は、昔のコンパイラ事情や実行環境でああなったんだろうな。よく知らんけど。
まあここまでよく頑張ったと思うよ。
0403デフォルトの名無しさん
2006/08/13(日) 21:39:04無視していい例外なんてない。
たぶん不正なメモリ書き込みでもしてるんだろ。
ちゃんとデバッグしろ
0404デフォルトの名無しさん
2006/08/14(月) 00:07:43#普通、ここまでなる前に実装あきらめるだろ、ってのも付け加えとく
0405デフォルトの名無しさん
2006/08/14(月) 00:15:37レス、ありがとうございます。
例外対応したいのですが、
困ったことに wmvcore.dll の中で
例外が発生している感じなのですよ
なので MS の責任にしてしまえないかなぁと
例外処理って結構大変ですからね
0406デフォルトの名無しさん
2006/08/14(月) 00:21:06そうなるのはまず間違いなく、大抵自分のプログラムに何らかのバグがあるから。
MSのバグなら、Web上を探せば似たような事例が見つかったり、MSのサポート技術情報に載っていたりする。
0407デフォルトの名無しさん
2006/08/14(月) 00:30:51VirtualAllocを使ってページを予約、
アクセス違反をハンドリングして実際に確保、
という実装があるから、それに反応してるだけじゃね?
0408デフォルトの名無しさん
2006/08/14(月) 00:45:17赤いアイコンのついた警告画面ってよく出てくるじゃん。
(ダイアログベースのアプリを作って貼りつけると大抵動かない。)
あれって原因ってどうやって探すの?
0409デフォルトの名無しさん
2006/08/14(月) 00:52:25こんな情報が見つかったけど、どう?
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=576307&SiteID=7
0410デフォルトの名無しさん
2006/08/14(月) 01:06:540411デフォルトの名無しさん
2006/08/14(月) 10:39:400412デフォルトの名無しさん
2006/08/14(月) 16:48:29開発環境が猫ではVC++5.0 俺は.NETなんだけど、
猫のサンプルを作っても、コンパイルしても実行できません
この場合環境を合わせるべきでしょうか?
また、MFCの参考になる本、サイトとかあったら教えてください。
0413デフォルトの名無しさん
2006/08/14(月) 17:52:03VC++2005EEを使っているなら、該当スレを読んでみよう。
MFC自体はVC++5時代からそれほど大きく変わってはいないと思う。
#但し、CStringは大きく変わっているしMFCに直接関係ないところで
#色々違いはあるかもしれないが。
0414デフォルトの名無しさん
2006/08/14(月) 19:14:56本だけど。
0415デフォルトの名無しさん
2006/08/15(火) 09:42:53メッセージハンドラをつけるにはどうしたらいいですか?
0416デフォルトの名無しさん
2006/08/15(火) 11:49:23プロパティページでメッセージを選択、追加。
0417デフォルトの名無しさん
2006/08/15(火) 19:34:07できました!感動です。ありがとうございます!
0418デフォルトの名無しさん
2006/08/15(火) 23:40:46ウィンドウを作ってしまったのですが、
タブキーのフォーカスの移動ってウィンドウ間をまたぐことはできないでしょうか?
0419デフォルトの名無しさん
2006/08/16(水) 00:23:050420デフォルトの名無しさん
2006/08/16(水) 00:28:06PreTranslateMessageで頑張るということでしょうか?
0421デフォルトの名無しさん
2006/08/17(木) 22:01:18とりあえず、ダイアログの上にダイアログをのせて
上にのっけたダイアログにWS_TABSTOPを入れるとタブフォーカスが
一応は移るのですが、一度上のダイアログにタブのフォーカスが移ると
Shift+Tabを押しても下のダイアログへタブが戻りません。
この辺スマートに組む方法はないでしょうか?
それともPreTranslateMessageを拾って地道に組むしかないのでしょうか?
0422デフォルトの名無しさん
2006/08/17(木) 23:04:05ダイアログの上にダイアログをのせてってどういう状態?
0423デフォルトの名無しさん
2006/08/17(木) 23:09:59任意のフォーカスをセットするにはどうすればよいのでしょうか?
SetFocusでは無理でした
0424デフォルトの名無しさん
2006/08/17(木) 23:20:12タブコントロールにダイアログをのせるみたいなのをイメージしてもらうとそれに近いです。
それと同じようにダイアログの上にダイアログをのせるということをやっています。
0425デフォルトの名無しさん
2006/08/17(木) 23:39:53のせるほうのダイアログ(子ダイアログ)のスタイルに
DS_CONTROLを追加すればできるよ。
(ダイアログエディタ上なら「コントロール」のチェックボックスにチェックを入れる)
0426デフォルトの名無しさん
2006/08/17(木) 23:45:24>のせるほうのダイアログ(子ダイアログ)のスタイルにDS_CONTROLを追加すればできるよ。
おお!そんな設定が!
ありがとうございます。
明日になりますがやってみます。
また、やってみたら結果報告にきます。
0427デフォルトの名無しさん
2006/08/18(金) 03:51:41新しく描画する部分だけ処理して
残りの、既に表示してあった部分は単にずらす
という事をするにはどう実装すればよいですか?
0428デフォルトの名無しさん
2006/08/18(金) 07:47:29>新しく描画する部分だけ
つ CDC::GetClipBox()
>残りの、既に表示してあった部分は単にずらす
つ CWnd::ScrollWindow()
CScrollViewつかってれば勝手にスクロールするかも
0429デフォルトの名無しさん
2006/08/18(金) 15:43:370430デフォルトの名無しさん
2006/08/18(金) 16:42:08座標ずらして書くのしか知らない
0431デフォルトの名無しさん
2006/08/18(金) 19:32:15以下の流れで。
フォントを作って選択
BeginPath()
TextOut()
EndPath()
縁取り用のペン(&塗りつぶし用のブラシ)を作って選択
StrokePath()/StrokeAndFillPath()
後始末
0432デフォルトの名無しさん
2006/08/18(金) 19:43:40結果報告です。
結果は、なんと、できました。
具体的にはリソースエディタの「Control」と「Control Parent」とかいう設定を「true」にすることで
親から子へ、子から親へタブフォーカスが遷移するようになりました。ありがとうございます。
あ、もちろんダイアログにもその他のコントロールにもWS_TABSTOPのスタイルを付けます。
これでタブフェチのお客さんも満足なはずです。
あ、途中、タブコントロールの上に貼ったリストコントロールがなぜか再描画されないと
いう現象に悩まされましたが、ダイアログを1つはさんでその上にリストコントロールを貼りつけて
リストの下敷きのダイアログにフォーカスが移ったときにInvalidateを実行することで描画されるようになりました。
これにもControlとControl ParentとWS_TABSTOPをつけるとタブフォーカスがちゃんと遷移してくれるようになりました。
ありがとうございました。
0433デフォルトの名無しさん
2006/08/19(土) 12:16:11シングルウィンドウのアプリをVisualstudio.net2003でつくっているのですが,チェックをうまくきかすことができません.
GetMenu()->CheckMenuItem( ID_XXXX, MF_BYCOMMAND|MF_CHECKED );
いまこういう感じで実装しています.
実装場所はメニューの該当ボタンが押されたときです.
ID_XXXXはVisualStudioで自動に割り振られたIDです.
(メニューエディタでメニューをクリック後プロパティにてIDの項目で表示されるやつ)
どうすればうまくチェックをつけることができるのでしょうか?
どなたかお願いします.
0434433
2006/08/19(土) 13:16:08関係ないかもしれませんが追記です.
シングルドキュメントアプリケーションでプロジェクトを作成しており,
また,プログラムはマネージ拡張されています.
0435デフォルトの名無しさん
2006/08/19(土) 13:55:23メニューにチェックを入れたり、有効・無効を切り替えの処理は、
通常UPDATE_COMMAND_UIハンドラで行う。
追加方法は、コマンドの時とほぼ同じなので省略。
ツールバーのボタンも同じハンドラで処理されて激しく(゚д゚)ウマー
0436デフォルトの名無しさん
2006/08/19(土) 14:23:56イベントハンドラ生成にもうひとつ選択肢があるとは...
見落としていました,ありがとうございます.
0437デフォルトの名無しさん
2006/08/20(日) 13:05:58任意のフォーカスをセットするにはどうすればよいのでしょうか?
SetFocusでは無理でした
0438デフォルトの名無しさん
2006/08/20(日) 15:02:49普通にできたよ。
タブストップが設定されてないんじゃない?
0439デフォルトの名無しさん
2006/08/20(日) 15:04:06でも
CWnd* cw = GetDlgItem(ID_SCROLL4);
cw->SetFocus();
でフォーカスが設定できることを確認した。
通常ダイアログを表示したあとにEnterを押すとすぐに閉じる(OKボタン)のに、
以下のような手順でウィンドウを作成・表示すると、Enterを押しても閉じなくなります。
VC++ 2005 MFC WinXP
- メインのアプリから、DLLの関数を呼ぶ
- DLL内で、CDialog::Create を用いてウィンドウを生成し、ShowWindow で表示
原因が分からないので、試しに
- アプリで作成 -> DLLで表示
- DLLで作成 -> アプリで表示
(HWND を受け渡し)
とやってみましたが、前者は正常で、後者はだめでした。
理由が分かる方いらっしゃいませんでしょうか?
0441デフォルトの名無しさん
2006/08/20(日) 23:53:040442デフォルトの名無しさん
2006/08/21(月) 19:45:26リサイズ可能なダイアログを作成しています
このとき、表示をちらつかせないために親ダイアログのClip Childrenをtrueに設定しました
ダイアログの中には、ボタンを押すと色が変更されるPicture Controlを配置しています
ところが、Clip ChildrenがtrueになっているためにPicture Controlの描画が行われません
リサイズ時のちらつき防止とPicture Controlの再描画を両立させる方法はありませんか?
0443デフォルトの名無しさん
2006/08/22(火) 01:48:460444デフォルトの名無しさん
2006/08/23(水) 02:06:41CDialogにCButtonが一つ付いてるとします。
そこでCDialogをDoModalした状態でWM_KEYDOWNイベントを取得したいと思い、
自動生成でOnKeyDownを作りました、
さて、KeyDownイベントが取れてるかな?と思ったら取れてません。
どうしてだろ?と思ってSpy+でみてみたら
KeyDownイベントがCButtonのほうへ行っています。
なぜなのでしょうか?
0445デフォルトの名無しさん
2006/08/23(水) 06:12:19日本語めちゃくちゃじゃね?
「そこで」「付いてるとします」「さて」「なぜなのでしょうか?」
の使いどころ微妙じゃね?w
まあ、概要はわかるけどw
>なぜなのでしょうか?
そりゃ「CDialog作った人がそう作ったから」だろ
0446仕様書無しさん
2006/08/23(水) 08:05:31だって、ボタンにフォーカスがあるだろ?
0447デフォルトの名無しさん
2006/08/23(水) 08:12:02>そりゃ「CDialog作った人がそう作ったから」だろ
「Win32APIを作った人がそう作ったから」のほうが正確じゃね?
まぁ、それをそのままCDialogに反映させたんだろうけど
0448444
2006/08/23(水) 08:49:19ありがとうございました
0449デフォルトの名無しさん
2006/08/23(水) 09:59:52ダイアログの PreTranslateMessage() で、ボタンへ送る前に横取りすりゃいいんじゃね?
0450デフォルトの名無しさん
2006/08/25(金) 15:43:35WinMEや98SEにも対応すると考えるのは甘いですか?
0451デフォルトの名無しさん
2006/08/25(金) 15:49:51バージョン定義のマクロも大事。
_WIN32_NTを0に定義して、WINVERを適切な値にして、
必要に応じて、WIN32_WINDOWSとWIN32_IEを定義してやる。
これで最低限。
動作確認はしていないけど動くと思うよと言える程度にはなると思う。
0452デフォルトの名無しさん
2006/08/25(金) 16:23:30450です。ありがとう。
0453デフォルトの名無しさん
2006/08/25(金) 17:01:22文字フチドリが出来るコントロールは無いでしょうか?
0454デフォルトの名無しさん
2006/08/26(土) 23:56:180455デフォルトの名無しさん
2006/08/27(日) 00:19:53CDC::GetGlyphOutline
後はなんとかしてみせろ
0456デフォルトの名無しさん
2006/08/27(日) 17:44:59CFileDialogを1回domodal→いくつか処理し→別の関数でC〜Dialogをコンストラクトすると、
コンストラクタの始まり部分「{」でハンドルされてない例外となる。
余分なdomodalを追加して、
CFileDialogを1回domodal→直後に同じdomodal→いくつか処理し→別の関数でC〜Dialogをコンストラクトすると、
問題は発生しない。
原因やらヒントあったらください。
あと、releaseモードでデバッグすると、いろんな部分でポインタの値とかウォッチするとずれているんですが、
そういうものですか?
ウォッチではずれていても、処理自体にはこのずれは反映されてなく、正常に処理されます。
例えば、strの値が、000000006869とかでても、strcpy_sとかでは、ちゃんと6869からコピーされている。
0457デフォルトの名無しさん
2006/08/27(日) 17:46:05環境は、VC++2005です。
0458デフォルトの名無しさん
2006/08/27(日) 17:54:17デバッグモードとリリースモードの違いはやっぱり初期値じゃね?
デバッグだと配列にcdcdcdcd・・・って入ってるけどリリースだと
完全にめちゃくちゃな値(0かもしれんし別の何かかもしれんし)が入ってる。
その違いなので初期化忘れを念入りに調べるしかないんじゃないの?
それとCFileDialogってところでカレントディレクトリをチェンジされて
ファイルパスの処理がおかしくなってるとかない?
まあ、俺はあんまりそういう場面に遭遇したことないので適当に答えてみたけど。
0459デフォルトの名無しさん
2006/08/27(日) 23:03:56レスありがとう。
いろいろやってみたけど初期値でもカレントディレクトリ関連でもないようだった。
バグだろうか。
CFileDialogがデストラクトされた後、C〜Dialogのコンストラクト時に悪さをしている感じだった。
結局、C〜Dialogを親ウインドウクラスの要素にして、CFileDialogより先にコンストラクトしてそのまま保持にして、
エラーを回避した。
0460仕様書無しさん
2006/08/28(月) 15:19:31単にバグが出るタイミングが移動しただけのような気がする。
0461デフォルトの名無しさん
2006/08/28(月) 16:11:010462デフォルトの名無しさん
2006/08/28(月) 17:25:07ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_Multithreading.3a_.Creating_User.2d.Interface_Threads.asp
0463デフォルトの名無しさん
2006/08/28(月) 17:26:58PropertySheetを独自実装する場合や、ToolBarに独自のウィンドウを貼り付けたり
する場合、テーマがグラデーションだと、貼り付けられたウィンドウが単一色なので、
見栄えが悪くなります。
WS_EX_TRANSPARENT を適用したり、WM_ERASEBKGND を拾ったり、
OnCtlColor を引っ張ってきたり、思いつく限りやってみたのですが、
どうも上手くいきません。
これは、一般にどういう方法で、単一色になるのを避けているのでしょうか。
0465デフォルトの名無しさん
2006/08/29(火) 01:02:21ただし、一般的な方法かどうかは判らん。
全く問題なく動作しました。大変助かりました。
しかしツールバーのほうは、タブではないので、同じ関数を叩いてもダメでした。
もしも何かご存じでしたらお教え下さい。
0468デフォルトの名無しさん
2006/08/29(火) 12:14:19ファイル選択ダイアログで落ちるのは固有のバグだったみたいです。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=26276&forum=7
0469デフォルトの名無しさん
2006/08/29(火) 12:29:40「Rebar コントロールでのダイアログ バーの使い方」に
親ウィンドウにWM_ERASEBKGNDを送って
透明にする方法があったんだが、参考にならないか?
0470デフォルトの名無しさん
2006/08/30(水) 17:08:33インクルードファイルの読込み時、ファイルがありませんのようなエラーがでます。
以下のエラーです。
⇒ fatal error C1083
フォルダ構成は整っているはずなのですが、、
0471デフォルトの名無しさん
2006/08/30(水) 17:20:450472デフォルトの名無しさん
2006/08/30(水) 17:53:22470です。
読み込めないのは、自作のヘッダファイルです。
stdafx.hに以下のファイルをインクルードしました。
#include "aa.h"
のような感じで定義しています。
0473デフォルトの名無しさん
2006/08/30(水) 21:53:390474デフォルトの名無しさん
2006/08/31(木) 21:26:33代入される前の状態を保っている保証はあるのでしょうか?
0475デフォルトの名無しさん
2006/08/31(木) 22:14:02いいたいところだが
新しい文字列確保->現在保持しているのを解放->新しいのをアタッチ
の順なので、保証はされている。
0476デフォルトの名無しさん
2006/08/31(木) 22:42:27それより先にウィンドウズの赤いマークの警告画面のが先にでそうだw
0477デフォルトの名無しさん
2006/09/01(金) 17:41:39ないでしょうか
CDocument::UpdateAllViewはvirtual宣言されてないし…
0478デフォルトの名無しさん
2006/09/01(金) 19:35:000479デフォルトの名無しさん
2006/09/01(金) 22:49:250480仕様書無しさん
2006/09/02(土) 01:37:28CString派生クラスとか、メッセージループや独自のワーカスレッドを
持たないクラスなら、通知もないと思うが?
というか、ドキュメントやビューのメンバ変数として、データメンバを
定義して、CView::OnUpdate()内で、メンバ変数のメソッドを呼び出せば
済む様な気がする。
0481デフォルトの名無しさん
2006/09/02(土) 12:13:39MFC にその為のクラスって存在しますか?
0482デフォルトの名無しさん
2006/09/02(土) 13:40:54comポートを開いて、適当にパラメータをセットして、適宜読むなり書くなりして、閉じるだけだから
APIを呼ぶだけで充分。
0483デフォルトの名無しさん
2006/09/03(日) 08:55:04今後はMFCもSTLもDotNetも使わないでね。
あなたにはAPIだけで充分です。
0484デフォルトの名無しさん
2006/09/03(日) 10:04:500485デフォルトの名無しさん
2006/09/03(日) 10:12:39あなたは、ちょっとしたファイル入出力を行なう関数も自作できないのですか?
MFCやSTLやFrameworkを使ってもそれらは作ってもらえるわけではありませんよ。
0486481
2006/09/03(日) 19:27:36とりあえず、APIを使えばOKってことですね?
0487デフォルトの名無しさん
2006/09/03(日) 19:32:25その理由は>>482
0488・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6
2006/09/04(月) 00:53:260489デフォルトの名無しさん
2006/09/04(月) 15:12:09コンパイラはエラーをださないのでコンパイルできたのですが
強制的に終了させられてしまいます
やりたいことはダイアログベースで自作クラスから
SetWindowTextを使いたいということです
ダイアログのクラスにSetWindowTextを使う関数を自分で作って
それを外のクラスから呼び出しましたが呼び出すときになんらかのエラーが
起きているようです
私は自作クラスからMFCのクラスの関数を呼び出す方法がわかりません
初歩的なことだと思いますがどうかアドバイスお願いします
0490デフォルトの名無しさん
2006/09/04(月) 15:20:43はて?
SetWindowTextメソッドはpublicだから、ふつうに外から呼べるんじゃ・・・
0491489
2006/09/04(月) 15:31:58ですよね?だからコンパイラはエラーを出さないんです
いろいろ試しましたが多分私の記述の仕方に問題があるのかと思われます
外部からSetWindowTextを使う場合はどう記述すればよろしいのでしょうか?
C○○○Dlg::m_ed1.SetWindowText("1");
のような書き方だと失敗したと思います
C○○○Dlgクラスを生成してみてから呼び出しても無理でした
0492489
2006/09/04(月) 15:42:34{
CString AA="1";
m_ed1.SetWindowText(AA);
}
C○○○Dlgにこの関数を作り外のクラスからhyouji()を呼び出しても
エラーがでて強制終了になります
外からエディットボックスの操作は無理なのでしょうか
ちなみにm_ed1はエディットボックスのコントロール変数です
0493デフォルトの名無しさん
2006/09/04(月) 15:50:54自作クラスに、C○○○Dlgのインスタンスを渡して、そっからメソッド呼べ
0494デフォルトの名無しさん
2006/09/04(月) 16:19:22何を目的としたクラスなんだろう?
0495デフォルトの名無しさん
2006/09/04(月) 16:31:140496デフォルトの名無しさん
2006/09/04(月) 16:36:190497デフォルトの名無しさん
2006/09/04(月) 16:37:080499デフォルトの名無しさん
2006/09/04(月) 17:41:240500デフォルトの名無しさん
2006/09/04(月) 18:21:41質問ですが
クラスにメッセージハンドラーを追加する場合、
クラスビューで該当クラスを選択してプロパティからメッセージを選択して
対応メッセージを選択してコンボボックスから選ぶやり方をしていますが、
これ以外に方法ありますか?
一つハンドラー関数を作るたびに、関数にフォーカスが移ってしまって必要なハンドラー関数
を一気に生成するのが非常に面倒くさいです。
またコントロール変数を生成するのもテンポ悪すぎるんですが・・・・
VS6のクラスウィザードみたいなのはなくなってしまったのでしょうか?
0501493
2006/09/04(月) 18:33:33UIスレッドだとどうやって渡せばいいんですか?
0502489
2006/09/04(月) 18:37:520503デフォルトの名無しさん
2006/09/04(月) 18:43:050504デフォルトの名無しさん
2006/09/04(月) 19:38:320505デフォルトの名無しさん
2006/09/04(月) 23:37:51全く同感ですが、しようがないっぽいです。
ハンドラ作成の度にフォーカスが移ってしまう件については
例えばCMyDocにハンドラを作る場合、ヘッダの
class CMyDoc : public CDocument
の行にブックマークしておけば、フォーカス移動後、F2押下で
CMyDocのプロパティが表示されるので、多少マシになります。
ハンドラ1個追加するのに5秒ぐらい待たされるとウンザリしますね。
0506デフォルトの名無しさん
2006/09/05(火) 00:25:38自分で書く。
コントロール変数位なら、宣言とDDX_Controlで済むから割と簡単。
ハンドラも、同じ種類を複数作るときは、一個だけ作って後はコピペで適当に弄って。
0507デフォルトの名無しさん
2006/09/05(火) 00:37:170508デフォルトの名無しさん
2006/09/05(火) 10:14:00たしかイベントでやりとりするんじゃなかったかな?
俺わかんねーから誰かkwsk説明してやって
0509デフォルトの名無しさん
2006/09/05(火) 11:17:260510500
2006/09/05(火) 11:24:12返答ありがとうございます
>>505
ブックマークを使うのはいい方法ですね
>>506
ハンドラの場合、メッセージによって引数が変わるのでちょっと面倒くさい気がします
同種のコマンドのばあいは、〜RANGEを使うので、自分で書いていますが・・・
今のところ、ほかの方法は見つからないようなので、
アップデートにて改善してくれることを信じて今は我慢することにします
0511デフォルトの名無しさん
2006/09/05(火) 11:32:52ほんとに放置すんの?
0512デフォルトの名無しさん
2006/09/05(火) 20:57:48形式がそんなに大事なら役所にでも勤めてろ。
0513デフォルトの名無しさん
2006/09/06(水) 00:45:080514デフォルトの名無しさん
2006/09/06(水) 00:53:38すぐに左側の式はクラスじゃありませんなんたらとか言いやがる。
何度かやり直すと入力候補が現れる。あほか。
0516デフォルトの名無しさん
2006/09/06(水) 10:18:060517デフォルトの名無しさん
2006/09/06(水) 14:16:36STRCORE.CPPの240行目CString::CString(LPCTSTR lpsz)の中まで入ってしまいます。
入らない方法教えて下さい。
0518デフォルトの名無しさん
2006/09/06(水) 14:25:17ステップオーバーしる
0519517
2006/09/06(水) 14:29:46ステップオーバー →メソッド通り越し
ステップイン →上記レス
で、困ってまつ。
0520デフォルトの名無しさん
2006/09/06(水) 14:34:55http://msdn2.microsoft.com/ja-jp/library/7ad07721.aspx
0521デフォルトの名無しさん
2006/09/06(水) 14:43:38特定の関数のステップインを止めたいんです><
0522デフォルトの名無しさん
2006/09/06(水) 14:46:190523デフォルトの名無しさん
2006/09/06(水) 15:05:27関数の引数にCStringがあったら、困るよってことだろ
要は、オマイの関数にステップインすりゃいいってことじゃん?
0524デフォルトの名無しさん
2006/09/06(水) 15:24:570525デフォルトの名無しさん
2006/09/06(水) 15:30:36鼻糞ほじりながらでもできるだろ
0526デフォルトの名無しさん
2006/09/06(水) 15:32:46抜けるまでキー押し続けでつ。
0527デフォルトの名無しさん
2006/09/06(水) 15:33:520528デフォルトの名無しさん
2006/09/06(水) 15:34:58こんなの設定できないのVC++だけだぞ。
0529デフォルトの名無しさん
2006/09/06(水) 15:37:210530デフォルトの名無しさん
2006/09/06(水) 16:08:12ステップインしないソースの設定出来ない血管IDE。
フォームエディタもクソ。
0531デフォルトの名無しさん
2006/09/06(水) 16:16:180532デフォルトの名無しさん
2006/09/06(水) 16:22:190533デフォルトの名無しさん
2006/09/08(金) 10:35:290534デフォルトの名無しさん
2006/09/08(金) 10:41:27どこかで見たような質問だな
0535デフォルトの名無しさん
2006/09/08(金) 12:22:49SendMessageとGetMessageを使えばいいのでしょうか?
そして自分でメッセージを作ればいいのでしょうか?
ここの人が冷たくて初心者は相談できないことはよくわかったので
合ってるなら合ってるとだけ教えてください
0536デフォルトの名無しさん
2006/09/08(金) 12:30:12好きなようにやれ
0537デフォルトの名無しさん
2006/09/08(金) 12:33:13相談する相手がいないので相談しにきてるのです
私がスレ違いで初心者迷惑なら二度と来ないので他の場所に誘導してください
0538デフォルトの名無しさん
2006/09/08(金) 12:53:39そいつがキチガイでうんざりしたんだよ・・・
オマエも同類ぽいけどな
0539デフォルトの名無しさん
2006/09/08(金) 12:58:20私の質問には答えてくれないということでしょうか?
これでは相談スレにならないです
相談できないならスレタイを変えたほうがいいですね
私がスレ違いなんですか?ちゃんと答えてください
0540デフォルトの名無しさん
2006/09/08(金) 13:29:06Win32APIの勉強をしろ。そうすればわかる
0541デフォルトの名無しさん
2006/09/08(金) 13:34:19>>489に同じ質問があったって書いてるんだ
それのレス読めよ
0542デフォルトの名無しさん
2006/09/08(金) 13:54:380543デフォルトの名無しさん
2006/09/08(金) 14:29:41答えになってないですよ
>>541
結果でてないでしょあなたがよく読んでからレスしてくださいね
>>542
そうなんですかボタンを押してスレッドを作っているんですが
GetMessage関数はWhileを使うんですよね?
関数なので呼び出したときにしか受け取れないように見えるんですが
スレッドを作ったあとにすぐGetMessage関数を書くんでしょうか?
0544デフォルトの名無しさん
2006/09/08(金) 14:32:420545デフォルトの名無しさん
2006/09/08(金) 14:41:34ここは相談しにくるとこですよね?
初心者相手に>>544みたいな答えしか返せないくせに
偉そうにするのが答えですか?
技術はあっても性格が子供なだけでしょうか
相談相手になる気が無いならこのスレ来ないほうがいいんじゃないですか?
ただでさえわからなくてイライラして困ってるから来てるのに
>>544みたいな人をみるとすごい腹が立ちますね
0546デフォルトの名無しさん
2006/09/08(金) 14:49:120547デフォルトの名無しさん
2006/09/08(金) 14:55:07人の怒りを逆撫でして面白いですかねこの人は
教えたくないなら消えるのはてめぇのほうだろ
たいしたことも教えれないくせにこのスレ来るなよ
人を馬鹿にするだけなら誰でもできるんだよ
ただの荒らしっすか?馬鹿にするだけなら邪魔なんで消えてくださいよ
0548デフォルトの名無しさん
2006/09/08(金) 14:59:580549デフォルトの名無しさん
2006/09/08(金) 15:01:450550デフォルトの名無しさん
2006/09/08(金) 15:08:27答えだけ求めている
これじゃ絶対無理
0551デフォルトの名無しさん
2006/09/08(金) 15:12:10自分でもそんなことはわかっています
でもやらないといけないんですよ
僕はどうすればいいんですか?死ねとでも言うんですか?
0552デフォルトの名無しさん
2006/09/08(金) 15:15:240553デフォルトの名無しさん
2006/09/08(金) 15:17:28このスレは初心者相談しにくるなということでいいんですね?
0554デフォルトの名無しさん
2006/09/08(金) 15:20:200555デフォルトの名無しさん
2006/09/08(金) 15:21:240556デフォルトの名無しさん
2006/09/08(金) 15:25:18独学なんで馬鹿にされて当然なんですかね
>>554
人を馬鹿にするだけが常識なんですか
>>555
これは上級者向きなことだったんですか?
0557デフォルトの名無しさん
2006/09/08(金) 15:40:130558デフォルトの名無しさん
2006/09/08(金) 15:40:29神様気分の偉そうにしたい人たちが集まってるだけです
きっとMFCとかなんにも知らないんでしょうね
本気で困ってる人を怒らして楽しむのだけかよ最低ですね
このスレ本気である意味ないし悪質だし消されても不思議じゃないよね
0559デフォルトの名無しさん
2006/09/08(金) 15:43:18基本がわかってないと手も足もでないんだよ
MFCに嫌気がさした人の数→
http://pc8.2ch.net/test/read.cgi/tech/1059196520/
0560デフォルトの名無しさん
2006/09/08(金) 15:45:35だからそのための相談室じゃないの?
0561デフォルトの名無しさん
2006/09/08(金) 15:48:040562デフォルトの名無しさん
2006/09/08(金) 15:48:37僕には相談相手がいないんです
0563デフォルトの名無しさん
2006/09/08(金) 15:59:37合ってるかどうかだけ答えてください
0564デフォルトの名無しさん
2006/09/08(金) 16:05:390565デフォルトの名無しさん
2006/09/08(金) 16:08:030566デフォルトの名無しさん
2006/09/08(金) 18:35:51それで判らなければ質問でもすればいいだろう。
0567デフォルトの名無しさん
2006/09/08(金) 19:13:33わかったことはメッセージの作り方です #define WM_TESU (WM_USER+1)
で作れたかと思われます
そしてスレッドでメッセージを飛ばそうとしました
if(SendMessage(HWND_BROADCAST,WM_TESU,0,0)==0)
しかしエラーが帰ってきてると思われます
後ろ2つの引数がよくわかりません
あと初めて使ったのですがダイアログベースなのでアイドル処理はWindowProcでいいんですよね?
この関数がもうメッセージを受け取っているように見えます
WindowProcのif(message==WM_KICKIDLE)でアイドル処理ができていました
しかしWM_KICKIDLEの中でGetMessageを使いメッセージをさらに取得するんでしょうか?
GetMessageを使うかどうかも教えてください
今日の質問はこれで最後にしますんでお願いします先輩
0568デフォルトの名無しさん
2006/09/08(金) 19:22:22たぶん普通のやり方なら非常に簡単だと思う
0569デフォルトの名無しさん
2006/09/08(金) 19:27:42また明日も来ますんでよろしくお願いします
0570デフォルトの名無しさん
2006/09/09(土) 00:57:010571デフォルトの名無しさん
2006/09/09(土) 01:40:200572デフォルトの名無しさん
2006/09/09(土) 04:06:060573デフォルトの名無しさん
2006/09/09(土) 04:07:360574デフォルトの名無しさん
2006/09/09(土) 04:57:290575デフォルトの名無しさん
2006/09/09(土) 05:36:00楽に出来そうだけど面白みに欠ける。
0576569 ◆AnMpDtbPAQ
2006/09/09(土) 09:58:10悪質ないたずらやめてください
もうわかりやすいように酉つけますよ
>>574
そのキーワードで調べてみますありがとうございます
0577569(本物)
2006/09/09(土) 16:00:29勝手にトリップつけてんじゃねえよ!悪質だな。
>>574
キーワード探してもぜんぜん分かりませんでした。バシっと教えなさい、クズども。
0578デフォルトの名無しさん
2006/09/09(土) 16:03:26スレッドのハンドル以外分からない状況でです。
0579デフォルトの名無しさん
2006/09/09(土) 16:13:190580デフォルトの名無しさん
2006/09/09(土) 16:15:36俺、スレッド自体作ったことねぇんだけど、
どんな状況でなにができないって言ってるのかさっぱりわからねぇよ。
0581デフォルトの名無しさん
2006/09/09(土) 17:21:37レスありがとうございます。
その関数について調べてみました。
http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_terminatethread.htm
上のサイトには
「スレッドを無条件に終了させる危険な関数であり、非常に特別な場合にのみ使うべきです」
と書いてありますが、定期的に COM に書き込みを行うようなスレッドを終了させるのに
使用しても大丈夫でしょうか?
0582デフォルトの名無しさん
2006/09/09(土) 17:23:37だめだろ。
0583デフォルトの名無しさん
2006/09/09(土) 17:24:16シャットダウンさせるプログラムを作りたいのですが、何か関数とかはないでしょうか?
0584569 ◆AnMpDtbPAQ
2006/09/09(土) 17:24:47偽がここに来るな
>>580
スレッドを作るとスレッドからMFCのエディットボックスを
さわることができないんです。
スレッドの処理で変数を増やしていっても表示ができないので
表示させる方法を教えてほしいんです
アウトプロセスで探したところATLにいきつきましたが
私のやろうとしていることとは違うように見えました
0585デフォルトの名無しさん
2006/09/09(土) 17:25:350586デフォルトの名無しさん
2006/09/09(土) 17:27:17「windows シャットダウン API」でググれ
0587デフォルトの名無しさん
2006/09/09(土) 17:28:37レスありがとうございます。
やはりフラグを使って終わらせる方が無難ですかね?
すぐに終わらないのが不安ですが・・・
0588デフォルトの名無しさん
2006/09/09(土) 17:32:35MFCのスレッドのサンプルみたら普通にできるだろ
エディットボックス使ったサンプルじゃなくてもやってることは同じだ
0590569 ◆AnMpDtbPAQ
2006/09/09(土) 17:39:360593デフォルトの名無しさん
2006/09/09(土) 18:17:40何をしようとしてるんだ何をw
0594デフォルトの名無しさん
2006/09/09(土) 18:38:42おまえ、仕事中に殺されるのと仕事が一段落したときに「死んでいいよ」ってメモを見つけて死ぬのとどっちがいい?
0595デフォルトの名無しさん
2006/09/09(土) 23:10:34今、Windows系のC++の環境ってどうなってんでしょう?
未だにVC++6.0でMFC使ってるんだがバージョンアップした方が良いのだろうか?
というかMFC自体これからどうなっていくのだろうか?
.NETでCLR環境を見据えてプログラミングした方が良いのだろうか?
誰か助言を頼みます。
0596デフォルトの名無しさん
2006/09/09(土) 23:45:50>未だにVC++6.0でMFC使ってるんだがバージョンアップした方が良いのだろうか?
そのままでいいよ
サービスパックはあてようね
0597デフォルトの名無しさん
2006/09/09(土) 23:59:57レスどうも。
色々怖いのでSPは当ててます。
ところでMS製品で、RAD環境なC++で
ネイティブファイルを生成できる物ってないですよね?
そんなのあったら皆使うか… スレ違いすんません。
0598デフォルトの名無しさん
2006/09/10(日) 16:18:20私も、VS6を使い続けて、最近VS2005を購入したものですが
MFCをメインに考えている方には、ぶっちゃけVS6の方が使いやすいと思います
さすがに7年もたったので、インテリセンスもだいぶバージョンアップしていますが(外部マクロをしっかり反映してくれたり)
頭よくなった分レスポンスが悪く、逆に使えなくなっているように感じます
また、統合環境の影響だと思いますがCWがなくなってハンドラー、コントロール変数の作成も面倒くさいし
0599デフォルトの名無しさん
2006/09/10(日) 16:44:14なんかしないとコンパイル通らなかった気がする。
0600デフォルトの名無しさん
2006/09/10(日) 16:46:03そんなこと言ったってVC6を使い続けるわけにはいかないんだから、移るしかないっしょ?
そのうち動作保障もされなくなるだろうし。
後は慣れの問題っしょ。
0601デフォルトの名無しさん
2006/09/10(日) 16:50:02無意味に新しい機能使うと古いパソコンで動かないし
0602デフォルトの名無しさん
2006/09/10(日) 17:52:17VS2005 C++
にてMFCプログラミングを勉強しようと思い、
『Visual C++ 2005』という本を購入したのですが
分かり辛く苦労しています。
一般的なマネージプログラムなら組めるのですが
MFCを使用したプログラムを組む方法がいまいち分かりません。
何か、良い書籍がありましたらお教え下さい。
0603デフォルトの名無しさん
2006/09/10(日) 19:09:18俺はMFCが理解できないのはWin32APIでのプログラミングが
よくわかってないからだと思ってるけど。
じっくり、勉強したいか、最速でとりあえず使えるだけにしたいのかで
アドバイスがちがってくるな。
正直、Win32がわかってない状態で読むMFCの本はどれも糞だと思うんだけどw
書籍もかなり買いまくったけど、いい本はほとんどないかな。
最速でとりあえず、使えるようにしたいなら「林晴比古」さんの本もいいと思うよ。
ただ、読んでもなんもわからんよwあくまで手順をたどってそのとおりできたら喜ぶものw
まず、Win32APIの仕組みをちょっと理解したいなら
「猫でもわかるWindowsプログラミング」
がいいと思う。でもこれだと中々前へ進まないけど地道にやってればあるときパッっと
開眼したときにわかりだしたときにすべてが理解できると思う。まあ、1年ぐらいw
俺が死ぬほど使ってる本は
http://www.amazon.co.jp/exec/obidos/ASIN/4891000503
だけど。これは辞書。
0604デフォルトの名無しさん
2006/09/10(日) 21:06:52http://www.amazon.co.jp/gp/product/4756136001/
これ読めば1日でわかるだろ
0605デフォルトの名無しさん
2006/09/10(日) 21:51:03MFCのクラス設計理解しないといけない
0606デフォルトの名無しさん
2006/09/11(月) 00:50:33お勧めできる本は知らないけど
APIレベルでのWINDOWSアプリの概要を把握した上で、CDocumentとCViewとCMainFrameの役割と流れを把握.すれば、その後の習得スピードは一気に上がると思う。
自分はDoc-View-Frameの理解はに構苦労しました。VC特有の本じゃなくオブジェクト指向の説明(MVCとかObserverとか)が結構役に立った気がする。
>>604
あなたは天才。多分世界一。
0607デフォルトの名無しさん
2006/09/11(月) 01:25:49でも、メッセージの動きとWin32APIを知っていれば後は
「似たようなの」探すだけだと思う。
もちろんそれだけじゃ終わらないけど。
ちなみに俺は1〜2ヶ月でなじんだよ。(Win32→MFC)
0608デフォルトの名無しさん
2006/09/11(月) 09:43:31絶対この本
ttp://www.amazon.co.jp/gp/product/4881357042/
6.0に書かれてるけどMFCだったら問題ない
0609608
2006/09/11(月) 10:11:06Doc/View辺りはソースを読むのが一番の理解だと思うけどね
マクロは一度くらいは定義を見たり、プリプロセス後のソースを見ると良いかも
0610デフォルトの名無しさん
2006/09/11(月) 16:10:06質問させてください。
ダイアログ上の第1ボタンのクリックイベントハンドラに、先ず、ファイルを書き替えますかとメッセージ出して、
OKなら書き換えるというコードを書いてあるのですが、
第1ボタンをクリックして、ファイルを書き替えますかというメッセージが出ているときに、
間違って、第1ボタンをもう一回クリックしたら、ファイルを書き替えますかというメッセージが二重に出ました。
特にスレッドを作成追加したりしてないのに、こんなマルチスレッドみたいになことが起きたので、ビックリしたのですが、
メッセージ出した後、OK等が押されるまで、プログラムは停止しているものではないんでしょうか。
どうしてこんなことになっているのでしょうか。
0611デフォルトの名無しさん
2006/09/11(月) 16:17:07単にメッセージがモードレスで出てしまってるだけ
>メッセージ出した後、OK等が押されるまで、
>プログラムは停止しているものではないんでしょうか
いいえ
0612デフォルトの名無しさん
2006/09/11(月) 16:30:03>メッセージ出した後、OK等が押されるまで
イベント処理ループに入ってる。
その間、ダイアログにイベントが発生したら、
またイベントハンドラが呼ばれる。
>どうしてこんなことになっているのでしょうか。
メッセージボックスを「アプリケーションモーダル」にしてないから。
0613デフォルトの名無しさん
2006/09/11(月) 16:35:44モードレスダイアログでメッセージ出してるとか?
0614デフォルトの名無しさん
2006/09/11(月) 16:47:000615デフォルトの名無しさん
2006/09/11(月) 16:49:31レスありがとうございます。
単に、::messagebox()でメッセージをだしているだけなんですが、
親ウィンドウハンドルをNULLにしているせいで、モードレスになっているのでしょうか。
メッセージループの構造について勉強しなおしてきます。m(__)m
0616デフォルトの名無しさん
2006/09/11(月) 17:02:390617デフォルトの名無しさん
2006/09/11(月) 17:23:48レスありがとうございます。書き込み中だったので気付きませでした。
モーダレスといっても、そのメッセージハンドラ内では処理中断になっているので、
その状態で、他のメッセージハンドラに移行できるというメッセージループの構造について正しく理解できていないのですが、
::messageboxでなく、this->messageboxを使えば良いというのが分かりました。
0618デフォルトの名無しさん
2006/09/11(月) 17:59:13モーダルは処理が止まってるように見えても、内部ではメッセージループが回ってるから
メッセージが発生すれば処理される。
MessageBoxに指定したオーナーウィンドウと親子関係が無いウィンドウはdisableにならないので操作できる。
0619デフォルトの名無しさん
2006/09/11(月) 19:01:24ここがおかしい
0620デフォルトの名無しさん
2006/09/11(月) 19:04:43MessageBoxが出たときにそれを左右に移動すると
その下のウィンドウが再描画されずに真っ白になるアプリ
ありゃなんでかな?
0621デフォルトの名無しさん
2006/09/11(月) 22:28:23::messagebox(NULL,〜,〜,〜)と親ウインドウ指定せずにやった場合でも、ちゃんとそのメッセージハンドラのコードでは、
OKかキャンセルか処理を待機しているから、処理中断になっているで、間違いないんでは?
0622デフォルトの名無しさん
2006/09/12(火) 00:40:30間違ってないよね。
>>617
モーダルのときはMessageBox側に大半のメッセージが流れるから
第一ボタンを2回押せないだけで、来たメッセージは処理してる。
例えば親WINDOWの上でMessageBox動かした時の背景の再描画とか。
VSの付属品Spy++でみると分かりやすいよ。
0623デフォルトの名無しさん
2006/09/12(火) 19:11:49追加する方法を教えてください
0624デフォルトの名無しさん
2006/09/12(火) 19:46:000625デフォルトの名無しさん
2006/09/12(火) 20:51:05追加すればいいんじゃない?
0626デフォルトの名無しさん
2006/09/12(火) 22:14:540627デフォルトの名無しさん
2006/09/12(火) 22:26:27これで理解できなかったら諦めた方がいい
0628デフォルトの名無しさん
2006/09/13(水) 02:00:560629デフォルトの名無しさん
2006/09/13(水) 03:05:19それは英語だから駄目だな。
普通にGoogleにぶち込んだほうがナンボか早い。
0630デフォルトの名無しさん
2006/09/13(水) 10:25:500631デフォルトの名無しさん
2006/09/13(水) 18:07:23追加しても反応しませんでした
(〜.h)
afx_msg void aaa();
(〜.cpp)
BEGIN_MESSAGE_MAP(CxxxView, CFormView)
ON_COMMAND(WM_TESU,aaa)
END_MESSAGE_MAP()
スレッドからViewにメッセージを飛ばしたいのですが
Viewクラスからスレッドを起動させています
ウィンドウハンドルを渡しています
UIスレッドクラスから
if(abc=SendMessage(hWnd,WM_TESU,0,0))
で送信していますabcには1が帰ってきていました
hWndには受け取ったハンドルを入れてありますWM_TESUは自作メッセージです
しかしView側で用意したaaa関数に反応しませんでした
どこか間違っているのでしょうか?
0632デフォルトの名無しさん
2006/09/13(水) 18:30:270633デフォルトの名無しさん
2006/09/13(水) 18:45:03ttp://www24.cds.ne.jp/~neg/pro/piyo1/bar/drop.html
ここを参考にして書いたのですが、そもそもドロップダウンボタンが押せなくて困っています。
何かイベントを関連づけなければいけないんでしょうか?
0634デフォルトの名無しさん
2006/09/13(水) 18:56:000635デフォルトの名無しさん
2006/09/13(水) 19:00:560636デフォルトの名無しさん
2006/09/13(水) 20:15:09ON_COMMANDになってるけど
ON_MESSAGEじゃない?
0637デフォルトの名無しさん
2006/09/13(水) 20:30:45ぱっと見た感じサンプルのコードがおかしいとは思えないので、
原因としてありそうなのは
ON_NOTIFY(TBN_DROPDOWN,AFX_IDW_TOOLBAR,OnToolbarDropDown)
の行をちゃんと書いてないとか。
0638633
2006/09/13(水) 22:08:37その部分の第2引数を勝手に換えていたのが原因でした。
そのまま利用したらきちんと動作するようになりました(ただOnToolbarDropDownの第一引数は
そのままでは通らなかったので変更)。
ありがとうございました。
0639デフォルトの名無しさん
2006/09/14(木) 07:58:45VBなどのようにプロパティからフォントなど指定して使用できるように
することは出来ないでしょうか?
0640デフォルトの名無しさん
2006/09/14(木) 09:09:56プロパティでやるようなわけにはいきませんが、SetFont()でフォントを指定することはできます。
0642デフォルトの名無しさん
2006/09/14(木) 13:19:24VBで使ってるスタティックテキストは、スタティックテキストじゃなくて
ActiveXのラベルコントロールだからそのコントロールを追加すれば使える
0643!639
2006/09/14(木) 14:31:57ああ、そうか!その手があったなぁ。
VBでWin32APIを使うよりはそっちのほうが楽できそうだ
0644・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6
2006/09/14(木) 23:36:240645デフォルトの名無しさん
2006/09/15(金) 00:20:25しえて
い
0646639
2006/09/15(金) 01:48:45"Label DTC"を追加して試してみました。
プロパティからフォントや色・サイズの指定が出来ました。
しかしながら、VBのように多種多様なこと細かい設定は
出来ないものなのですね・・・
結局、SetFont()で行うことになってしまうかもしれません ^^;
0647デフォルトの名無しさん
2006/09/15(金) 02:10:27これだから縦割り行政は……(関係無い
0648デフォルトの名無しさん
2006/09/15(金) 11:19:10CHyperlinkがどれくらいのことが出来るのを求めているのかわからんが
codeguruあたりのcontrolみればそれっぽいのは転がってるぞ
それにHyperlinkなんて対して難しくないわけだし
無いコントロールは自分で作る、これMFCで開発してたら当たり前
0649デフォルトの名無しさん
2006/09/15(金) 23:52:47クラス設計が悪いとか、サイズが大きくなるとかはなしでお願い。
0650デフォルトの名無しさん
2006/09/16(土) 00:00:570651・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6
2006/09/16(土) 00:13:13んなこと言ったら出来合のもので全部賄えるクラスライブラリなんてないよ
0652デフォルトの名無しさん
2006/09/16(土) 02:12:01新しいGUIとの格闘のゴングが鳴ったといっていいでしょうねw
馬鹿なお客もより一層いい臭いを漂わせること間違い無しです。
0653デフォルトの名無しさん
2006/09/16(土) 02:27:40クラス設計が悪い
0654デフォルトの名無しさん
2006/09/16(土) 02:40:02良く使う機能をVC側で用意すべきだという意見に対して
簡単だから自分で作れという意見は、明らかにズレてる。
簡単だから必要ないというならツールボックスに含まれる
コントロールの半分以上は必要ないってことになってしまう。
使う使わないは別にして、無いよりあった方が良いだろ。
>無いコントロールは自分で作る、これMFCで開発してたら当たり前
こんなのドシロウトを別にすればMFC開発にに限らず誰でもやってること。
0655デフォルトの名無しさん
2006/09/16(土) 13:18:400656デフォルトの名無しさん
2006/09/16(土) 14:08:40複数選択されているグレー表示を行いたいのですが
どうすれば良いのでしょうか?
0657デフォルトの名無しさん
2006/09/16(土) 15:30:230658デフォルトの名無しさん
2006/09/16(土) 15:32:070659デフォルトの名無しさん
2006/09/16(土) 18:55:53ありがトンです。
0660デフォルトの名無しさん
2006/09/20(水) 12:35:40その部分のMFCソースのコメントに "CreateExを使え" とか書いてあるんだけど、CHtmlViewにはCreateExが無い。
CHtmlViewをWS_EX_LAYERED対応にするにはどうしたらいいのでしょう?
0661デフォルトの名無しさん
2006/09/20(水) 13:00:31SetPaneTextでメッセージを表示させているのですが、prog1からCreateProcessで起動した
別プログラム(prog2)がCPUを猛烈に占有するので、メッセージの更新が出来ない場合があります。
症状としては、ウインドウが再描画されないみたいです。
こういう場合、確実かつ強制的に、特定のウインドウを再描画して、正しく描画させる方法
ってありますでしょうか?よろしく。
CPUはP4 3.6GHzなので、そんなに力不足ではないと思うのですが。
0662デフォルトの名無しさん
2006/09/20(水) 13:17:32CHtmlViewでCreateEx使えなかったっけ?
MSDNで見ると使えそうだけど
0663デフォルトの名無しさん
2006/09/20(水) 13:24:59プロセスの優先度を調整。
prog2を少し下げてやるといい。
0664デフォルトの名無しさん
2006/09/20(水) 14:26:43ありがとうございました。
早速ためしてみたのですが、prog1の優先度を上げたり、prog2の優先度を
下げたりしたのですが、状況は変わりませんでした。
原因がprog1のコーディングにある可能性もあるのですが、
困りました。
0665660
2006/09/20(水) 14:31:08>CHtmlViewでCreateEx使えなかったっけ?
呼べちゃいますが、CHtmlViewでオーバーライドされてないので、CViewが直接呼ばれ、HTMLの初期化がされないので正常動作しない模様。
0666デフォルトの名無しさん
2006/09/20(水) 15:12:34SetPaneText()のすぐ後で
RedrawWindow()するか
InvalidateRect()&UpdateWindow()してみては?
0667デフォルトの名無しさん
2006/09/20(水) 16:00:30ありがとうございます。
ステータスバーに文字描画
InvalidateRect()
UpdateWindow()
Beep() //確認のため
こんな感じの処理を1秒おきに呼び出しているのですが、Beepは1秒おきにちゃんと
鳴るんですが、再描画がまったくできません。
ときどき成功することもあるのですが、その場合でも、ウインドウのサイズを変更
したりすると、『反応無し』というタイトルになって、ウインドウ全体が(ステイタスバーも
含めて)まったく反応しなくなります。
でもprog2が終了すると、無事にprog1が反応を取り戻します。
何が悪いんでしょうか?
0668デフォルトの名無しさん
2006/09/20(水) 17:25:050669デフォルトの名無しさん
2006/09/20(水) 17:49:52関数execute_prog2()を実行するとBeepはいつでも1秒おきに鳴るんですが、
『反応なし』の状態になってウインドウの再描画が、停止します。
どこかおかしな所がありましたらアドバイス御願いします。
------------------------------------------------------------
//prog1のステータスバーに文字を描画する関数
void report_progress(int n)
{
ステータスバーに数字 n を描画
InvalidateRect()
UpdateWindow()
Beep() //確認のため
}
// 新しいスレッドでprog2を実行し、終了するまで待つ関数
unsigned __stdcall start_thread(void *lpx)
{
hEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, EVENT_NAME);
WaitForSingleObject(hEvent, INFINITE);
strcpy(buf, "prog2.exe"); // prog2を起動する準備
bSuccess = CreateProcess ( NULL, buf,
NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS,
NULL, NULL, &si, &pi );
bSuccess = WaitForSingleObject( pi.hProcess, INFINITE );
CloseHandle( pi.hProcess );
CloseHandle(hEvent);
return(0);
}
0670デフォルトの名無しさん
2006/09/20(水) 17:51:28//スレッドが終了するまで、ループしながらステータスバーに文字を表示する
void execute_prog2()
{
hTh = (HANDLE)_beginthreadex(NULL, 0, start_thread, NULL, 0, (unsigned int*)&thID);
while (1) {
GetExitCodeThread(hTh, &dwExCode);
if (dwExCode == STILL_ACTIVE) {
printf("スレッド実行中\n");
Sleep(1000); n++;
report_progress(n);
} else {
break;
}
}
・・・・
・・・・
}
0671デフォルトの名無しさん
2006/09/20(水) 18:22:07670のコードってprog1側に書かれてるんだと思うけど、それならprog1側が悪い。
PumpMessage(),PeekMessage(),TranslateMessage(),DispatchMessage()あたりを
キーにしてググればわかるはず。
で、その辺をきっちりすれば、>>666で書いたことは不要になるかも。
とりあえず調べてみて。
>>660
今のウィンドウ構成はどうなってる?
トップレベルウィンドウにWS_EX_LAYEREDつければできるよ。
CHtmlViewをトップレベルウィンドウにしようとしてるなら
そもそもそれが無理。
0672デフォルトの名無しさん
2006/09/20(水) 18:59:30bSuccess = WaitForSingleObject( pi.hProcess, INFINITE );
このINFINITEを0にして戻値がWAIT_TIMEOUTの間は671の書いたこと
やってれば良いんじゃないかな。ただ終了待ちの間に、触って欲しく
ない部分も多いと思うので、prog2終了までは
AfxGetMainWnd()->EnableWindow(0)とかやっておいたほうがよさげ。
一番違和感を感じたのは関数start_threadで別プロセスを起動して
関数execute_prog2でスレッドを起動してる点
0673デフォルトの名無しさん
2006/09/20(水) 19:04:12スレッドにする理由が見つからない。
0674デフォルトの名無しさん
2006/09/20(水) 19:35:49もともとスレッドにしていなかったのですが、
いろいろ試行錯誤していたらこんな形になってしまいました。
こういう構造が良いのかどうかも含めて問題点を指摘していただけると
ありがたいです。
とりあえず、みなさんのアドバイスを元に、今からトライしてみます。
0675デフォルトの名無しさん
2006/09/20(水) 22:15:33cpu100%いったりしない?
0676デフォルトの名無しさん
2006/09/20(水) 22:27:29100%じゃなくても、ユーザーインターフェーススレッドなら
一定時間メッセージ処理しないと応答なしと判断される。
0677デフォルトの名無しさん
2006/09/20(水) 22:44:42スレッド作って終了待ちして、そのレッド内でプロセス呼び出して終了待ちって
同じこと2回やってるように見える。
0678デフォルトの名無しさん
2006/09/21(木) 00:17:29タスクバーに表示されるアイコンを消去するにはどうしたら良いですか?
タイトルバーのアイコンはシステムメニューをオフにすればできましたが、
タスクバーのアイコンだけを消すことはできないでいます。
0679デフォルトの名無しさん
2006/09/21(木) 01:10:27Tool Window ⇒True
とか
WS_EX_APPWINDOW | WS_EX_TOOLWINDOW
0680デフォルトの名無しさん
2006/09/21(木) 09:33:280681デフォルトの名無しさん
2006/09/21(木) 11:05:43672さん(671さんも)のアドバイスに従ってトライしたら、無事に
できました。大変勉強になりました。ありがとうございます。
追加でもう一つ質問なのですが、
AfxGetMainWnd()->EnableWindow(0)
としたら、ウインドウに対する操作が一切できなくなるようですが、
その状態でもESCAPEキーだけは押されたかどうか知りたいのですが、
可能でしょうか?
0682デフォルトの名無しさん
2006/09/21(木) 11:44:19>675
>676
prog1 約50%
prog2 約40%
で合わせて90〜100%です。
prog2の40%は仕方ないんですよね?
0683デフォルトの名無しさん
2006/09/21(木) 12:28:360684デフォルトの名無しさん
2006/09/21(木) 17:44:03その状態では不可能。EnableWindow(0)をやめてPeekのあと
MSGを拾うなり捨てるなり流すなりすれば出来る。
681=ちょっと前にUIスレッドの件で叩かれた人だと思うけど
やりたい事or問題点を明確にしないまま情報を小出しにして質問
するから回答のほうもぐだぐだになる。もう疲れたよ。
0685デフォルトの名無しさん
2006/09/21(木) 21:17:320687デフォルトの名無しさん
2006/09/22(金) 20:22:54ダイアログバーに配置したエディットを配置した状態で、クリップボードや
CEditのテキストの状態に応じてツールバーのID_EDIT_CUT等のボタンの処理を
行いたいのですがうまくいきません。
CMainFrameにOnUpdateEditCopyを書いても呼ばれません。
どのようにすれば実現できるのでしょうか。
ご存知の方、教えてください。
0688デフォルトの名無しさん
2006/09/22(金) 21:18:39質問内容が不明瞭。
ダイアログバー上のCEditのテキストを取得方法を聞いているんだとすれば
・GetDlgItemText()で直接取得してしまう
・CDialogBarを派生させて、その中にDDX/DDVルーチンを書く
のどちらかで。
前者の方が簡単、後者はDDX/DDVが分ってないとキツイ。
0689デフォルトの名無しさん
2006/09/22(金) 21:43:44もう少し、回答者にわかりやすい質問にしないと絶対に答えは出てこないぞ
文章だけを読むと結局何が知りたいのかわからん
ダイアログバー上のテキストの値の取得をしたいのか?
クリップボードの状態を知りたいのか?
ID_EDIT_CUTのOnUpdateCommnaUIがよばれないのか?
一応読み取れたのこの3つだが
0690デフォルトの名無しさん
2006/09/24(日) 17:06:50モーダレスダイアログ(dlg1)を作成/消去したいです。
作成に関してはOnMenuからdlg1のCreate()を呼ぶことで出来たのですが、
消去に関して、OnMenuからdlg1でオーバーライドしたOnCancel()を呼ぶと
コンパイルは出来るのですが、実行中に
Debug Assertion Failed!
というエラーが出てしまいます。
上記の方法は間違っていますか?もし間違っているのなら、
どのようにすればモーダレスダイアログの消去をメニューの選択で出来るのでしょうか?
わかる方教えてください。お願いします。
0691デフォルトの名無しさん
2006/09/24(日) 17:25:220692デフォルトの名無しさん
2006/09/24(日) 17:56:06ソース出てないので確信はもてないけど
オーバーライドしたOnCancelのなかで、やってはいけない事やってるんだと思う。
VCの機能を使ってオーバーライドすると、MSDNにやってはいけないと書いてる事を
VCが勝手に付け加えるんだよね。
0693デフォルトの名無しさん
2006/09/24(日) 18:35:02エラーメッセージに書かれてたのはdlgcore.cppの572行目なんですが
調べてみると
ASSERT(::IsWindow(m_hWnd));
と書かれてました。これはどういうことなんでしょう?
>>692
OnCancelは、
void dlg1::OnCancel()
{
CDialog::OnCancel();
}
だけです。CDialog::OnCancel()はVCが付け加えたものだと思いますが、
これがやってはいけないことなんでしょうか??
これを消すとエラーは出なくなりましたが、
ダイアログの閉じるボタンで閉じることも出来なくなるのですが。。。
0694デフォルトの名無しさん
2006/09/24(日) 18:53:530695デフォルトの名無しさん
2006/09/24(日) 19:28:32めったに使わないから、やりかた忘れちゃうし。
たまにダイアログ内部で生成/破棄やる人いるし。
0696デフォルトの名無しさん
2006/09/24(日) 19:31:420697デフォルトの名無しさん
2006/09/24(日) 21:30:49http://www.athomejp.com/goldfish/mfc/dialog/modeless.asp
0698デフォルトの名無しさん
2006/09/25(月) 03:20:42dlg1::OnCancelを
void dlg1::OnCancel()
{
DestroyWindow();
// CDialog::OnCancel();
}
に変更したところ、ダイアログのほうは問題なく動作しましたのですが、
相変わらずOnMenuからダイアログの消去が出来ません。
OnCancel()は、dlg1から呼ばれた場合には正常に動いているのですが
OnMenuから呼ばれた際にDestroyWindow()が動かないのです。。
原因として考えられることって何でしょうか?
0700デフォルトの名無しさん
2006/09/25(月) 08:20:01ローカルなインスタンスでもコンパイルは通るだろうなと思った。
0701デフォルトの名無しさん
2006/09/25(月) 09:16:37PostMessageでdlg1にメッセージIDCANCELを送る
dlg1のOnCancelは最初のままでいい
0702701
2006/09/25(月) 09:26:27他のウィンドウのOnXXXXを直接呼ぶのはダメ
それに該当するメッセージを送ること(Ex.OnCancelならIDCANCEL)
MFCは4年ほどやってないから間違っているかもしれないけど
間違ってたらスマソ
0703701
2006/09/25(月) 09:36:41これ参考にして
モードレスダイアログの作り方
http://www.bnote.net/sdk_mfc/mfc2.shtml
0704デフォルトの名無しさん
2006/09/25(月) 10:58:11ttp://www.interq.or.jp/jazz/iijima/mfc/mfc_index.html
0705デフォルトの名無しさん
2006/09/25(月) 11:00:15xxx *tesuThread
tesuThread=new xxx[100]というように配列生成したいのですが
コンストラクタがprotecteで宣言されているのでアクセスできませんでした
そこでpublicに変えたのですが
error C2582: 'operator '=' 関数を 'xxx' で使用できません。
というエラーがおきます
0706デフォルトの名無しさん
2006/09/25(月) 11:16:09CMainFrame上のステータスバーとかと同様に
メインダイアログで実態を保持して、OnCreateで作成、あとは表示非表示する
oncancelで基底のoncancelを呼び出さないで、showwindow(sw_hide)
,OnMenuでm_wndXXX.showwindow(sw_hide)する
単純なプロジェクトで値のINOUTが面倒くさかったり、表示位置を覚えておくタイプの場合有効
ちなみに、~cdialogでウインドウハンドルがあればdestorywindowを呼び出すから
アプリが終わればウインドウは破棄される
0707デフォルトの名無しさん
2006/09/25(月) 11:22:130708デフォルトの名無しさん
2006/09/25(月) 11:23:19スレッドクラスは、newはまずいので
配列管理したければ
forでまわす
0709デフォルトの名無しさん
2006/09/25(月) 11:47:54ありがとうございます
0710デフォルトの名無しさん
2006/09/25(月) 11:52:12MSDNでc2582検索してみると的確な答えが載ってる
0711デフォルトの名無しさん
2006/09/25(月) 12:01:19newしちゃいけないとは書いてないな
createthreadの項みると、連続したスレッドの生成OKみたいなこと書いてある
cwinthreadとafxbeginthreadのソース見ながらスレッド生成すればnew[]出来ないことも無さそう
0712デフォルトの名無しさん
2006/09/25(月) 12:08:24newはだめだCreateObjectで生成するみたい
0713デフォルトの名無しさん
2006/09/25(月) 12:36:58CreateObject使ってみます
0714デフォルトの名無しさん
2006/09/25(月) 13:09:15できました
ありがとうございました
xxx* Thread:
Thread= (xxx*)RUNTIME_CLASS(xxx)->CreateObject();
0715デフォルトの名無しさん
2006/09/25(月) 13:17:580716デフォルトの名無しさん
2006/09/25(月) 13:39:39数を受け取りxxxのメンバ変数を初期化させる関数を作りました
void xxx::GETINT(int x){
xxx=x //int型メンバ変数xxxに代入
}
for(i=0;i<4;i++){
Thread[i].GETINT(int x);
}
なぜか3番目で
0x00412ff6 でハンドルされていない例外が発生しました
: 0xC0000005: 場所 0x00e18294 に書き込み中にアクセス違反が発生しました。 。
という表示が出て失敗してしまいます1番目と2番目は成功してるのに・・・orz
0717デフォルトの名無しさん
2006/09/25(月) 13:41:380718デフォルトの名無しさん
2006/09/25(月) 15:14:570719デフォルトの名無しさん
2006/09/25(月) 15:55:550720デフォルトの名無しさん
2006/09/25(月) 23:02:190721デフォルトの名無しさん
2006/09/26(火) 04:37:34CMapPtrToPtrのGetStartPositionの戻り値となっている
POSITION型とはどのような型なのでしょうか
キーワードが一般的過ぎて
WEBのMSDNの検索でもうまく引っかかりませんorz
0722デフォルトの名無しさん
2006/09/26(火) 07:49:02この説明でわからないんじゃ説明しようがないな
ひょっとしてC++初心者ですか?
CMapStringToOb::GetStartPosition
POSITION GetStartPosition( ) const;
戻り値
マップの順次検索を開始する位置を POSITION 値で返します。マップが空の場合は NULL を返します。
0723YOSK
2006/09/26(火) 11:23:53現状はとしては、MFCでビデオ録画アプリケーションを実装中です。
CFileDialog dlg(TRUE);
dlg.DoModal();
この2行を追加すると、スレッド待ちのような状態になって
アプリケーションを終了できません。
当初はプロジェクトの設定やライブラリに原因があるのかと思っていましたが、
どうもコモンダイアログからコモンダイアログ(CFileDialog)を呼んでいるのが問題?のようです。
なにか考えられる原因がございましたら、ご教授願います。
0724デフォルトの名無しさん
2006/09/26(火) 11:35:22それはスレッド待ちではない。
「コモンダイアログからコモンダイアログ(CFileDialog)を呼んでいる」のが根本的な問題でもない。
モーダルダイアログがどんな動作をするのかを理解してないのが問題。
0725YOSK
2006/09/26(火) 11:56:18返答ありがとうございます。
「どんな動作」というのは、モールダイアログが開いているときには、オーナーウィンドウが
一切の入力を受けないとか、独自のメッセージループを持っているということで間違いないでしょうか。
そうであれば、「OK」や「キャンセル」でこれを終了した場合にアプリケーションが終了しないのは、
モーダルダイアログが「OK」や「キャンセル」で死亡しない場合があるのではないかと考えましたが
どう思いますか?
無知なもので誠に申し訳ない・・・。
0726デフォルトの名無しさん
2006/09/26(火) 12:37:04>コモンダイアログからコモンダイアログ(CFileDialog)を呼んでいるのが問題?のようです。
この部分がイメージできません。もう少し具体的に...
あと、新規プロジェクトで上記のことだけをやってもアプリの終了ができなくなります?
0727YOSK
2006/09/26(火) 13:01:55いえ、新規プロジェクトでは終了できました。
新規プロジェクトで
アプリケーションの初期化時にDoModalを呼ぶプログラムを作り、動作を確認しながら
コードを追加していき、現在のプロジェクトに近づけていく途中で終了できなくなります。
しかしながら、これで原因が特定できない理由として
この作業を行うと、その時々によって終了できなくなる原因が違います。
現在は、このプロジェクトでは、ビデオストリームを送受信するライブラリをはじめとして
多くのリンクオブジェクトがあります。これらに原因があるかもしれません。
そこで、CFileDialogを利用する場合に考慮するべき点(必須事項、禁止事項)について調べています。
>コモンダイアログからコモンダイアログ(CFileDialog)を呼んでいるのが問題?のようです。
やはりこの部分は関係ないようです。無視してくださって結構です。
0728YOSK
2006/09/26(火) 13:05:31AfxOleInit()
を行っていないことが原因ではないみたいですが、
関係ないですよね?確認までに。
0729デフォルトの名無しさん
2006/09/26(火) 13:09:120730デフォルトの名無しさん
2006/09/26(火) 13:20:36これ試してみて。
m_ofn.lStructSize=OPENFILENAME_SIZE_VERSION_400;
0731デフォルトの名無しさん
2006/09/26(火) 13:21:56レスありがとうございます
STLでいうところのイテレータのようなものだと思えば
良さそうですね
POSITIONという名前なので、
RECTだとかPOINTのように
もっと広く使われているものかと勘違いしていました
//C++初心者ではないがMFCは初心者^^;
0732デフォルトの名無しさん
2006/09/26(火) 13:46:47CWinApp::ProcessWndProcException を処理すればいいみたいですが、
使いたいのはCExceptionから派生してない自作例外クラスなのです。
これって、CExceptionを継承するように自作例外クラスを書き直すしかないでしょうか?
0733デフォルトの名無しさん
2006/09/26(火) 16:11:55質問です。
class DialogB : virtual public CDialog
{ // for modeless.
:
:
}
class CDialogADlg : virtual public CDialog, public DialogB
{
:
:
}
以上のようにBダイアログを継承したAダイアログを表示させたいのですが、
(Aを表示させるとBも表示させる)
なかなかうまくいきません、通常このようなことはやらない(できない)のでしょうか?
継承させずにAの中でBをnewしてmodelessという方法では(´・ω・`)なので・・・
0734デフォルトの名無しさん
2006/09/26(火) 16:38:360735デフォルトの名無しさん
2006/09/27(水) 00:09:41なぜ、(´・ω・`)なのかその理由が知りたいが・・・
とりあえず、言える事は、mfcをやる前にC++の勉強をしなおしたほうがいい
0736デフォルトの名無しさん
2006/09/27(水) 01:10:53下記のソースコードを実行しても
ファイルがカキコミできません。
どなたか、ファイルが書き込みできない理由を
教えてください。
void CXfile_MotionReaderDlg::OnButton1()
{
CFileDialog *dlgFile;
dlgFile = new CFileDialog(
TRUE, // 種類 TRUE : FileOpen
_T("jpg"), // デフォルトの拡張子
_T("*.jpg"),// 初期ファイル名
OFN_FILEMUSTEXIST, // ダイアログの設定フラグ:既存のファイル
_T("Wave(*.jpg)|*.jpg|全て(*.*)|*.*||")// フィルタ
);
if(dlgFile->DoModal() == IDOK)
{
CStdioFile fout( "file.text", CFile::modeCreate | CFile::modeWrite | CFile::typeBinary );
fout.WriteString( dlgFile->GetPathName() );
fout.Close();
}
delete dlgFile;
}
0737デフォルトの名無しさん
2006/09/27(水) 01:25:00・向こうのレスは見た?
・誘導されたときはそのこともきちんと書いておこうね。
・「書き込みできない」をどうやって確認した?
0738デフォルトの名無しさん
2006/09/27(水) 01:42:46Wave(*.jpg)で気付くべきだったorz
0740デフォルトの名無しさん
2006/09/27(水) 01:51:210741デフォルトの名無しさん
2006/09/27(水) 01:56:12不可能
0742デフォルトの名無しさん
2006/09/27(水) 02:26:42dlgFile = new CFileDialot(...);
ってヒープに積むのかが分からん
スタックに積めよ
0743デフォルトの名無しさん
2006/09/27(水) 04:02:17一部MFCの関数(ラッパークラスやコンテナなど)
を使ってソフトを作ることは可能でしょうか
どこに書き込むか迷ったんですが、もしスレ違いでしたら移動します
0744デフォルトの名無しさん
2006/09/27(水) 07:11:19MFC使うなら、最初からじゃないと、色々面倒な事になりそうだし。
0745デフォルトの名無しさん
2006/09/27(水) 19:34:10ATLは名前だけ聞いたことがありましたが
WTLっていうのは初耳でした
テンプレートは好きなんでちょと調べてみます
ありがとうございました
0746デフォルトの名無しさん
2006/09/30(土) 22:57:54配置をまとめて行うことはできますか?
サイズ可変のダイアログに複数のコントロールを貼り付けた時に
全てのコントロールについて座標をしてポジションを決めるのが
面倒なのですが。
0747デフォルトの名無しさん
2006/09/30(土) 23:00:07> 座標をして
座標を計算して
0748デフォルトの名無しさん
2006/09/30(土) 23:11:10あきらめろ
0749デフォルトの名無しさん
2006/09/30(土) 23:27:03OnInitDialogで
CPtrArray ctrl;
ctrl.Add(mA);
ctrl.Add(mB);
ctrl.Add(mC);
・
・
・
ってやっとけば?
0750デフォルトの名無しさん
2006/10/01(日) 00:54:16可変サイズでポジションを自動でかえるって事なら
自動でやってくれる、クラスやマクロが転がっているからそれを使うのもあり
それで対応できないようだったら、コントロール変数を配列で管理して自分で計算するのがいいと思う
0751デフォルトの名無しさん
2006/10/01(日) 01:22:160752デフォルトの名無しさん
2006/10/01(日) 01:22:470754デフォルトの名無しさん
2006/10/01(日) 14:10:39codeguruなどのHPに行って
SEARCHで resize dialog
と打つ、よさそうなサンプルソースをダウンロードして使い方を確認
ただし、そのソースを使う場合あくまでも自己責任で
0755デフォルトの名無しさん
2006/10/01(日) 14:31:22補足
751が言ってるWTLのCDialogResizeはコントロールの均等割りが出来るので優秀
ソースは短いのでCDialogResizeを解析して組み込むのもありかもしれない
codeguruのサンプルだとサイズと位置の自動化は多いが
均等割りはあるものとないものがあるからよく調べて使ったほうがいい
0756デフォルトの名無しさん
2006/10/01(日) 16:32:260757・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6
2006/10/01(日) 16:39:270758デフォルトの名無しさん
2006/10/01(日) 20:32:20クイックヒントの表示で、CViewを見ると [ class CView abstract ]
と出ていて、定義を見ると純粋仮想関数があるので抽象クラス
となるのはわかるのですが、javaのメソッド修飾子であるabstract
が、なぜC++のクラス名の後についてるんでしょうか?
定義を見ても特にabstractという語句がついてはいないようです。
ただ、特別問題があるわけでは無いのですが、疑問に思ったので
どなたか知っている方がいれば教えていただきたいです。
0759デフォルトの名無しさん
2006/10/01(日) 22:59:28MFCを.NET(C++/CLI)化できるようにしてるんじゃない?
0760デフォルトの名無しさん
2006/10/02(月) 00:50:550761デフォルトの名無しさん
2006/10/03(火) 03:46:56_AFXWIN_INLINE UINT CWnd::SetTimer(UINT nIDEvent, UINT nElapse,
void (CALLBACK* lpfnTimer)(HWND, UINT, UINT, DWORD))
{ ASSERT(::IsWindow(m_hWnd)); return ::SetTimer(m_hWnd, nIDEvent, nElapse,
(TIMERPROC)lpfnTimer); }
の部分で引っかかるようなんですが、これって何が原因なのでしょうか?
SetTimer関数は、
m_nTimer = SetTimer(1, 2000, NULL);
のように呼んでいます。
0762デフォルトの名無しさん
2006/10/03(火) 06:14:04指定されたウィンドウハンドルを持つウィンドウが存在していない。
コンストラクタでSetTimerやってるとかじゃないかな。
0763質問者
2006/10/03(火) 21:17:04ReBarにPushButtonを配置したところ、デフォルトの状態で無効(灰色
文字)になっていました。
→そこでSubclassDlgItemで割り付けたCButtonのオブジェクトで、
EnableWindowを実行しましたが無効状態は解除されませんでした。
→EnableWindowをやめ、C***Appの下記のメッセージマップに習って、
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
下記を追加しました。(OnButton1はC***Appで自分で追加した関数)
ON_COMMAND(IDC_BUTTON1, OnButton1)
そうしたところPushButtonが初めて有効(黒文字)になりましたが、
ボタンをクリックしてもOnButton1に飛んできません。
状況は上記で、質問は下記です。(上記内容のほとんどですが・・・)
質問1 EnableWindowで何故有効にならないのか?
質問2 ON_COMMAND追加したら何故有効になったのか?
質問3 メッセージマップに追加したのに何故OnButton1に来ないのか?
どこか参考になるページでもあれば紹介お願いします。
尚、CButtonを継承したクラスのオブジェクトをSubclassDlgItemで割り付け、
そのクラス内からメッセージをMainFrameに投げることで、とりあえずその
場しのぎは出来ております。
0764デフォルトの名無しさん
2006/10/03(火) 22:01:44これだな
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_when_update_handlers_are_called.asp
>If the framework does not find an ON_UPDATE_COMMAND_UI entry during command routing,
>it automatically enables the user-interface object if there is an ON_COMMAND entry somewhere with the same command ID.
>Otherwise, it disables the user-interface object.
0765デフォルトの名無しさん
2006/10/03(火) 22:28:480766763
2006/10/03(火) 22:35:04フレームワークがEnable/Disableを自動的に設定してしまうといった意味
合いですね。ON_COMMAND(IDC_BUTTON1, OnButton1)を追加したとこ
ろまでは、手順として正しいということでしょうか?
後、質問3ですがOnButton1を普通の
void OnButton1();
で宣言していたことが原因でした。
メッセージ関数のところに
afx_msg void OnButton1();
と宣言したところ呼ばれるようになりました。お騒がせしてすいません。
(いつもClassWizardに頼ってばかりであまり自分で書いたことなかったです。)
>>764 さんどうもありがとう。
>>765
CButtonの継承先ではON_BN_CLICKEDを使ってます。
ただ、もう継承不要ですが・・・
0767デフォルトの名無しさん
2006/10/03(火) 23:30:05afx_msg付けたら呼ばれるようになることは多分ないと思うよ
定義見ればわかるけど
#define afx_msg
だから
ちなみに自分で書いたコマンドハンドラはやメッセージハンドラは
ディフォルトで灰色になる部分には書かないように
0768デフォルトの名無しさん
2006/10/04(水) 08:21:37x,y座標の最大値を取得するにはどうすればいいんですか。
0769デフォルトの名無しさん
2006/10/04(水) 09:24:20クライアント領域のサイズか?
0770デフォルトの名無しさん
2006/10/04(水) 09:31:03用語に自信がないけど、そういうことです。
本を見ながらためしに作ってみた
CSize siz;
CRect rct;
CWnd *wnd=GetDlgItem(IDR_MAINFRAME);
wnd->GetWindowRect(rct);
siz=rct.Size();
は5行目で実行エラーになります。
0771デフォルトの名無しさん
2006/10/04(水) 10:40:33が、ウィンドウの取得方法が間違っているに一票。
どのクラスからのアクセスか判らないと、答えの書きようがないが。
0772デフォルトの名無しさん
2006/10/04(水) 10:49:03なおprjはプロジェクト名が入ります。
0773デフォルトの名無しさん
2006/10/04(水) 11:18:30実行エラーとかじゃなくて、エラーメッセージとか出たんならコピペしてくれ。
0774デフォルトの名無しさん
2006/10/04(水) 11:23:12test1004.exeの0x7x2751d7(mfc70d.dll)でバンドルされてない例外が発生しました。
0x00000005:場所 0x00000020を読み込み中にアクセス違反が発生しました。
0775デフォルトの名無しさん
2006/10/04(水) 11:25:030776デフォルトの名無しさん
2006/10/04(水) 11:35:450777デフォルトの名無しさん
2006/10/04(水) 12:01:560778デフォルトの名無しさん
2006/10/04(水) 12:24:41CSize siz;
CRect rct;
GetClientRect(&rct);
CClientDC dc(this);
dc.MoveTo(0,0);
dc.LineTo(100,100);
dc.LineTo(rct.right,rct.bottom);
0779デフォルトの名無しさん
2006/10/04(水) 14:47:02OnClick内でSetTimerを呼ぶとエラーになるようなので、
タイマー専用のウインドウを生成して制御しようと思ったのですが
SDIなので複数のウインドウを扱うことが出来ません。。
これに代替する方法って何かありますか?
0780779
2006/10/04(水) 15:23:270781デフォルトの名無しさん
2006/10/05(木) 10:29:000782デフォルトの名無しさん
2006/10/06(金) 20:07:06Disable状態のEditBoxのFontColorが変更できないで困っています。どなたか方法をご存じないでしょうか?
VC++6.0/WinXPです
WM_CTLCOLORのメッセージハンドラを呼んで、
HBRUSH ChogeDlg::OnCtlColor(CDC* pDC ,CWnd* pWnd ,UINT nCtlColor)
{
if(pWnd == &m_HogeEdit){
pDC->SetTextColor(RGB(0,0,0));
}
:
}
# m_HogeEditはCEditクラスのコントロール変数で登録済み。
OnInitDialogでm_HogeEdit.EnableWindow(FALSE)にしてます。
みたいな感じでやってみたんですが変わらなかったです。
(背景色は同じやり方で変えられたんですが……)
0783デフォルトの名無しさん
2006/10/07(土) 01:56:33無理じゃないけど無理に近い。リッチエディットを薦める。
0784デフォルトの名無しさん
2006/10/07(土) 05:17:07CEditのサブクラスを作って、その中のOnPaint辺りで書けば出来そう。
でもDrawTextのフォーマットDT_EDITCONTROLを使っても
微妙にCEditとは違った気がする。何か間違ってたのかもしれないけど。
0785デフォルトの名無しさん
2006/10/07(土) 11:45:07出来ないと思う。
0786デフォルトの名無しさん
2006/10/07(土) 11:50:34ああ、部分的に変えたいんじゃなくて全体的に変えたいのかな?
「EditBox の色を変える」あたりでググってミソ。
0787デフォルトの名無しさん
2006/10/07(土) 12:53:39disableをやめてSetReadOnlyでやるとか
0788782
2006/10/07(土) 12:55:54そんなに難しい事なのでしょうか・・・。
よければその「無理に近い」やりかたのヒントでもいただけませんでしょうか?
>>784
SubclassにしてOnPaint()でやってみるのですか。試してみます。
(SubclassのOnCtlColorとかじゃなくていいのでしょうか?
まぁ、これもやってみてだめだったのですが・・・)
0789デフォルトの名無しさん
2006/10/07(土) 12:59:43786はやったの?
ちっとぐらい自分で調べてみては?
0790デフォルトの名無しさん
2006/10/07(土) 18:29:04一通り調査&実験済です。
というか、検索してもOnPaintとかOnCtlColorを使う方法しかなかったわけで。
Window Disableだとそれじゃかわらなかったわけで。
Win32 SDKのEnableWindow()のほうで、GrayStringをかけてるっぽいあたりまでは
あたりがついてるんですが、その実装がuser32.dllの中なんでわからない状態。
0791デフォルトの名無しさん
2006/10/08(日) 01:56:33784です。
CEditをDisableにしないやり方を考えたほうが良いと思うよ。
あの場合の文字色はGetSysColor(COLOR_GRAYTEXT)で得られる色で、文字通り
システムが持ってる色です。これを一アプリが変えて表示するのは好ましくない
気がする。あとCodeGuruとかCodeProject(MFC情報が充実してるサイト)でも782の
言うことは出来ないという記述があった。
どーーーしてもDisableにしたいならOnPaintで自力描画できます。
文字色が変わることも確認しました。ただマルチラインの時に全ての
文字をCEditの標準の描画と同じ位置に描く方法は自分には分からない。
> Win32 SDKのEnableWindow()のほうで、GrayStringをかけてるっぽいあたりまでは
これは自分では調べたことないけど、ちょっと信じ難い。
0792デフォルトの名無しさん
2006/10/08(日) 07:30:52ありがとうです。CodeGuruまで手を伸ばしきれなかったので助かりました。
別の実装方法を試してみます。
0793デフォルトの名無しさん
2006/10/08(日) 17:17:25MFCにそんな機能のクラスある?
ふつうにWin32 APIでいい?
0794デフォルトの名無しさん
2006/10/08(日) 18:43:58CreateProcess
とかでいいんでない。
0795デフォルトの名無しさん
2006/10/08(日) 18:58:48ありがと
0796デフォルトの名無しさん
2006/10/09(月) 01:10:37batはcmd(エミュ)を通さないと動かないから気を付けろ。
0797デフォルトの名無しさん
2006/10/12(木) 01:06:23アプリケーション上でカーソルの砂時計を禁止する
方法はありますか?
色々調べたところ
CWinApp::DoWaitCursor(int nCode)をオーバライドして
nCodeを-1にすれば禁止されるような情報を見つけて実装したのですが
そもそもこの関数が呼ばれませんでした。
どなたか方法をご存知でしたらヒントをお願いします。
0798デフォルトの名無しさん
2006/10/12(木) 01:30:410799デフォルトの名無しさん
2006/10/12(木) 01:58:500800デフォルトの名無しさん
2006/10/13(金) 02:25:43ダイアログのメンバ変数に一通り数値を代入した後に
表示を更新するためにUpdateData(FALSE)を実行すると、
wincore.cppの879行目、
// should also be in the permanent or temporary handle map
CHandleMap* pMap = afxMapHWND();
ASSERT(pMap != NULL);
に引っかかってしまいます。
ダイアログのメンバ変数への代入は、ダイアログクラスへのポインタdlgを使い、
dlg->m_X = x; dlg->m_Y = y;
のようにしています。その後に、
dlg->UpdateData(FALSE);
で上記のASSERTが出ます。
時間の経過と共に表示を更新させたいので、
上記はタイマーのコールバック関数の中に書いています。
また、SetTimerを使っているときは上の書き方でも正常に動いていたのですが、
マルチメディアタイマーのSetTimerEventを使うように書き換えたらこのようになりました。
何が原因なのでしょうか?わかるかた教えてください。お願いします。
0801デフォルトの名無しさん
2006/10/13(金) 03:09:43SetTimerのコールバックは、WM_TIMERがDefWindowProcで処理された結果呼び出される。
0802デフォルトの名無しさん
2006/10/13(金) 10:17:36>Applications should not call any system-defined functions from inside a callback function,
>except for PostMessage, timeGetSystemTime, timeGetTime, timeSetEvent, timeKillEvent,
>midiOutShortMsg, midiOutLongMsg, and OutputDebugString.
0803デフォルトの名無しさん
2006/10/13(金) 12:43:30>>802
ありがとうございます。
ということは、timeSetEventのコールバックでは特定の関数以外は呼べないということなんですね。
どのようにすれば>>800のような機能を実現できますか?
精度の問題上どうしてもマルチマディアタイマを使いたいので…。
0804デフォルトの名無しさん
2006/10/13(金) 15:22:54DBから名前・年齢・所属部署・ログイン日時・UserIdを取得して保持するクラスを作成しています。
ですが、これらのデータは検索方法によっては複数データが取得されることが想定されます。
このデータを管理する場合、どのようにクラスを作成すればよろしいでしょうか?
0805デフォルトの名無しさん
2006/10/13(金) 15:54:17いるのですが、コントロールによってツールチップの処理内容(表示位置など)
を変えたいと思っています。
WindowProcでWM_NOTIFYを拾ってTTN_SHOW(ツールチップの表示)をつか
まえるところまでは何とかわかったのですが、どのコントロールに対してツール
チップが表示されようとしているかを判断する方法はあるでしょうか?
NMHDR構造体がlparamで渡されて来ていて、hwndFromとidFromにそれぞれ
コントロールのハンドルとIDが入っているとのことなんですが、これらはどうも
ツールチップそのもののハンドルとIDのようなので。
0806デフォルトの名無しさん
2006/10/13(金) 16:06:10一人分の情報を扱うクラスを作り、複数人分のデータの管理には
CArray, CList, CMap などのコレクションクラスを利用する。
0807デフォルトの名無しさん
2006/10/13(金) 16:09:24回答ありがとうございます。
CArray, CList, CMapについて調べてみます。
0808デフォルトの名無しさん
2006/10/13(金) 17:02:570809デフォルトの名無しさん
2006/10/13(金) 20:02:09TTN_SHOWじゃないけどTTN_NEEDTEXTのサンプルコードがMSDNにのってて
そのなかにCtrlIDを特定する方法もあったよ。TTN_SHOWもそれと同じ感じでできる。
0811デフォルトの名無しさん
2006/10/13(金) 22:46:46Dialogクラスでリストボックスコントロールを配置しております。(複数選択可)
OnOKメソッド内で選択したリストの文字列を取得したいのですが
どのように記述したらよろしいでしょうか?教えてください。
(選択位置のインデックスを取得でもいいのですが)
よろしくお願いいたします。
開発環境 VS2005 WinXP SP2
環境はVC++ 2005、 WinXPHomeです。
MFCを使用しております。
CImage image;
image.Create(80, 30, 24);
CDC* pDC = CDC::FromHandle(image.GetDC());
CFont font;
CString test = "MS UI GOTHIC";
BOOL a = font.CreatePointFont(80, test);
test = "test";
pDC->SelectObject(&font);
pDC->DrawText(test, CRect(0, 0, 80, 30), DT_LEFT);
image.Save("test.gif");
image.ReleaseDC();
という、簡単なテストプログラムを作って、テスト文字列が表示されている画像ファイルを
作成する事に成功したのですが、test.gifのサイズを文字列ピッタリに合わせたいと思っています。
GetOutputTabbedTextExtentを使えば、文字列のサイズを取得できる事は分かっているのですが、
この関数を使う場合、先にCImageを作成する必要があり、必然的にCImageのサイズを文字列ピッタリ
に指定する事が出来ません。
どうすれば、文字列ピッタリサイズの画像を作る事が出来るのでしょうか。
よろしくお願いします。
0813デフォルトの名無しさん
2006/10/13(金) 23:47:14ttp://msdn2.microsoft.com/en-us/library/ds24bscf.aspx
0814デフォルトの名無しさん
2006/10/13(金) 23:49:12では今日日は何を薦めるのか聞きたい
0815デフォルトの名無しさん
2006/10/14(土) 00:07:120816デフォルトの名無しさん
2006/10/14(土) 01:14:430817デフォルトの名無しさん
2006/10/14(土) 02:31:28領域算出に必要なのはCImageじゃなくCDCでしょ?
画面の持つCDCで領域算出してからCImage作れば出来るんじゃないかな。
あとDrawTextで文字描くならDrawText自身で必要領域算出できる。
フォーマットにDT_CALCRECTが必要。文字列にTABを含むならDrawTextExのほうが良いかも。
CImageもGetOutputTabbedTextExtentも使ったことないので外してたらごめん
0818デフォルトの名無しさん
2006/10/14(土) 20:14:59コンボボックス、ラジオボタンをDisableにした場合の文字色をグレーから黒に変えようとしています。
OnCtlColor()でDisableの場合に文字色を変えたのですが、表示が変わりません。
どのようにしたら変わるでしょうか。
描画処理等に疎いので、なるべくオーナードローとかいうのは避けたいのですが…。
0819デフォルトの名無しさん
2006/10/14(土) 20:26:05代わりにStaticを置くのじゃ駄目か?
どうもです。考えてみれば、その通りでした……大ボケスイマセン。
どうも、ありがとうございます。
0821デフォルトの名無しさん
2006/10/16(月) 14:12:44STLではなくMFCのコンテナを勧めていいのは「頭の悪い発言」スレくらいのもの。
0822デフォルトの名無しさん
2006/10/16(月) 15:09:30今DialogクラスのボタンにBitmapを貼り付けているのですが
Bitmapだけではなくテキストも表示したいのです。
キャプションに設定しても表示されませんでした。
何かいい方法がありましたらご教授お願いいたします。
開発環境 VS2005 WinXP SP2
0823デフォルトの名無しさん
2006/10/16(月) 15:25:02・文字部分も含めて絵(bmp)にする。
・どちらかを自分で描画する。
・両方とも自分で描画する。
0825デフォルトの名無しさん
2006/10/23(月) 15:55:58便乗での質問をお許し下さい。
STLを使う場合、投げられてくる例外はCExceptionを継承していないと思うのですが、だと
CWinApp::ProcessWndProcException
なんかは使えないですよね?
アプリ全体で、未処理例外を捉えるための同等の機構を実装するにはどうしたらよいでしょう?
ダイアログベースだとDoModalをtryで括れば終わりなのですが・・・
0826デフォルトの名無しさん
2006/10/23(月) 16:07:44恐らくすごく初歩的な事ですがお許しください。
描画スペースの枠に沿って線を引きたい場合ってどうすればいいのでしょう?
例えばこちらの想定する640*480の描画スペースの枠を縁取る場合
PreCreateWindowでウィンドウの幅・高さを640と480にしても
そこで指定するのは描画スペースの大きさではないですよね
そのときのスペースの大きさに応じて自動で縁取りとかってできないですかね…
0827デフォルトの名無しさん
2006/10/23(月) 16:15:52GetClientRectでサイズ取得すればええやん
0828デフォルトの名無しさん
2006/10/23(月) 16:28:25初めて聞いた単語です・・・
ありがとうございます!検索して使ってみますね。
MFC使うのが初めてなんでかなり苦労してます…
0829デフォルトの名無しさん
2006/10/23(月) 16:46:450830デフォルトの名無しさん
2006/10/23(月) 16:51:34もちろんこれも初耳^^;
とりあえず検索します。 ありです。
0831デフォルトの名無しさん
2006/10/23(月) 17:11:150832デフォルトの名無しさん
2006/10/23(月) 20:22:43どのようにプログラミングすれば良いですか?
調べた限りでは WinInet を使うようですが・・・
どこかにサンプルコードはありませんか?
0833デフォルトの名無しさん
2006/10/23(月) 21:11:37いきなり送信とか言い出すやつには教えてやらない方がいい
0834デフォルトの名無しさん
2006/10/23(月) 21:54:07ウィンドウの生成されるとき、メニューはいつ繋げられるんでしょうか
ウィンドウが画面上に描画されるとき、クライアント領域を正方形にするために
メニューのRectサイズを知りたいので
GetMenu(); でハンドル取って
GetMenuItemCount(); メニューの数かぞえて
GetMenuItemRect(NULL,CMenu,0,RECT); で一つあたりの高さ幅を調べて
で、ウィンドウとの差分で正方形にしようとしてるんですが(あってるかどうかわかりませんが)
どのメソッドか、コンストラクタか、それらがさっぱりわかりません。
申し訳ないですが、わかる方、教えていただきたいです。
あと、SDKのMainの第一引数のHINSTANCEにあたる値の物は無いんでしょうか
初心者すぎてすみません。
0835デフォルトの名無しさん
2006/10/23(月) 21:59:250836デフォルトの名無しさん
2006/10/23(月) 22:04:19気のせいか?
0837デフォルトの名無しさん
2006/10/24(火) 20:18:24DWORD dwHttpRequestFlags = INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE;
pFile = pHttpConnection->OpenRequest(CHttpConnection::HTTP_VERB_GET,
strObject, NULL, 1, NULL, NULL, dwHttpRequestFlags);
というような形で、呼び出して、サーバ側の test.cgi で、
print "Location: http://www.xxxxx/runfile.exe";
としたきとに、クライアント側で、 runfile.exe のファイル名を知るには
どうすれば良いでしょうか?
pFile->QueryInfo(HTTP_QUERY_CONTENT_LENGTH, str); ファイルサイズ
pFile->QueryInfo(HTTP_QUERY_LAST_MODIFIED, str); ファイルのタイムスタンプ
などは、取得出来るのですが...
str = pFile->GetFileName();
str = pFile->GetObject();
str = pFile->GetFileURL();
などでは、元の strObject 内にある文字列が入っています。
0838デフォルトの名無しさん
2006/10/24(火) 20:19:040839デフォルトの名無しさん
2006/10/24(火) 21:24:34その前にQueryInfoStatusCodeが301や302なのを確認するべきじゃないかと思うけど、
Locationヘッダを読み取るのはQueryInfo(HTTP_QUERY_LOCATION,〜)かと。
0840デフォルトの名無しさん
2006/10/24(火) 21:32:460841デフォルトの名無しさん
2006/10/24(火) 22:43:36> >>837
> その前にQueryInfoStatusCodeが301や302なのを確認するべきじゃないかと思うけど、
QueryInfoStatusCode は、200 がかえってきてます。
> Locationヘッダを読み取るのはQueryInfo(HTTP_QUERY_LOCATION,〜)かと。
これは、 空文字です。
ファイルの実体は、きちんと取れてます。
0842デフォルトの名無しさん
2006/10/24(火) 23:08:08その辺のデバッグのやり方知らないとつらいものがあるな
0843デフォルトの名無しさん
2006/10/24(火) 23:26:460844837
2006/10/25(水) 01:24:43HTTP_QUERY_ECHO_HEADERS_CRLF をチェックしても、
ファイル名は入ってないんですよね。
ちなみに、 WinInet.h 中の HTTP_QUERY_xxxx は
全て試したけど、ファイル名は無かった。
どこにあるんだろ?
0845デフォルトの名無しさん
2006/10/25(水) 02:15:11処理をしなきゃいけないのかも。
0846デフォルトの名無しさん
2006/10/25(水) 07:40:38などの盤をVC++2005のMFCで作る場合、何を使うのがよろしいでしょうか。
エクセルのVBAで作ったのをVC++に移植しようとして、いきなり迷ってます。
参考
http://www.nikoli.co.jp/ja/puzzles/sudoku/
0847デフォルトの名無しさん
2006/10/25(水) 08:13:49ダイアログモデルで必要なだけべたべたとボタンを貼り付けるのはどうだろう。
個性を出したければピクチャボタンにすればいいのだし。
#あ、交点を使う囲碁には使いにくいか。その場合は十字を書いたボタンかな。
0848デフォルトの名無しさん
2006/10/25(水) 08:26:44すみません、囲碁は例として適当でなかったです。
今エクセルで作っているのはナンバーズプレイスで、駒は桝目の中に収まります。
9×9の盤面ですから81個のボタンを並べるということですか。それとも
盤面はピクチャーコントロールで作ってCDCやなんかで描画するのがいいですか。
別の例
http://www.oct.zaq.ne.jp/woodside/jsudok/jsudok001.html
お題のアンカーをクリックします。
0849837
2006/10/25(水) 17:31:22> INTERNET_FLAG_NO_AUTO_REDIRECTを指定して、全部自分でリダイレクトの
これだと、 QueryInfoStatusCode が 302 になって、
HTTP_QUERY_LOCATION で ファイル名を含むURL が取れます。
ファイル実体の転送処理はこれだけでは実行されないので、
再度 AfxParseURL にこの URL を指定して、
GetHttpConnection OpenRequest で
ファイルの実体の読み出しとなりますね。
ありがとうございました。
0850デフォルトの名無しさん
2006/10/25(水) 19:28:44自動的に変換してくれる API ってありませんか?
つまり、Content-Type などのヘッダを生成して
その後にデータを付けるような形式にです
0851デフォルトの名無しさん
2006/10/25(水) 19:44:450852834
2006/10/26(木) 00:59:47ウィンドウのクライアント領域を初期化するためにCalcWindowRectってのがあったので
Viewクラスでオーバーライドしたんですが、めちゃめちゃな形になってしまいました。
msdnを見たんですが、createが呼ばれるときにこのクライアント領域を参照する
と書いてあったのですが、たぶんShowWindowが呼ばれた後にCalcWindowRectが呼ばれて
UpdateWindowされてると思うんですが、オーバーライドのする場所が間違ってるんでしょうか
それより、もっと簡単な方法があるんでしょうか。
申し訳ないですが、どなたか教えてください。
0853デフォルトの名無しさん
2006/10/26(木) 02:13:28自分で描画したいならMFCを使うまでもない希ガス。
MFCっぽさを味わいたいならボタンを81個並べるのが手っ取り早くていいかなと。
漏れはMineSweeperクローンをいろんなプラットフォームで作ったけど、
GUI部分を巧く分離できれば核の部分はどれでも共通にできたけどね。
#MineSweeperは最低クリックだけでいいけど、数独はフォーカスと数値入力か。ちと面倒だね。
0854デフォルトの名無しさん
2006/10/26(木) 03:00:38>ウィンドウのクライアント領域を初期化するためにCalcWindowRect
CalcWindowRectのは用途が違ってる気がする。アプリ全体はどういう姿をしていて
その中のどのウィンドウのクライアント領域をどうしたいの?
>Viewクラスでオーバーライドしたんですが、めちゃめちゃな形になってしまいました。
めちゃめちゃな値をセットしたせいだと思う。
0855834
2006/10/26(木) 03:58:04すみません。
何か作ってみようと思って
何かの関数のプロッタを作ろうと思ってるんです。
で、正方形のクライアント領域が欲しくて
悩んでます。
フレーム自体の高さ幅位置やクライアント領域の座標の取り方等はわかるんですが
初期画面を正方形にする方法がわからないです。
どうかお知恵を拝借さしてください。
0856デフォルトの名無しさん
2006/10/26(木) 04:20:070857デフォルトの名無しさん
2006/10/26(木) 06:14:01クライアント領域のサイズを求める
希望のクライアントサイズとの差分を計算
ウインドウサイズを調整
0858デフォルトの名無しさん
2006/10/26(木) 08:24:012分割発言の1
確かに9×9の盤面はボタンを格子状に配置する事が手っ取り早そうですね。
【メイン画面イメージ】
A B C D E F G H I
┏━┯━┯━┳━┯━┯━┳━┯━┯━┓
┃ 9│ │ ┃ 6│ │ 8┃ │ │ 4┃ 1
┠─┼─┼─╂─┼─┼─╂─┼─┼─┨
┃ │ 8│ ┃ 5│ │ 4┃ │ 6│ ┃ 2
┠─┼─┼─╂─┼─┼─╂─┼─┼─┨
┃ │ │ ┃ │ 7│ ┃ │ │ ┃ 3
┣━┿━┿━╋━┿━┿━╋━┿━┿━┫
┃ 5│ 3│ ┃ │ 4│ ┃ │ 8│ 9┃ 4
┠─┼─┼─╂─┼─┼─╂─┼─┼─┨
┃ │ │ 7┃ 9│ │ 6┃ 3│ │ ┃ 5
┠─┼─┼─╂─┼─┼─╂─┼─┼─┨
┃ 4│ 6│ ┃ │ 8│ ┃ │ 2│ 7┃ 6
┣━┿━┿━╋━┿━┿━╋━┿━┿━┫
┃ │ │ ┃ │ 2│ ┃ │ │ ┃ 7
┠─┼─┼─╂─┼─┼─╂─┼─┼─┨
┃ │ 9│ ┃ 3│ │ 1┃ │ 5│ ┃ 8
┠─┼─┼─╂─┼─┼─╂─┼─┼─┨
┃ 6│ │ ┃ 4│ │ 5┃ │ │ 3┃ 9
┗━┷━┷━┻━┷━┷━┻━┷━┷━┛
0859デフォルトの名無しさん
2006/10/26(木) 08:25:47あと、ヘルプ情報として以下のような可能性リストもエクセル版をVCに移行したいのですが
あるデータを格子構造に簡単に表示する方法はないでしょうか。
【可能性リスト】
A B C D E F G H I
┏━━━━┯━━━━┯━━━━┳━━━━┯━━━━┯━━━━┳━━━━┯━━━━┯━━━━┓
┃9 . . . . . . .│1257 . . . .│1235 . . . .┃6 . . . . . . .│13 . . . . . .│8 . . . . . . .┃1257 . . . .│137 . . . . .│4 . . . . . . .┃1
┠────┼────┼────╂────┼────┼────╂────┼────┼────┨
┃1237 . . . .│8 . . . . . . .│123 . . . . .┃5 . . . . . . .│139 . . . . .│4 . . . . . . .┃1279 . . . .│6 . . . . . . .│12 . . . . . .┃2
┠────┼────┼────╂────┼────┼────╂────┼────┼────┨
┃123 . . . . .│1245 . . . .│123456 . .┃12 . . . . . .│7 . . . . . . .│239 . . . . .┃12589 . . .│139 . . . . .│1258 . . . .┃3
┣━━━━┿━━━━┿━━━━╋━━━━┿━━━━┿━━━━╋━━━━┿━━━━┿━━━━┫
┃5 . . . . . . .│3 . . . . . . .│12 . . . . . .┃127 . . . . .│4 . . . . . . .│27 . . . . . .┃16 . . . . . .│8 . . . . . . .│9 . . . . . . .┃4
┠────┼────┼────╂────┼────┼────╂────┼────┼────┨
┃128 . . . . .│12 . . . . . .│7 . . . . . . .┃9 . . . . . . .│15 . . . . . .│6 . . . . . . .┃3 . . . . . . .│14 . . . . . .│15 . . . . . .┃5
┠────┼────┼────╂────┼────┼────╂────┼────┼────┨
┃4 . . . . . . .│6 . . . . . . .│19 . . . . . .┃1 . . . . . . .│8 . . . . . . .│3 . . . . . . .┃15 . . . . . .│2 . . . . . . .│7 . . . . . . .┃6
┣━━━━┿━━━━┿━━━━╋━━━━┿━━━━┿━━━━╋━━━━┿━━━━┿━━━━┫
0860デフォルトの名無しさん
2006/10/26(木) 08:55:15初心者用のスレは他にある
0861デフォルトの名無しさん
2006/10/26(木) 22:22:37MFCプログラミングを始めたばかりのものです
CAsyncSocketを使い、サーバからHTMLを取得しようとしていますが、
OnRecvでイベントがきません
googleで調べていますが
Reciveされない理由がわかりません
ソースをupしますので
どこに問題があるのか教えていただけますでしょうか?
http://downloads.myphotos.cc:8080/up1/src/FancyFree0461.txt
0862デフォルトの名無しさん
2006/10/26(木) 23:00:390863デフォルトの名無しさん
2006/10/27(金) 00:55:12Send()すべし
0864デフォルトの名無しさん
2006/10/27(金) 01:42:50逆に素のWinSock使うかどちらかにすればいいのに、とか思った。
CSocket/CAsyncSocketって使いにくくない?
0865デフォルトの名無しさん
2006/10/27(金) 02:00:39自分好みのインターフェースにはできるけど
0867デフォルトの名無しさん
2006/10/27(金) 15:42:29MultiLineをtrueにしてWant Returnをfalseにすることで、
折り返して表示するがenterは効かさないというのは実現できたのですが、
改行含む文字列をコピーペーストすると、改行コードが含まれたままエディットにコピーされてしまいます。
プロパティだけでは、複数行表示&改行コードは許可しない、というのは無理なのでしょうか。
0868デフォルトの名無しさん
2006/10/29(日) 06:16:48今までダイアログベースのMFCアプリしか作ったことがないのですが、
これもダイアログで実現可能でしょうか。
それともSDIとかMDIで作らないとでしょうか。
0869デフォルトの名無しさん
2006/10/29(日) 08:42:430870868
2006/10/29(日) 14:40:43う、やっぱりそうですか。
行き当たりばったりで必要最低限を調べながらやってきましたが、そろそろ限界なわけですね・・・
ありがとうございます。
0871デフォルトの名無しさん
2006/10/29(日) 15:38:17ドキュメントビューアーキテクチャを切ったSDIがお勧め。
0872デフォルトの名無しさん
2006/10/29(日) 16:25:500873868
2006/10/29(日) 17:17:28レスありがとうございます。
一応、どちらでも可能なんですね。
それぞれの線で色々調べてみます。
重ねてありがとうございました。
0874デフォルトの名無しさん
2006/10/29(日) 17:32:12ダイアログベースでもメニューやツールバーつけれるけど
0875デフォルトの名無しさん
2006/10/29(日) 18:07:13ウインドウの大きさを可変にしたり、表示した画像を印刷するのなら
SDIの方が楽。この機会にSDI使ってみたら?
ダイアログの操作に慣れてるならReBar付きがお勧め。
0876デフォルトの名無しさん
2006/10/30(月) 13:40:49メインメニューから静的分割ウィンドウを作成、表示するために
以下のようなコードを記述してみました。
void testMainFrm::OnNewView()
{
m_wndSplitter = new CSplitterWnd;
CCreateContext cContext;
cContext.m_pCurrentDoc = GetActiveDocument();
if (!m_wndSplitter->CreateStatic(this, 2, 1)){
return;
}
//ビューを作成
if (!m_wndSplitter->CreateView(0, 0, RUNTIME_CLASS(testView1), CSize(100, 300), &cContext) ||
!m_wndSplitter->CreateView(1, 0, RUNTIME_CLASS(testView2), CSize(0, 300), &cContext))
{
m_wndSplitter->DestroyWindow();
return;
}
//表示処理?
}
おそらくはViewを表示する処理などがいると思うのですがよく分かりませんでした。
間違いもしくは足りない処理などありましたら教えてください。
よろしくお願いします。
0877デフォルトの名無しさん
2006/10/30(月) 14:09:280878デフォルトの名無しさん
2006/10/30(月) 16:01:57サンプルを確認しましたが、難しくて理解できませんでした。
もう少し分かり易いサンプルなどありませんでしょうか?
厚かましいとは思いますがよろしくお願いします。
0879デフォルトの名無しさん
2006/10/30(月) 18:29:33MDIだスプリッタだと言ってるのが間違い
0880デフォルトの名無しさん
2006/10/30(月) 20:06:12ただ何故ぐぐらないのかは理解に苦しむ
0881デフォルトの名無しさん
2006/10/30(月) 20:50:06それ以上仕方ないのでは?
ここが分からないとか言うのだったら、説明のしようもあるけど、
全体が何がなんだか分からないんじゃ、
やめといた方が良いんじゃないかと思うね。
もうちょっと、少しでも分かるようなことから始めた方が、良いよ。>878
0883867
2006/10/31(火) 16:22:370884デフォルトの名無しさん
2006/10/31(火) 17:01:300885デフォルトの名無しさん
2006/11/01(水) 00:16:09Ctrl+Enterで改行入っちゃうわけだが。
0886デフォルトの名無しさん
2006/11/01(水) 05:38:16プロパティだけじゃ無理だと思う。
サブクラス作って色々やれば出来そうな気がするけど
クリップボードに改行込みのテキストが入ってた場合どうするかとか
Ctrl+Z(Undo)とか考えると結構面倒かも。
あと昔の話なので今はどうか知らないけど、改行無しで長いTextを扱うと
CEditの動作が重たくなってた。1文字挿入に2秒とか。
0887デフォルトの名無しさん
2006/11/03(金) 00:04:19List Control のレポートビューで、
項目をクリックしたときに一行全体が選択されるようにしたいです。
オーナードロー、CListCtrlの派生クラス、DrawItemのオーバーライドまで辿り着いたのですが、
文字列の描画がうまくいきません。
pDC->DrawText(L"test", &rect, ・・・
として、"test"の文字列はリストの項目の数だけ表示されたのですが、
リストの項目にある文字列を取得するにはどうすればいいのでしょうか。
0888デフォルトの名無しさん
2006/11/03(金) 00:46:360889デフォルトの名無しさん
2006/11/03(金) 08:13:48昔のソースが通らない・・・
0890デフォルトの名無しさん
2006/11/03(金) 08:22:08通る
>メッセージディスパッチ関数の引数とか変わってる?
知らん
0891デフォルトの名無しさん
2006/11/03(金) 09:25:46戻り値がLRESULTのはずがvoidになっているに一票。
2002で仕様が変更され、厳密にチェックされるようになった。
0892デフォルトの名無しさん
2006/11/03(金) 15:42:30CMultiDocTemplateを使用し、新しい子ウィンドウを作成しました。
この子ウィンドウのタイトルを変更したいのですがどのようにしたら
良いか分かりません。教えてください。
環境はVS2005です。よろしくお願いします。
0893デフォルトの名無しさん
2006/11/03(金) 16:43:420894デフォルトの名無しさん
2006/11/03(金) 17:10:00OnCreateCliant内で設定出来ました。
どうもです。
0895デフォルトの名無しさん
2006/11/05(日) 12:11:31最近MFCプログラミングを始めたばかりのものです。
VC++6.0 MFC
構成の設定でデバッグ版だとすんなりビルドできるのですが、リリース版だと以下のエラーが出て困ってます。
--------------------------------------------------------------------------------
E:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE\afxwin2.inl(169)
: error C2664: 'SetTimer' : 4 番目の引数を 'void (__stdcall *)(struct HWND__ *
,unsigned int,unsigned int,unsigned long)' から 'unsigned long'
に変換できません。 (新しい機能 ; ヘルプを参照)
この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。
---------------------------------------------------------------------------------
MFC AppWizardを使用し作成されたソースに手を加えない状態でのビルドです。
どなたかお分かりになる方、ご教授願います。
0896デフォルトの名無しさん
2006/11/05(日) 12:17:14VCのサービスパックは当てた?
0897デフォルトの名無しさん
2006/11/05(日) 12:39:070898デフォルトの名無しさん
2006/11/05(日) 13:57:42レスありがとうございます
やはり再インストールですかね。。。
myパソじゃないんで(借物ノート)、VCも持って無いし・・・
明日、パソ換えて試してみます
0899デフォルトの名無しさん
2006/11/05(日) 16:49:580900デフォルトの名無しさん
2006/11/05(日) 17:43:440901デフォルトの名無しさん
2006/11/05(日) 18:29:03C#だとDataGridViewをフォームに貼り付けるだけなんですが
VC++だとどこに何を貼るかわかりません。
0902デフォルトの名無しさん
2006/11/05(日) 18:32:560903デフォルトの名無しさん
2006/11/06(月) 14:21:22ウィンドウを表示するUIスレッドをAfxBeginThreadで作成したのですが、
m_bAutoDeleteをFALSEにした場合、スレッド内部から終了するためには、
そのスレッドのポインタのdeleteはどこでやるものなのでしょうか。
ウィンドウのOnCloseのタイミングなど、どこでやっても
「自分の属するスレッドをdelete」になりそうなのですが、
どこでやれば安全に削除できるものなのでしょうか。
よろしくお願いいたします。
0904デフォルトの名無しさん
2006/11/06(月) 14:34:05安全に削除できるのはMFCだけ。
0905デフォルトの名無しさん
2006/11/06(月) 16:12:42ということは、m_bAutoDeleteをFALSEにしてしまったら
スレッド自身からはdeleteできないということですか?
「×」が押されたら自分自身を終了させたいんですけど。
0906デフォルトの名無しさん
2006/11/06(月) 16:29:550907デフォルトの名無しさん
2006/11/06(月) 19:01:55m_bAutoDeleteをTRUEにしてから終了させればいいじゃん
0908デフォルトの名無しさん
2006/11/06(月) 19:02:26afxなにがしって事前コンパイルみたいなのをやってくれる機能じゃね?
それがリリースだとうまくはたらかねえのかも。
0909デフォルトの名無しさん
2006/11/06(月) 19:17:49>>907
そうか、スレッド内部から終了するときには、ウィンドウのOnCloseとかで
m_bAutoDeleteをTRUEにセットしなおしてしまえばいいんですね。
そうすれば勝手に内部で死んでくれると。
ありがとうございます。
0910デフォルトの名無しさん
2006/11/07(火) 01:57:38Recieveが終わったタイミングがわかりません。
どのようにして終わったのかを知る方法は無いのでしょうか?
0911デフォルトの名無しさん
2006/11/07(火) 10:10:14そこでrecvするんだよ
0912デフォルトの名無しさん
2006/11/07(火) 10:57:15もうひとつ疑問点が出てきてしまったのですがよろしいでしょうか。
スレッド外部から終了する場合、
PostThreadMessageでWM_QUITを送ればとりあえず終了するんですけど、
ウィンドウが正常に破棄されていないようで、メモリダンプしてしまいます。
かといって、独自のメッセージをPostThreadMessageして、
その中でウィンドウを破棄するように組み込むと、
ウィンドウがメッセージボックスを出していたりしたら、
メッセージを受け取ってくれないままです。
とりあえず、スレッドのExitInstanceの中で
「ウィンドウが残っていたら(スレッド外部から削除されてここに来たら)破棄」
とやれば動くようなんですけど、
ウィンドウが存在するままExitInstanceに来てもよいものなのか不安です。
もっとスマートな方法ってありますでしょうか。
0913デフォルトの名無しさん
2006/11/07(火) 11:12:140914デフォルトの名無しさん
2006/11/07(火) 12:40:49ウィンドウにpostしても、メッセージボックスやファイルダイアログとかを
モーダルで出してると、それを終わらせない限りメッセージが届かないですよね?
そういうものが出ていても必ずその場で別スレッドからウィンドウを削除するには、
どうやればよいのでしょうか…。
0915デフォルトの名無しさん
2006/11/07(火) 12:43:440916デフォルトの名無しさん
2006/11/07(火) 13:00:160917デフォルトの名無しさん
2006/11/07(火) 13:01:54届くよ
0918デフォルトの名無しさん
2006/11/07(火) 13:34:24メッセージボックスやモーダルダイアログが出たままでも終了できました。
難しいですね。もうちょっといろいろ試してみます。
ありがとうございました。
0919デフォルトの名無しさん
2006/11/07(火) 14:12:23おかげさまでなんとか動いています。
CFileDialog dlg(TRUE);
dlg.DoModal();
dlg.DoModal();
dlg.DoModal();
となっていた場合、1回目のDoModalの最中に外部スレッドから終了させると、
2回目のDoModalが呼ばれたときに返ってこなくなってしまいますね…。
とりあえず1回目のDoModalが終わったあとに
「フレームウィンドウが死んでたらその場でreturn」
とやれば回避できましたけど、外部スレッドから終了されることを前提にすると、
こんな途中終了の処理が次々と出てくるものなのか…。
UIスレッドは面倒くさい…。
0920ほーむ
2006/11/07(火) 14:17:38しりませんか?
0921デフォルトの名無しさん
2006/11/07(火) 14:19:21やり方として、自前の終了メッセージを投げて。
それを受けて、終了フラグを立てたり、自分にWM_CLOSEを投げたりとかの方法もあるね。
0922デフォルトの名無しさん
2006/11/09(木) 11:48:501回目や2回目のDoModalの直後に
if (!IsWindow(フレームウィンドウのハンドル)) {
return;
}
を入れておきました。
処理的には終了フラグと同じですよね。
0923デフォルトの名無しさん
2006/11/10(金) 06:32:29どうすれば良いでしょうか?
InsertItem(1, "AAA\r\nBBB");
としたときに、
AAA
BBB
と表示されたいのです。
よろしくお願いします。
0924デフォルトの名無しさん
2006/11/10(金) 11:28:21通常は無理。
改行を含むカラムと含まないカラムの高さが同じで良いのなら
オーナードローでいける。
0925デフォルトの名無しさん
2006/11/10(金) 14:35:29フォームビューに当グリッドを二つ配置し、このグリッド間で
値の受け渡し(DragDrop)を行うため、グリッドAにBeforeMouseDownイベント
を実装し、イベント内でDragRowメソッドを実行。グリッドBにBeforeMoveRowイベント
を実装し、グリッドAで選択されている行を取得しようとしたのですが
グリッドBのBeforeMoveRowイベントが実行されません。
ググってみても情報が極端に少なく、わからずじまいです。
なのでどなたかわかる方いましたらお教え願います。
環境は Visual C++ 2005です。よろしくお願いします。
0926デフォルトの名無しさん
2006/11/10(金) 15:06:42それならサポートに聞け。
0928デフォルトの名無しさん
2006/11/11(土) 07:47:35普通のサイズ→最大化
のタイミングはOnSizeでとれるんですけど、
最大化→普通のサイズ
のタイミングはどうしたらいいのでしょうか?
0929デフォルトの名無しさん
2006/11/11(土) 08:08:030930デフォルトの名無しさん
2006/11/11(土) 08:36:31最大化→普通のサイズ
両方OnSizeにくるし、パラメータ見れば区別つくけど
何が問題?
0931デフォルトの名無しさん
2006/11/11(土) 09:28:330932デフォルトの名無しさん
2006/11/11(土) 20:26:05それでいこうと思います。
ただ、なんか最大化でフラグ立てっ放しになって、自分の思ったとおりのメッセージがこないでおかしくならないか不安でした。
>>930
>>931の人が言うように
最大化→普通のサイズ
普通のサイズ→普通のサイズ
の区別がつかないのが不安要素でした。
0933デフォルトの名無しさん
2006/11/12(日) 23:25:03OnSizingとOnSizeがくるタイミングがいまいちよくわからないのも問題ですかね。
ウィンドウのサイズ変更中でもOnSize来ますし。
サイズ変更中→OnSizing
サイズ変更後→OnSize
ならわかりやすいのですが、そうなっていないようなので・・・。
0934デフォルトの名無しさん
2006/11/12(日) 23:31:49にチェックが入っているかどうかで、そのメッセージが呼ばれる時が違ってくると思う。
0935デフォルトの名無しさん
2006/11/14(火) 08:40:01picture boxに連続して表示させることでアニメーション出力しています。
ちらつき防止のため、バックバッファを入れたいのです。
色々なところで紹介されている方法を試しましたが、防止できませんでした。
プログラム中の任意の場所で、m_pctbox(ピクチャボックスのコントロール変数)のみ
バックバッファを入れた再描画処理を行えればよいと思うのですが。
ご教授願えませんか?
0936デフォルトの名無しさん
2006/11/14(火) 10:00:570937デフォルトの名無しさん
2006/11/14(火) 10:38:43.NETの話してるのかな。
0938デフォルトの名無しさん
2006/11/14(火) 11:15:250939デフォルトの名無しさん
2006/11/14(火) 11:25:21アニメコントロールというのもあるらしい
新Visual C++入門スーパービギナー編 Ver.6対応版
http://shop.sbcr.jp/isbn/0975/mokuji.htm
■Chapter 14 その他のVisual C++の機能をみてみよう
14.1 ボタン
14.2 エディットボックス
14.3 チェックボックス
14.4 ラジオボタン
14.5 グループボックス
14.6 スタティックテキスト
14.7 ピクチャボックス
14.8 リストボックス
14.9 アニメコントロール
14.10 スピンボタン
14.11 プログレスバー
14.12 スクロールバー
14.13 スライダ
14.14 コンボボックス
14.15 拡張コンボボックス
0940935
2006/11/14(火) 12:51:48試してみたのは、
http://orangeknowledge.jpn.org/tips/mfc015.html
http://www.takebay.net/~daigo-ao/paddlewiki.pl/title_43A1DCA1DC2054697073.html
http://plaza.harmonix.ne.jp/~fakira/cppdoc/mstips.htm
あたりです。
ピクチャボックスの件は、938さんのご指摘の通りです。
そもそも画像の表示にこのコントロールを使わないほうがいいのかな。
0941デフォルトの名無しさん
2006/11/14(火) 13:51:100942デフォルトの名無しさん
2006/11/14(火) 14:08:47まだ説明不足
勝手な予想で書いてみる。
CFormViewにCStaticを貼り付けてCFormViewのOnDrawあたりで描画してるとしたら
上の3つのサイトのどれにも該当しないし、ちらつきは無くならない。
その場合CStaticのサブクラスを作ってその中で1番目のサイトのやりかたになる。
CStatic使わずViewに直接描くなら2-3のサイトのやり方。
0943935
2006/11/14(火) 18:22:38その方法です。
すごいヒントになりました。
Viewに直接書く方法で試してみたいと思います。
ありがとうございます。
0944デフォルトの名無しさん
2006/11/15(水) 00:16:270945デフォルトの名無しさん
2006/11/15(水) 00:50:020946デフォルトの名無しさん
2006/11/15(水) 00:51:070947デフォルトの名無しさん
2006/11/15(水) 01:04:060948デフォルトの名無しさん
2006/11/15(水) 02:20:420949デフォルトの名無しさん
2006/11/15(水) 08:56:040950デフォルトの名無しさん
2006/11/15(水) 11:43:21リソースでダイアログ上にタブを貼り付けて、そのダイアログ用のクラスを作り、
OnInitDialog() にて
m_tab.SubclassDlgItem(IDC_TAB, this);
とする方法と、タブのリソースを用いずに、
m_tab.Create(WS_CHILD | WS_VISIBLE, CRect(0, 0, 0, 0), pParentWnd, 123);
としてやる方法とでは、後者のほうだと、タブの部分のフォントが、大きくなって
しまいます。これ、何が原因なんでしょうか。
0951デフォルトの名無しさん
2006/11/15(水) 11:52:540953デフォルトの名無しさん
2006/11/15(水) 12:48:190954デフォルトの名無しさん
2006/11/16(木) 01:23:31同梱するべきDLLファイルは何なんでしょうか?
ヘルプを見てみるとMFCx0.dllとMsvcrt.dllと書いてありました。
MFCx0.dllはMFC80.dllの事だと思うのですが正しいでしょうか?
それとMFC80U.DLLやMsvcr80.dll等似た名前のファイルはあったのですがまったく同じ名前のファイルが見つかりませんでした。
このような場合どうすればよいのでしょうか?
vecterで検索しても6.0までしか対応していないMFC42.DLLとMSVCRT.DLLしか見つからなくて
0955デフォルトの名無しさん
2006/11/16(木) 01:40:300956デフォルトの名無しさん
2006/11/16(木) 01:45:10http://msdn2.microsoft.com/ja-jp/library/zebw5zk9(VS.80).aspx
必要なDLLはおそらくMFC80.DLLとMSVCR80.DLL
http://msdn2.microsoft.com/ja-jp/library/8kche8ah(VS.80).aspx
アプリケーションにDLLを同梱するのは、プライベートアセンブリとしての配置に該当する。
http://msdn2.microsoft.com/ja-jp/library/ms235291(VS.80).aspx
あるいはランタイムのパッケージも存在する。
http://www.microsoft.com/downloads/details.aspx?FamilyID=32bc1bee-a3f9-4c13-9c99-220b62a191ee&DisplayLang=ja
0957デフォルトの名無しさん
2006/11/17(金) 00:03:22わざわざありがとうございます。
素人なんでいまいちよく分かりませんがそれを読んで少しずつでも理解していこうと思います。
0958デフォルトの名無しさん
2006/11/17(金) 02:51:24とあるソースを、MFCをデバッグ時に、ダイナミックリンクとスタティックリンクの
2つでコンパイルしてみたところ、スタティックだとうまくいくのに、
ダイナミックリンクだとランタイムエラーで止まってしまいます。
hoge.exe の 0x7c9a4ed1 でハンドルされていない例外が発生しました: 0xC0000005: Access violation
実は、商用ライブラリを用いており、その中で止まっている可能性もあります。
(デバッガで止まった場所を見てみても、あてにならない場所で止まっています)
ダイナミックリンクだと、うまくいかず、スタティックリンクだとうまくいく、というのは
よくあることなんでしょうか?
0959デフォルトの名無しさん
2006/11/17(金) 02:54:59DLLが違うメーカーでコンパイルされた物の場合、呼び出し規約が
違う事があるだろ。特にコールバック関数は注意。
渡すパラメータが極めて簡単な物は問題が出にくい。
0960958
2006/11/17(金) 03:09:50このライブラリは商用ライブラリで、このPCでコンパイルしたDLLを
使用しており、ある条件だと、うまく動作します。
その条件というのが、まだ調べているところなのですが、とある
クラス(CTabCtrl)の派生クラスのさらに派生クラスのコンストラクタを
呼ぶと(newしてみると)、ランタイムエラーになります。
このクラスたちで、商用ライブラリを使用しているものは一切無く、
止まっている場所も、
0961958
2006/11/17(金) 03:12:06止まっている場所も、わけのわからないところで、
new の行に break point を仕掛けても、飛んでくれません。
そこで、CTabCtrl の派生クラスの、デフォルトコンストラクタを
削除してみたところ、動いてくれたりします。
なんかコンパイラのバグぽい気がしてきました。
0962デフォルトの名無しさん
2006/11/17(金) 03:13:38その商用ライブラリのソースは付いてる?同じコンパイラでコンパイルして
生成したDLLなら問題ないだろ。
俺は多分DLLを生成したコンパイラが違うせいではないかと疑ってる。
前にも同じような事を聞いたことがあるもんで。
0963デフォルトの名無しさん
2006/11/17(金) 03:15:42同じだと思うんですが(タスクマネージャでのぞいたらcl.exe)、バージョンなんかが
違うかもしれないので、ちょっと調べてみます。
0964デフォルトの名無しさん
2006/11/17(金) 03:19:09しないようにした方がいい。DLLは出来るだけ簡単なインターフェース
にしぼり、DLL内で仕事が完結するようにコーディングし、必要な
関数ポインタはコールバック関数で得るようにする。
0965デフォルトの名無しさん
2006/11/17(金) 03:31:46専用のユーティリティでコンパイルさせるんですが、コンパイル中に使用
しているcl.exeの位置を調べたら、
C:\Program Files\Microsoft Visual Studio 8\VC\bin\
でした。念のためVS2005で使用しているものも調べたら同じものでした。
>>964
実際にnewしているのは、CTabCtrl になります。ライブラリのクラスは、
newしていないと思います。たぶん。
たしかにやりがちな間違いなんですが、それだと、newを実行した後に、
どこかで「メモリの中身が壊れました」警告が出たりしますが、今回の症状では、
newの行どころか、
int _tmain(int argc, _TCHAR* argv[])
関数内の先頭行にも到達してないんです。(今はコンソールアプリでデバッグしてます)
0966デフォルトの名無しさん
2006/11/17(金) 03:44:380967デフォルトの名無しさん
2006/11/17(金) 03:47:50すいません、ライブラリが勝手にDLLを読み込んでいて、
そういった操作が簡単にできるか怪しいです。
読み込むDLLなんかは、_DEBUGとかUNICODEとかを
賢く見てるみたいです。
0968デフォルトの名無しさん
2006/11/17(金) 03:50:31商用ライブラリだという事ですから、開発元のメーカーに詳しい症状を
添付してお問い合わせされてみてはどうでしょうか?
私の手元にライブラリがあれば調べてみる事もできるんですが、それは
無理ですからね。
様子からするとDLLの初期化にどこかで失敗しているような印象を
受けます。
0969デフォルトの名無しさん
2006/11/17(金) 03:57:42いろいろ調べていったら、一応DLL側の処理で止まってたみたいです。
UXTHEME.DLLをたたいて、その中で止まってました。
しかし、「止まる」ソースと「止まらない」ソースでコールする内容が
変わっていないか見てみましたが、変わっていません。というか、
そもそもDLLの初期化に関係するはずのない部分をいじっているので、
本来変わるはずがありません。
ひとまず、スタティックリンクで対処したいとおもいます。
ありがとうございました。
0970デフォルトの名無しさん
2006/11/17(金) 04:01:44する事があるのがプログラムの怖い所です。
WIn32APIを呼び出している所で止まっているなら、配列のオーバーラン
か何か起こしているのかもしれません。
まあスタティックリンクで行かれるという事ですのでここまでにしましょう。
スタティックリンクでも問題が出そうな気がするのですが・・・・
0971デフォルトの名無しさん
2006/11/17(金) 16:29:10チェックボックスがONのときは赤文字、OFFのときは通常(黒文字)としたいのですが
どうやって実現すればいいでしょう?
0972デフォルトの名無しさん
2006/11/17(金) 16:44:100973デフォルトの名無しさん
2006/11/17(金) 16:45:030974デフォルトの名無しさん
2006/11/17(金) 23:47:05つOnCtrlColor
0975sage
2006/11/18(土) 14:06:21画面上のコントロール内の文字を90度回転させた形で表示させたいんですが、
当方VC初心者でなかなか難しく、行き詰まっています。
CreateFontでフォントを作成したらできる所までは分かったんですが
それをどこにどう書いたらいいのか困っています。
納期も迫っており、じっくり勉強する時間もないんです。。
どなたか分かる人いらっしゃいましたらお願いします。
0976デフォルトの名無しさん
2006/11/18(土) 14:54:24ゆっくり教えてる暇がなくて残念
0977デフォルトの名無しさん
2006/11/18(土) 15:20:13具体的にどのコントロール?
文字は左右どっち向きに90度?
90度傾けて横書きだよね?
0978デフォルトの名無しさん
2006/11/18(土) 15:27:47横に出来るならボタンでもStaticTextでも良いです。
ちょうど、ディスプレイを左に90度回転させると
普通に横書きで読める文字にしたいんです。
つまり、左に90度回転させたいです。
よろしくお願いします。
0979デフォルトの名無しさん
2006/11/18(土) 15:33:56ディスプレイを左に90度回転させて読める字って右に90度回転してるんじゃないの?
0980デフォルトの名無しさん
2006/11/18(土) 15:40:16左に90度でお願いします。
0981デフォルトの名無しさん
2006/11/18(土) 16:33:04ボタンでも良いってことは短い文章でスクロールも不要なのね。
それならフォントは出来てるようだしフォームに直に書けば楽。
アプリの種類がSDIならOnDraw、ダイアログならOnPaintあたりで
CDCにフォントをセットして位置調整のうえTextOut等で描画。
一杯描くのでコントロールが良いと言うならStaticでもボタンでも使って
オーナードローになる。
MSFlexGridは知らない。 >980は意味分からん。
0982デフォルトの名無しさん
2006/11/18(土) 17:14:20とりあえずですが、何とかフォントの設定することができました!
0983デフォルトの名無しさん
2006/11/19(日) 00:32:08タブを切り替えていくつかのウィンドウを表示するプログラムで、
CTabCtrl + CDialogの派生クラス(ページ) を、トップウィンドウの
上に貼り付けて、表示しています。
CTabCtrl
Createで生成。リソースで配置したものへのDDX_Controlなどではない。
親は「トップウィンドウ」
CDialogの派生クラスたち(ページ)
Createで生成。基本的にリソース使用。
親は「トップウィンドウ」
トップウィンドウ
CDialogの派生クラス。リソース使用で、Create で生成・表示している。
このような構成で、ページの中に、MultiLine な EditBox を配置したところ、
EditBoxのフォーカスがある時に、Escを押すと、現在表示されている
ページだけが非表示になり、あとは表示されたままです。タブを切り替えて
もっかい戻すと、表示されます。
MultiLineでなければ、問題ありません。あと、ページたちの親は、CTabCtrl
でも、トップウィンドウでも、同じ現象でした。
Escを押しても非表示にならないようにするにはどうしたらいいのでしょうか。
0984デフォルトの名無しさん
2006/11/19(日) 01:12:410985デフォルトの名無しさん
2006/11/19(日) 01:43:21ページ用クラスのOnCancelで基本クラスを呼ばないようにすると直るな。
たぶんモードレスダイアログと同じような理由。
0986デフォルトの名無しさん
2006/11/19(日) 03:28:42解決しました。
ありがとうございました。
0987デフォルトの名無しさん
2006/11/19(日) 23:20:24http://www.microsoft.com/japan/msdn/netframework/programming/obsoleteapi/
0988デフォルトの名無しさん
2006/11/20(月) 14:57:01LOOP処理時、LISTボックス内に簡単なLOGを吐き出してるのですが、
最新のLOGを表示したい為、cursol番号が最大のデータを常に表示する
という方法はありますか?
一応探してみたけど、それっぽいのが見つかりません。
HELP!!!
0989デフォルトの名無しさん
2006/11/20(月) 15:14:16じゃなくて、MAXが表示されてる状態。
垂直スクロールを一番下まで下げた状態と言う事です。
0990デフォルトの名無しさん
2006/11/20(月) 15:20:520991デフォルトの名無しさん
2006/11/20(月) 17:15:10CListCtrl::GetTopIndex()は知っているけど、set関数もあったっけ?
>>989
CListCtrl::EnsureVisible()でいいんでない?
0992デフォルトの名無しさん
2006/11/20(月) 17:34:230993991
2006/11/20(月) 17:41:500994デフォルトの名無しさん
2006/11/20(月) 21:45:21Disabled時のボタンの文字色を変える方法ってありますか?
もしくは、Disabledにせずにボタンを押せなくする方法はありますか?
0995デフォルトの名無しさん
2006/11/20(月) 23:29:31DrawItemで
DrawFrameControl()
0996デフォルトの名無しさん
2006/11/21(火) 04:00:13AddTail()した時のポインタの値と
GetAt()した時のポインタの値が
異なってしまいます。
(そのためdeleteしようとするとアクセスバイオレーションが発生)
使い方が間違っているでしょうか?
CTypedPtrList<CPtrList, CMyObject*> m_obj;
CMyObject* pObj = new CMyObject();
POSITION pos = m_obj.AddTail(pObj); ← ここのpObjと
CMyObject* pAdd = m_obj.GetAt(pos); ← ここのpAddの値が異なる。。。
0997デフォルトの名無しさん
2006/11/21(火) 06:50:38以下はVS2005で正常に動作したコードだが、
これが駄目だったら、何かファイルが壊れているのかもしれない。
CTypedPtrList<CPtrList, CString *> list;
CString * pObj = new CString(_T("文字列"));
POSITION pos = list.AddTail(pObj);
CString * pAdd = list.GetAt(pos);
delete pAdd;
0998996
2006/11/21(火) 07:32:13ありがとうございます。
私のところはVS.netですが、
いただいたコードを試しましたが、OKでした。
もうちょっと調べてみます。。
0999デフォルトの名無しさん
2006/11/21(火) 07:51:591000小倉優子 ◆en0rG2J.f6
2006/11/21(火) 07:52:3010011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。