トップページ⇒tech
1001コメント338KB

■ VisualC++(MFC限定)相談室 5■

レス数が1000を超えています。これ以上書き込みはできません。
0001MFCNGNG
前スレ
■ VisualC++(MFC限定)相談室 4■
http://pc3.2ch.net/test/read.cgi/tech/1021620974/l50
0002デフォルトの名無しさんNGNG
2げっとできた?
0003デフォルトの名無しさんNGNG
>>2
おめれと。
0004デフォルトの名無しさんNGNG
>>1
otu.
0005デフォルトの名無しさんNGNG
スレ立てお疲れです。
CAsyncSoketクラスの派生クラスを使って
Chatプログラムを作りたいんですが上手くいきません。
具体的には
m_SockCreate();//ソケットの作成
if(0==m_Sock.Connect((LPCTSTR)dlg.m_strIP,46820)&&WSAEWOULDBLOCK!=m_Sock.GetLastError())
{//接続エラー
MessageBox("接続エラーが発生しました",);
return;
}
切断ボタン
{
m_Sock.Close();//ソケットの削除
}
//接続した
void CConnectSock::OnConnect(int nErrorCode)
{
m_pWnd->MessageBox("接続しました");
CAsyncSocket::OnConnect(nErrorCode);
}

//接続された
void CConnectSock::OnAccept(int nErrorCode)
{
m_pWnd->MessageBox("接続されました");
CAsyncSocket::OnAccept(nErrorCode);
}
//切断された
void CConnectSock::OnClose(int nErrorCode)
{
m_pWnd->MessageBox("切断されました");

}
この中でMessageBox("切断されました");
だけがどういじくっても表示されません。
どうやったら切断時にCConnectSock::OnCloseが呼ばれるのでしょうか?
ほんと困ってるので教えてもらえないでしょうか。
0006デフォルトの名無しさんNGNG
 スレ立ておつかれです。
 CListCtrlで、アイテムごと、もしくはサブアイテムごとにテキストの色
変えることってできないでしょうか。ライブラリを読む限りじゃ既存の機能
では無理っぽいのはわかりましたが、もし無理に実現するとすればどんな方
法が考えられるでしょうか。どなたかレスお願いいたします。
00076NGNG
 すんません、某ページで見つかり解決しました。
 お邪魔しました
0008デフォルトの名無しさんNGNG
OnCloseって、向こうがCloseしたときに呼ばれるんでなかったかいな?
00095NGNG
>8
そのとおりです。
ですが、なぜか切断されても呼ばれなくて困っています。
クライアントのClose()関数が呼ばれたら
サーバーのOnCloseが呼ばれるって流れですよね?
呼ばれなくて困ってます。。
0010デフォルトの名無しさんNGNG
>>9
その前に接続されてないとおもうぞ
Acceptしてねーし
0011デフォルトの名無しさんNGNG
CStringを元にした(・∀・)イイ!! 派生クラスの紹介キボンヌ。
0012デフォルトの名無しさんNGNG
>>11
まず脱げ。

>>1
(・∀・)ノスレさんも疲れ〜
0013デフォルトの名無しさんNGNG
(´-`).。oO(「脱げ」ってどういう意味だろう・・・
0014閉じ忘れちういNGNG
)
0015デフォルトの名無しさんNGNG
(´-`).。oO(言うまでもなく脱衣げーむだろう…)
0016デフォルトの名無しさんNGNG
LoadBitmapの反対の処理を行なう関数はありませんか?
ビットマップハンドルを名前を付けて保存したいのですが。
0017デフォルトの名無しさんNGNG
ダイアログベースで作ってるのですが
エクスプローラみたいなTreeViewを
表示したいのですがどうやったらいいのでしょうか?
SHBrowseForFolderの画面みたいなプログラムです。
それを画面に常に表示させておいて処理の出力先を
選択できる形にしたいのですが。
解凍ツールのLhasaみたいなやつを作りたいんです。
あれは、CTreeViewを使って自前で書くべきなんでしょうか?
そう考えると、展開される瞬間にに二つ下の階層を読みに行って、
一つしたのアイテムに挿入するという形しか思い浮かびません。
これだと、重いので根本的に間違ってる気がします。
Lhasaを見てみるとカスタマイズされた
SHBrowseForFolderのようにも見えます。
こっちで考えてみると、メインウィンドウが
SW_HIDEなウィンドウの子ウィンドウで実装する
形になるのですか?
設計段階から、検討もつかず困ってます。
アドバイスいただきたいのですが。
よろしくお願いします。
0018初心者 ◆jXxeRXqw NGNG
ダイアログ形式で
ドロップダウン形式のコンボボックスを作ったのですが
右にある「▼」を押してもドロップダウンが表示されません。
項目を選択した状態で↓ボタンを押すと
項目は切り替わるのですが・・・・
何か、ヒントだけでもお願いします。
0019デフォルトの名無しさんNGNG
>>18
コソボボックスの縦のサイズをもっと大きくしろよヴォケ
002017NGNG
>18
コンボボックスはリソースエディタで
配置&サイズを決める時ちょっと他のと違って、
まず、配置する。
これは他のと同じ。
その後、ドロップダウンが表示されている状態の配置を設定。
つまり。1:通常状態 2:開いてる状態
の二つの配置が必要。
て言っても、二つ目は一つ目のやつの高さを
ドラッグして、長くするだけなんだけど。

ってわかりにくいだろうから一生懸命書いてたけど、
>19が一言で済ましてくれたw
ちょっと悲しい。
0021初心者 ◆76EfjdUc NGNG
>>19,20
できました。
どうもありがとうございました。
002217NGNG
そりゃよかった。
確かに案外分かりにくいかもしれん。
この勢いのまま、どなたか
>17にも愛の手を。。
どうぞよろしくお願いします。
0023デフォルトの名無しさんNGNG
えっと、初めての質問なのですが、
CMenuのTrackPopupMenuを用いて別のアプリケーション上にメニューを
表示するのですが、そのアプリケーションがアクティブな場合に
メニューへキーボードからの入力できないのですが何とかならないでしょうか?
自分のウィンドウを先にアクティブにすれば一応使えるのですけれど、
閉じたあと元のアプリケーションがアクティブにならないので、できれば
アクティブ化しないで入力だけ欲しいのです。
0024デフォルトの名無しさんNGNG
>>17
ほれ
http://www.codeproject.com/treectrl/shelltreectrl.asp
http://www.codeproject.com/shell/seashell.asp
002517NGNG
>24
ありがとうございます。
待ったかいがありました。
見るからに私の希望どおりのことが
書いてあると思われる内容です。
ただ、英語なんですね。。
高校当時英語20点という点数を打ち出した私の
頭じゃつらい。。
でもここで「日本語のページでないでしょうか?」
っていうのも甘えてるみたいなんでやめときます。
辞書片手にがんばってみます。
ありがとうござました。
0026デフォルトの名無しさんNGNG
>>25
読めなくてもソースから理解できる罠
0027デフォルトの名無しさんNGNG
プログラム中に音を再生したいとき、どうすればいいのでしょうか?
PlaySound("SystemStart", NULL, SND_ALIAS_ID);
このように試してみても音が出ないのですが理由がわかりません。
ただwavファイルを再生したいだけなのですが、
普通はplaysound以外の他の方法を使うのでしょうか?
よろしくお願いします。
0028デフォルトの名無しさんNGNG
ごめん、VCの操作に関してです。
英語のリソース作ったんだけど、うまくリンクできません。
何か特別な設定が必要ですか?
教えてください。
おながいします。
0029デフォルトの名無しさんNGNG
MFC拡張DLLを作成しているのですが、
エラーが出てコンパイルできずに困っています。

CString WINAPI GetDirectoryPath();
という関数と

class AFX_EXT_CLASS CTest
{
〜〜〜〜中略〜〜〜〜〜〜〜
public:
CString GetDirectoryPath();
};

この両方の関数をエクスポートしようとするとエラーがでます。
.defファイルのGetDirectoryPath @?というのを
コメントアウトすれば大丈夫ですが
前者の関数がエクスポートされません。
両方エクスポートするにはどうすればいいのでしょうか?
名前を変えるしかないのですか?
0030デフォルトの名無しさんNGNG
デフォルトライブラリのリスト自体の設定ってどこにありますか?
0031デフォルトの名無しさんNGNG
AfxMessageBox
AfxGetApp

Afxっていったい何を意味するんですか?
自分で
Afx????みたいな関数作っても
おかしくないですか?
動くとか動かないとかの基準じゃなくて。
0032若輩者NGNG
はじめまして、プログラム若輩者です。
今、画像処理用のプログラムを勉強しています。
自作の画像処理用ソースファイルとヘッダファイルを
MFCに追加して、CViewクラスから追加した自作のクラス内の
メンバ関数にアクセスしたいのです。

この時、CViewクラスから自作クラスへのポインタ、もしくは
オブジェクトを作ってアクセスしようとするとコンパイルでは
エラー0なんですが、実際に実行すると
『内部エラーが発生しました』
と出てしまい、どうしたらよいか悩んでおります。
よろしかったら先輩方のアドバイスを頂けたらと思います。
どうかよろしくお願いします。
0033デフォルトの名無しさんNGNG
>>32はマルチ。相手にすんなよ。
0034デフォルトの名無しさんNGNG
リストビューで
レポート型 LVS_REPORTを指定すると普通は
一番左側の項目しかクリックできないと思いますが、
これを一行丸まるクリック可能にすることは出来ないでしょうか?


1 INTEL 75%
2 AMD 20%
3 VIA 5%
.
.
みたいな感じで左側にはインデックスだけついてるので
そこだけクリック可能というのではちょっと変になってしまうんです。
それともこういう場合はリストビューじゃ無い方がいいんですかね?
(数字に意味はないです。念のため(^^;)
0035デフォルトの名無しさんNGNG
>34
LVS_EX_FULLROWSELECT
0036デフォルトの名無しさんNGNG
>>31
確か Application Frameworks の略だ。
自分で Afx... は俺はちょっと違和感が。
0037デフォルトの名無しさんNGNG
>>27
>PlaySound("SystemStart", NULL, SND_ALIAS_ID);
うちも鳴らね.なんでだろう...?
(9xはこのフラグに対応していないと MSDNにあるが,2000でも鳴らぬ)

>>31
MFCのグローバル関数.名前がかぶらなければ自作関数にこのプレフィックス
つけてもかまわないが >>36の言うように違和感あると思う.
003834NGNG
>35
ありがとうございます
それで一行選択されるようになりました


しかしもう一つ質問してよろしいでしょうか?
リストビューの項目がダブルクリックされたときに
その選択されたテキストを手に入れるようにしているのですが
GetHotItem()
だとカーソル位置で判断するようなので
行が反転されていても実際には文字の上にカーソルがないと
正常にどうさしません。
リストビューじゃなくて
ListBoxのGetSelCurのような関数があればとおもったのですが・・
どうもそういうのが見当たらないです・・・
0039 NGNG
>>38
GetNextItem()
004034NGNG
>39
ありがとうございます。
なんたかできました。
しかしヘルプがわかりずらいですねこの関数。
最初なにが書いてあるかわからずいろいろ試行錯誤してしまいました。
結局
GetNextItem(-1,LVI_SELECTED);
で出来たのですが。
0041デフォルトの名無しさんNGNG
CListCtrl::GetFirstSelectedItemPosition
があるが。
0042デフォルトの名無しさんNGNG
MSDN Online の『Visual C++ プログラマーズ ガイド』
(http://www.microsoft.com/japan/developer/library/default.asp?URL=/japan/developer/library/vccore/vccorehm.htm)の
「コレクション トピック」
ってどこですか?

ここの説明ってすごく不親切で、リンク張ってないんです。
誰か知ってる人いたら教えてください
004339NGNG
>41
なるほどそれでもできそうですね。
ありがとうございます。
しかしこの場合は
戻り値がGetNextSelectedItemで使うPOSITION
のようなのでもう少し手間がかかるようです

ところでMFC(っていうかC++)でperl風の正規表現
$string =~ /</</g;
なんてのを使うときにはどうするのがベストなんでしょうか?
(速度的にも手間的にも)
Cでポインタをすすませながら一文字づつ文字列を直にいじるか
それともperlインタプリタを使ってperl関数を呼び出す・・????
0044デフォルトの名無しさんNGNG
vc++で質問があるれす。私、初心者れす。

プロセスの優先度を変更するためにはどうしたらよろしいのでしょう?
プロセス名までは取得できたのですが、変更はどうもうまくイカンのです。

先生方、よろしくどうぞ。
0045デフォルトの名無しさんNGNG
>43
正規表現ライブラリを組み込むのが面倒くさいときは、flex。
0046handleないぞNGNG
C++ Win32 Tips100 という本p29でダイアログで
WM_NCHITTEST
ハンドルをクラスウィザードで追加するとあったのですが
このハンドルはウィザードのどこ探しても見つかりません。
出てこないハンドルをMFCで追加できますか?
0047handleないぞNGNG
ハンドルつうか,メッセージマップにWM_NCHITTEST がないんですよ
0048デフォルトの名無しさんNGNG
なぜ手動でメッセージマップに追加しないかなぁ……
0049デフォルトの名無しさんNGNG
>handleないぞ
クラスウィザード→クラス情報タブ→詳細設定オプション→メッセージフィルタ
が「ウィンドウ」になっていないのでは?
0050handleないぞNGNG
>49
どうもです。メッセジフィルタが「ダイアログ」になってて「ウィンドウ」
ってのは無いんですが(?_?)最上位フレームというのにしてみたら旨く行きました。

>48
ハンドラ手動追加もやってみました。一応動くんですが書きこみは

ソース内:BEGIN_MESSAGE_MAP
ソース内:メッセージ ハンドラ
ヘッダー内:// 生成されたメッセージ マップ関数

の3箇所でいいんですか?
グレー表示のところなんかには触っちゃいけないもんだと思ってたんで。
0051デフォルトの名無しさんNGNG
メインAppのpublicにメンバ変数を宣言して、グローバル変数として使ってます。
  CWinApp* pApp = AfxGetApp();
  pApp->メンバ変数名
って別のクラスとかで使ってたんですが、なんか、8個以上になると、
急にわけわかんないエラーがでます。
  XXXのメモリがXXXを参照しましたがXXXのメモリがreadになることはありませんでした。
・・・とかっていうアレ。
最初エラーの原因がわかんなくて、バックアップ取っといた方で、組んでいったら、
どうも、メインAppのメンバが9個を超えると、いきなりそんなふうになるっぽいです。
でも、メンバ変数が増えるとエラーが出るなんてことあるの?
誰かおしえて〜・゚・(ノД`)・゚・。ウワアアアアアン
0052デフォルトの名無しさんNGNG
ヽ(`Д´)ノ
0053デフォルトの名無しさんNGNG
ケティィヽ(`Д´)ノクソゥもうコナィヨ!!
0054デフォルトの名無しさんNGNG
なんか宣言の位置変えたら治ったっぽい!
メンバ変数の宣言の順番でエラーが出たり出なかったりするなんて・・・
ふしぎだ。やさしい人なんかおしえてよ〜T_T
0055デフォルトの名無しさんNGNG
>>54 逐一、リビルドしてみたら?
0056デフォルトの名無しさんNGNG
>>55
親切なヒト発見!
しょっちゅうビルドしてるけどだめっぽいです。
なんか宣言は大丈夫でもアクセスすると例のエラーでます・・・ナゼダ?
もうネムイ・・ねよ。
0057デフォルトの名無しさんNGNG
ま、こういうのはソース醸せ?
0058デフォルトの名無しさんNGNG
>>16
遅レスだが、これはどうだ?
ttp://61.127.132.232/~ToukatuTCP/vc/006.html
0059nanaNGNG
finder.FindFile("*.txt");
で拡張子がtxtのファイルを取得できるけど
拡張子がhtmlもしくはtxtみたいにして指定することは出来ないのですか?
2回Findfileを呼び出してぐるぐるさすしかないのかなーー。
0060デフォルトの名無しさんNGNG
>>59
finder.FindFile("*.*");
if 拡張子が 'txt' 若しくわ 'html'ならってやれば
0061初心者 ◆76EfjdUc NGNG
Perl風の正規表現が使えるBREGEXP.DLLなるものを
下のページで見つけたのですが、同ページに乗っているクラスBregPoolが
エラーを起こして使えません。

BREGEXP.DLL
http://www.hi-ho.ne.jp/babaq/bregexp.html

とても便利そうなので是非使わせていただきたいのですが・・・
どなたかご教授願えませんでしょうか?
0062デフォルトの名無しさんNGNG
Dialog の枠引っ張って大きさ変えられるようにできます? 
プロパティにはサイズ可変とか見つかりません。
0063デフォルトの名無しさんNGNG
http://www.codeguru.com/dialog/index.shtml
の
Resizable Dialogs
を嫁。
0064デフォルトの名無しさんNGNG
どおおもです。読んでて気付いたんだが
>プロパティにはサイズ可変
モロにあるわけですね。僕って本当にfusianasan.
0065デフォルトの名無しさんNGNG
>>62
単にサイズ変更可にするだけなら、境界線をサイズ変更枠(WS_THICKFRAME)
にすれば OK。右下にハンドル(?)を表示したいとなるとやはりcodeguru
参考にするのがよいと思う。
0066デフォルトの名無しさんNGNG
OnDraw内で、CListCtrlクラスのオブジェクトにSetItemCountで1以上の値を与えると、
デバッグVerでは問題ないのに、リリースVerだとOnDrawの処理を抜けた後、
ソース外で撃沈、異常終了(Access Violation)しちゃうんだけど、
何がいけなさそう?
OnDrawが終わる直前にSetItemCountを使ってもダメだった。
0067デフォルトの名無しさんNGNG
>>66
OnDrawで描画以外のことをするなと小以下略
何か適当なメッセージをPostして、そのメッセージのハンドラで処理すれ。
0068デフォルトの名無しさんNGNG
オーナードローメニューのOnDrawItemで、
描画しているのですが、アイコンをDrawStateと
DrawStateのプロージャ関数内でDrawIcoExを使用して描画しています。
DrawStateのフラグに、DSS_NORMALを指定したときはうまく描画されるのですが、
DSS_DISABLEDを指定した場合に、全く描画されません。
一応DrawIconExは成功しているようなのですが、
この場合どんな原因が考えられるでしょうか?
白く塗りつぶした上に描画しています。
006968NGNG
3日悩んでいたのに、投稿後数分で解決しました(^-^;)
DrawStateで描画する位置を指定せず(0,0)に、
プロージャ内で位置を指定していたため、位置がズレていたのが原因のようです。
しかし、なんでDSS_NORMALの場合だけ成功するんでしょうか…。
0070デフォルトの名無しさんNGNG
非アクティブ時にメニューを表示して、そのメニューをキーボードから操作は
できませんか?
メニューにSetFocusを使おうと思ってもHWNDの取得の方法がわからなくて、、、
(それ以前にメニューってウィンドウじゃない?)
0071デフォルトの名無しさんNGNG
>70
はっきりいって言ってることが
よくわからんが、
>非アクティブ時に
フックについて調べるとよい。
>HWNDの取得方法が
FindWindowで間にあうならフックしなくてもいい。
0072デフォルトの名無しさんNGNG
>>71
レスthx.フックとか調べてみます。
ところでメニューのクラスって分かります?
0073訂正NGNG
クラス ×
ウィンドウクラス ○
0074デフォルトの名無しさんNGNG
>>72
メニューはウィンドウじゃないよ。
どうしてもメニューを表示したいならシステムフック。
0075初心者NGNG
OnPaint の dc(this) のハンドルはどうやって取得できますか?
GetSafeHdc(),では「定義されてない」
CDC::GetSafeHdc(),では
C:\Program Files\Microsoft Visual Studio\MyProjects\mc4\mc4Dlg.cpp(296) : error C2275:
'CDC' : typedef 識別子に、クラス メンバ アクセス演算子 (->) を使用しました。
怒られます
0076デフォルトの名無しさんNGNG
>75
質問の意図がよく分からないけど
 CPaintDC dc(this);
 HDC mpTest1 = dc.GetSafeHdc();
 HDC mpTest2 = dc.m_hDC;
とかではだめ?
0077 NGNG
>>74
メニューはウィンドウだよ。もっとも、ウィンドウハンドルが分かっても
どうしようもないけどね。ちなみに、ウィンドウクラス名は#32768だ。
0078gessiNGNG
>HDC mpTest1 = dc.GetSafeHdc();

ありがとう.
クラスとメンバについてわかってなかった馬鹿な私でした.
007966NGNG
>>67
回答ありがとう。
なるほど、OnDraw内から引っ越したら確かに異常終了はしなくなった。
が、別の症状が出るよーになってまた頭を悩ませることに……。ともかく感謝。
008079NGNG
解決シタ━━━(゚∀゚)━━━ !!!と思ったのは何かの間違いだったらしく、
OnDraw外に置いても相変わらず同じパターンにハマる。

ただ、ひとつわかったことがあって、仮想リストビューを使ってるんだけど、
撃沈の直前の処理はOnGetdispinfo****関数が最終のようだということ。
デバッグVerではその後_AfxDispatchCmdMsgに処理が移り、case AfxSig_vNMHDRpl:に飛ぶ。
一方、リリースVerでは次のソースにたどり着く前に力尽きる。
つまり、CListCtrlオブジェクトでSetItemCountを使ってアイテム数を増やすと
OnGetdispinfo****が呼び出され、以下撃沈、という図式の模様。
0081デフォルトの名無しさんNGNG
 印刷機能を作っています。マップモードを変更したときに、印刷領域を
取得する方法がわかりません。どなたか教えてもらえませんか。

 OnPrintの引数pInfoのメンバm_rectDrawが印刷領域を表してるのはわか
るのですが、デバイス単位なんですよね・・・。本に書いてあったので
OnPrepareDCのなかでSetMapModeとか呼んでみたのですがうまくいきません。
何がおかしいのでしょうか・・・
0082 NGNG
>>81
DPtoLP
0083まじめな質問者。NGNG
VC++6.0(MFC)、Win2000。
SDIでアプリを作ります。
モードレスダイアログを一つ表示したいのですが、
なんも考えずにあたりまえに(ヘルプに載ってるよーに)つくると
モードレスダイアログはアプリケーション内で
ZオーダTop位置固定に表示されちゃいます。
メインフレームのウィンドウがアクティブな時は
そっちを上にしたいんですけど。
どうしたらよいのでしょう?

「すれ立てるまでもない質問はここで」で誘導されちゃった。
0084デフォルトの名無しさんNGNG
モードレスダイアログが後ろに行くというのは、
インターフェース設計としていかがなものだろうか。
008583NGNG
なにか変ですか?
ほかに標準的な実装がある、とか。
0086デフォルトの名無しさんNGNG
CreateDialogのhWndParentをHWND_DESKTOPにするとか。
008783NGNG
>>86
ナイス!いけました!
ありがとうございました!!
008881NGNG
 >>82さん、一発解決でした。どうもです。
008981NGNG
 またしても印刷で悩んでしまいました。
 WYSIWYGではない印刷を行うとき、ページ数事前に調べにくいために、
OnPrepareDCでフラグを・・・といった説明をあちこちで読んだのですが、
結局印刷プレビューを正しく表示したり、印刷をするためにはどこか
でページ数を設定しなくてはなりませんよね?
 OnPrintでは必要な情報がそろっているため、ページ数を確定できる
のですがOnPrintでSetMaxPageを呼ぶと、印刷時には印刷ステータスダ
イアログのページのカウントがキャンセルするまで無限にカウントされ
てしまいます。
 まったくSetMaxPageを呼ばないとプレビューも印刷も1ページ目のみ
になってしまうし・・・。どうするのが一番よいのでしょう。どなたかア
ドバイスお願いします。
0090デフォルトの名無しさんNGNG
他のアプリのウインドウスタイルを変更して常にトップ表示にすることは
可能ですか?
0091 NGNG
>>90
可能です。
0092デフォルトの名無しさんNGNG
SPY++のウインド検索はどのようになってるのでしょうね〜
だれかご存じですか?
0093デフォルトの名無しさんNGNG
Advanced Windowsでも読めば少しは分るんでないのか
0094デフォルトの名無しさんNGNG
>>90-93
おまえらスレ違い警報が発令されるぞ
0095Melt-DNGNG
長くなると思うのですが、質問です。
ダイアログのエディットボックスから取った文字列を
リストに表示する処理を行っています。

・edit_dlgはCDialogの派生クラスのオブジェクトです。
・m_listCtrlはCListCtrlクラスの派生クラスのオブジェクトです。
・bufはchar型配列です

<<問題点>>
リストが正しく表示されません。
CListCtrl::InsertItemで設定した(LPCTSTR)edit_dlg.m_id_editは表示される。
CListCtrl::SetItemで設定した以下の文字列が表示されない。
既に設定してあるリストを編集する形でCListCtrl::SetItemTextを使った場合
更新はされる。
何か抜けているのがありましたらご指摘お願いします。

if( edit_dlg.DoModal() )
{
  LV_ITEMmyItem;
  myItem.mask = LVIF_TEXT;
  myItem.iItem = m_listCtrl.GetItemCount() + 1;
  myItem.iSubItem = 0;
  strcpy( buf, (LPCTSTR)edit_dlg.m_id_edit ); //m_id_editはCString型
  myItem.pszText = buf;
  int iItem = m_listCtrl.InsertItem(&myItem);

  myItem.iSubItem = 1;
  myItem.mask = LVIF_TEXT;
  ZeroMemory( buf, sizeof( buf ) );
  strcpy( buf, (LPCTSTR)edit_dlg.m_app_edit );m_app_editはCString型
  myItem.pszText = buf;
  m_listCtrl.SetItem(&myItem);

  myItem.iSubItem = 2;
  myItem.mask = LVIF_TEXT;
  ZeroMemory( buf, sizeof( buf ) );
  strcpy( buf, (LPCTSTR)edit_dlg.m_slocal_edit );m_slocal_editはCString型
  myItem.pszText = buf;
  m_listCtrl.SetItem(&myItem);

  myItem.iSubItem = 3;
  myItem.mask = LVIF_TEXT;
  ZeroMemory( buf, sizeof( buf ) );
  strcpy( buf, (LPCTSTR)edit_dlg.m_clocal_edit );
  myItem.pszText = buf;
  m_listCtrl.SetItem(&myItem);

  ///(途中省略・・・)///

  m_listCtrl.SetItem(&myItem);
  m_listCtrl.Update(iItem);
}
0096デフォルトの名無しさんNGNG
MFCってVS.netで何が変わったの?
あんまり情報が見つかんなくてわからないんでけど。
誰か知ってたら教えて
0097デフォルトの名無しさんNGNG
>>95
> int iItem = m_listCtrl.InsertItem(&myItem);
返ってきたiItemと myItem.iItem を比べてみ。
0098Melt-DNGNG
>>97
GetItemCount() + 1が余分だったんですね・・・。
iItemは0スタートということをすっかり忘れていました。

感謝します。
0099デフォルトの名無しさんNGNG
エディットボックスの中でEnterキーが押されたことをメッセージとして受け取るにはどうすれば良いでしょうか?
クラスウィザードでエディットボックスを選択するとWM_KEYDOWNメッセージが無いのですが・・・
0100デフォルトの名無しさんNGNG
チミはクラスウィザードに頼らな何にもできひんのかいな。
010199NGNG
解決しますた
0102デフォルトの名無しさんNGNG
やっとCTreeCtrlの使い方が少し見えてきた
先は長〜い
0103デフォルトの名無しさんNGNG
レジストリを変更して
.lzhを自分で作ったアプリに関連付けしたのですが、
もとの関連付けに復旧した時に
画面上のアイコンは再描画されません。
レジストリ変更後、すぐにアイコンを
元に戻す(再描画する)にはどうすればいいでしょうか?
0104デフォルトの名無しさんNGNG
 あるコントロールで、任意の部分を選択カラーにしたいのですが、
どうすればよいのでしょうか。InvertRectだとそのまま反転してしま
うのですが、「選択色」にしたいのです。どなたかレスお願いします
0105 NGNG
>>104
あるコントロールとは具体的にはどれだ?
とりあえずキーワードはカスタムドローとオーナードロー。
0106デフォルトの名無しさんNGNG
VC++の例外処理の実装について詳しいサイトはないでしょうか?
自分で調べてもよく分からんのです。
0107デフォルトの名無しさんNGNG
2進数とか16進数の計算をする時には、どの関数を使えばいいのでしょうか?
教えて下さい。お願いします。
0108デフォルトの名無しさんNGNG
int i = 0x400 + 0x720; //16進数の計算?
0109あNGNG
>107
すれ違い。
0110名無しのデフォルトNGNG
 ソケット通信を1台のPcで2EXE間で多発しているプログラムを使用しているの
ですが、(OS-XP Vc++6.0で作成)10分ぐらいたつとAEXEでSendで出したもの
に対してBEXEがOn関数で受けなくなってAEXEはSENDが成功してからRecieveを
使っているのでAEXEが止まっています。OS-NTの時にはそのような問題にはな
らなかったのでXp絡みだと思います。(ちなみにBEXEを強制的に落とすとAEXE
は動き出します。XPの基本優先度を上げると起き難くなります。)
BEXEが悪いかXPの通信が悪いかだとは思うのですがご存知の方がいたらお願い
します。通信を繰り返してるだけなので1回1回には問題なと思うのですが。
0111とくめいさんNGNG
.NETでMDI環境の標準スケルトンを作成して
表示に独自のイベントハンドラを挿入しても実行されません。
なぜか教えてください。
VC++.NETはVC++6よりずっと使いにくくなりました。

0112104NGNG
 >>105さん、レスどうもです。あるコントロールというのは
リストビューのことです。サブアイテムも選択可能にしたの
ですが、選択中の表示を今はカレットを使っているのですが、
点滅がなんかうざいなー、と思いまして。CDCにフォーカス矩形
の表示はあったのですが、選択中の反転(InvertRectじゃない)
もCDCでできないのかなーと思って質問したしだいです。
 オーナードローとカスタムドロー、少し調べてみます。
0113デフォルトの名無しさんNGNG
教えてくだちい
他のウインドのリージョンを取得しようとして

HRGN hRgn = CreateRectRgn(0,0,0,0);
int rgntyp = ::GetWindowRgn(hWnd, hRgn);

とやったのですがERRORAPIがリターンされます。
どうやったら他のウインドウのリージョンがget出来るのですか?
0114 NGNG
>>113
対象のウィンドウがリージョンを持っていれば、それで取得できる。
0115デフォルトの名無しさんNGNG
>114
どうもです。

つまり自分や誰かがSetWindowRgnした後なら取れるって事ですか?
実は重なり合っているウインドの見えている領域と
HWNDのリストを作りたいのですが可能ですか?
0116 NGNG
>>115
GetWindowRgnがエラーだったら、GetWindowRectしてCreateRectRgnIndirect
すればいいのでは?
0117デフォルトの名無しさんNGNG
CControlBar上にコントロール(CTreeCtrl)があります
バーもコントロールもCMainFrameのメンバ変数になっています

OnSelchangedなどの処理をするにはどうしたらいいでしょうか

CTreeViewの宣言、関数をそのままMainFrameにコピーしてみましたが
反応無しでした
0118デフォルトの名無しさんNGNG
MFCのコントロールを色々使った例が載ってるような書籍って無いですかね?
011929NGNG
>118
新VisualC++入門 シニア編
\4200
著者 林 晴比古

ただし、
>MFCのコントロールを色々使った例
の他はほとんど為にならないので注意。
辞書代わりに使える、初心者ご用達の本。
って俺は思う。

誰か俺の質問教えて。。
足りない言葉あれば補足しますので
よろしくお願いします。

0120 NGNG
>>119
_declspec(dllexport) CString WINAPI GetDirectoryPath();
012129NGNG
>120
いけました。
おかげさまでやっと進めます。
その部分がわからなくて放置してたので
助かりました。
ほんと感謝してます。

このスレいまいち盛り上がらないなぁw
あんまりみんなMFCって興味ないのかなぁ。
0122デフォルトの名無しさんNGNG
質問です。

AppWizardで作成したMDIアプリで、
メニューの ファイル→開くを選択した時
出てくるコモンダイアログのポインタを取得出来ないでしょうか?
コモンダイアログで選択中の拡張子が取得したいんです。

それと、コモンダイアログで開けるファイルの種類を増やしたい時
ストリングテーブルをどの様に編集すれば良いですか?

Bmpファイル(*.bmp)
Jpegファイル(*.jpg)
すべてのファイル

の様にしたいのです。 VC6.0です。
0123デフォルトの名無しさんNGNG
VisualStdio.netでMFCはどう変わったのでしょうか。
知っている人がいたら教えてください。
0124デフォルトの名無しさんNGNG
>>122
コモンダイアログのプロパティとイベントに関する部分の
ヘルプをよ〜く読め
0125デフォルトの名無しさんNGNG
質問です

CScrollBar(というかコモンコントロールのスクロールバー)のメッセージ
WM_VSCROLL, WM_HSCROLL は CScrollBar ではなく、その親ウインドウに
送られますよね、それがいやなので次のようなクラスを作ってみました。


class CScrollBar2 : public CWnd {
CScrollBar m_sb ;
afx_msg void OnVScroll(
UINT nSBCode,
UINT nPos,
CScrollBar *pScrollBar
) ;
DECLARE_MESSAGE_MAP()
} ;
以下略(説明用ですので細かい突っ込みはなしです)...

m_sb は CScrollBar2 の子ウインドウとして作成されます。
結果、WM_VSCROLL, WM_HSCROLL は CScrollBar2 に送られます。
CScrollBar2 を普通の CScrollBar のように扱います。


で、ビュークラスにつけて、縦スクロールバーのように動作するように
してみたんですよ。
まあ、普通に動作しているように見えるんですけど、マウスのホイール
に反応しないんです。
スクロールバーの上でホイールを回すとちゃんと動作するんです。
別のウインドウになってしまったので当然ですが、これを普通
(CScrollViewとか)のようにビューの上でホイールが効くようにするには
どうしたらよいでしょうか?
0126125NGNG
つづきです(長文スマソ)

たんにビュークラスの WM_MOUSEWHEEL メッセージをスクロールバー
(m_sb)にそのまま投げてやればよいのかと思ったのですが、Spy で見た
ところ WM_MOUSEWHEEL はビュークラスにきてませんでした。
インストールしているマウスユーティリティがホイールの動作を
WM_VSCROLL 等に変換しているのかと思い WM_VSCROLL も見てみたのです
がきてませんでした。
で、長くなるので簡単に書くと、
他のアプリで試したところ次のような結果になりました。
・スクロールバーがついているウインドウには WM_VSCROLL がくる
・ついて無いときはこない
・WM_MOUSEWHEEL は常にこない(多分マウスユーティリティのせい)

作ったビュークラスには、直接関連するスクロールバーはなかったんです
今、使用しているようなマウスユーティリティの有無にかかわらず、
ホイールが効くようにするにはどうしたらよいでしょうか?
0127デフォルトの名無しさんNGNG
>>125
WM_MOUSEWHEELみたいなやつ
0128デフォルトの名無しさんNGNG
かぶったー
0129125NGNG
で、ここでしょーも無いことを思い出したんですよ。
CSplitterWnd で分割表示したときは?
2×2で分割表示した場合、左上のビューにスクロールバーはありません
・スクロールバーがついているウインドウには WM_VSCROLL がくる
・ついて無いときはこない
の法則からいけばホイールは効かないはずなんです。で、試してみました
AppWizardで適当に作って、コンポーネントギャラリーから
スプリットバーを追加して Spy で見てみました。すると、左上のビュー
にも WM_VSCROLL がきてしまってるんです。
なぞですね。
そもそも、CSplitterWnd で分割表示してないときのスクロールバーの上
または左の(分割表示するための)四角もなぞです。
CScrollView でなく CView でもスクロールバーが表示されるようになる
のもなぞです。
四角のほうは、多分あのスクロールバーはウインドウスタイルで
WS_VSCROLL を指定したものではなく、CScrollBar を使っているん
でしょうけど。
CSplitterWnd を調べればスクロールバーのないビューにも WM_VSCROLL
が来るような仕組みがわかるかもしれませんが CSplitterWnd の中なんか
知りたくもありません。

こんな話はどうでもよくて、
ホイールが効くようにするにはどうしたらよいでしょうか?
0130129NGNG
>で、ここでしょーも無いことを思い出したんですよ
思いついたの間違いだろ、つーか文章長すぎスマソ
0131デフォルトの名無しさんNGNG
CStringやCStringArrayを含む構造体を動的に確保したいのですが、
new,deleteでやっていいのでしょうか?
0132デフォルトの名無しさんNGNG
>>131
何か問題ある?
0133デフォルトの名無しさんNGNG
や、なんか配列増やそうとコピー>deleteしようとするとエラーになるので、
なんかまずいのかな、と。
0134デフォルトの名無しさんNGNG
>116
どうもありがとうございます。っていうか遅レスですんまそ。
そうですね。でもウインドウの重なり具合で下の奴のリージョンが上の奴のせいで
欠けるとか、そう言うのを再現したかったモノで。。
例えばリージョンを重ねていって完全に隠れちゃったようなリージョンは
NULLリージョンになってくれるとかそういう便利なヤシないですかね?
0135デフォルトの名無しさんNGNG
CStringがATLでも使えるようになったよな。
今更使わんけど。
0136 NGNG
>>134
CombineRgn
0137103NGNG
あのー、すみません、
ご存知の方教えてもらえないでしょうか?
Lhasaで関連付けしたら
即アイコンが変わったので
なんらか方法があるとは思うのですが。。
0138デフォルトの名無しさんNGNG
>>137
勘でレスするけどデスクトップはリストビューだから
そのリストビューに対して再描画を通知すればよいかも
0139103NGNG
>138
一瞬「ハッ」としたんですが、
つまりデスクトップのウィンドウを
再描画というわけですね。
でもそれだと、
同時に別窓で開いてるエクスプローラが
更新されないですよね。
どうすれば。。
0140デフォルトの名無しさんNGNG
>139
便乗して勘で、
SysListView32と言うクラス名を持つウインドウ全てに
WM_PAINT送るとか、、、
0141103NGNG
>140
正直それをぱっとテストできるスキルは
持ち合わせてないんですが、
そっちの方向で調べながらやってみます。
ありがとうござました。
なんか勘違いしてたら教えてくださいね。
0142デフォルトの名無しさんNGNG
勘で答えるスレはここですか?
0143デフォルトの名無しさんNGNG
お前、ここですか?言いたいだけちゃうんかと(以下省略
0144デフォルトの名無しさんNGNG
おまいらMFCのリファレンスで何かお勧めはありますか?
開発中はMSDNライブラリで十分だけど
寝る前とかにマターリ読みたいわけだが
0145デフォルトの名無しさんNGNG
エロまんがでも読んどけ
0146デフォルトの名無しさんNGNG
エロ漫画は参考になりますか?
0147五条郎NGNG
DATA型とPDATA型のちがいはなんですか
0148デフォルトの名無しさんNGNG
なりますよ。知らないんですか?
0149デフォルトの名無しさんNGNG
本とか型とかスレ違いなネタでしかこのスレ延びないんかい(悲
0150デフォルトの名無しさんNGNG
数年前に VIsualC++6.0Pro を買いました。
今店頭に並んでいる奴には PlusPack とか
いうモノが付属しているようです。
PlusPack はあった方が便利ですか?

MS のサイトで PlusPack 単体売りしているのを
買い逃したので気になってます。
0151デフォルトの名無しさんNGNG
めんどくせ〜、キーを打つのもめんどくせ〜
0152デフォルトの名無しさんNGNG
>>150
アカデミックのダンピング価格で
買ったのか?
いいねー学生さんは、、、
0153デフォルトの名無しさんNGNG
MDIアプリを作っているのですが、メインのウインドウをデフォルトじゃなくて
イメージを貼り付けたいのですがどなたかご存知ではないですか?

メディアプレーヤーみたいにいくつもイメージを変えたいです。。
0154デフォルトの名無しさんNGNG
>>103
::SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST|SHCNF_FLUSH, 0, 0);
0155150NGNG
>>152
違いますよ。
アカデミック版じゃないです。
0156デフォルトの名無しさんNGNG
ウィンドウハンドルからオブジェクトへのポインタを
取得するにはどうすればいいでしょうか?
CWnd* ????(HWND hWnd);
みたいな関数ってありませんか?
0157 NGNG
>>156
CWnd::FromHandle()
0158156NGNG
>157
最高です。
感謝します。
0159デフォルトの名無しさんNGNG
自分で作ったファイルオープンのダイアログを
フレームワークのファイルオープンのダイアログみたいに使うことはできませんか?
0160あNGNG
>159
みたいに?
代わりにじゃなくて?
0161159NGNG
ダイアログで取ったファイルのパスをOnOpenDocumentに渡したいんです。
0162デフォルトの名無しさんNGNG
基本クラスCEditViewのMFCで一行目だけ読み出すように
するには、どうしたらいいですか?
一行目だけ色を変えたいんですけど、やりかたが書いてある
参考書がないので
0163デフォルトの名無しさんNGNG
EditControlに色を変えるような高尚なことができたっけか?
0164デフォルトの名無しさんNGNG
>>159
ID_FILE_OPEN の COMMAND メッセージハンドラを CXxxApp に作る。中身は

void CXxxApp::OnFileOpen()
{
 LPCTSTR lpszFileName;
 {
   // ここで自作のファイルオープンのダイアログから得たパスを
   // lpszFileName に格納
 }
 CWinApp::OpenDocumentFile(lpszFileName);
}

見たいな感じ。
0165デフォルトの名無しさんNGNG
CWndを直接継承したウィンドウを作成しているのですが、
この際ウィンドウのスタイルを
WS_CHILD
でなおかつ、
WS_EX_CLIENTEDGE (ウィンドウの境界が3D)
にしたいと思っています。

CWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
で、
lpCreateStruct->dwExStyle
をいじくったりしていますが上手くいきません。

よい方法があれば、或いは不可能であるのならば
その旨を教えて下さい。
そもそも、CWndを直接継承してウィンドウを作って良いのか否か
も分からないのですが…。
0166デフォルトの名無しさんNGNG
PreCreateWindowを使うのだ、>>165よ。
0167165NGNG
>>166
ありがとうございます。上手くいきました。

また質問なんですが、
CWnd::OnMouseWheel()
のところが上手くいきません。
これもまた、CWndから直接継承されたウィンドウなのですが。
ほかの、OnMouseMove()などはちゃんと反応するのですが…

0168 NGNG
perlみたいな正規表現は使えませんか
0169デフォルトの名無しさんNGNG
>168
DLLを使用してもよいなら
正規表現 DLL
で検索を、、
0170170NGNG
いくつかのCStaticが重なった時に、その表示順を変えることってできますか?
たとえばCStaticのAとBがあります。どちらもビットマップが表示されています。
AがBの上に重なっているとして、マウスでBをクリックすると、
BがAの上にくるように表示しなおすことってできますか?
もしできなければ、ほかのコントロールを使ってもいいので、
似たようなことができますか?
0171171NGNG
>>170
できるよ
0172170NGNG
>>171
どういう方法がありますか?
0173あNGNG
>170
SetWindowPos
で無理か?
0174動画無料サンプルNGNG
ブルマ・水着・セーラー服でスケベな事してる
小学生、中学生、女子高生が【無料】で見れる!!
http://www.traffimagic.com/WIPE7MMLZCA/comein/NZKYA
0175デフォルトの名無しさんNGNG
VC++6.0でMDIのプログラム作りたいんだけど
で、子ウィンドウはダイアログベースで作ったものをそのままはめ込む
ようにしたいんですが、どのような手順で作ればよいのでしょうか?
0176デフォルトの名無しさんNGNG
全ウインドウ(トップレベルウインド、チャイルドウインド)のZオーダーを取るにはどうすればいいですか?
ウインドハンドルを渡すとZオーダーを返してくれるとか、そういうのありますか?
GetNextWindow以外でお願いします。。
0177デフォルトの名無しさんNGNG
>>175
CFormViewにしとけ
0178デフォルトの名無しさんNGNG
>>176 何で GetNextWindowは不可なのか?
0179突然ですがNGNG
1000とってゴメソ>SITNAM
0180デフォルトの名無しさんNGNG
>>178
13文字で不吉だからと思わ
0181デフォルトの名無しさんNGNG
SDIでプリンターの用紙サイズを自動にA3にしようと、
C**View::OnPreparePrintingで

DEVMODE* pDev=(DEVMODE*)GlobalLock(pInfo->m_pPD->m_pd.hDevMode);

pDev->dmPaperSize=DMPAPER_A3;
pDev->dmOrientation=DMORIENT_PORTRAIT ;
pDev->dmFields= pDev->dmFields | DM_PAPERSIZE | DM_ORIENTATION ;
GlobalUnlock(pDev);

とやってるのですが、デフォルトのA4のままです。プリンタの設定の
ダイアログを使わずにどうやってA3に出来ますか?
0182デフォルトの名無しさんNGNG
>>181
わからんけどCreateDCでHDCを作り直すんじゃねーの
0183デフォルトの名無しさんNGNG
MFCでダイアログアプリ作って実行したらやたらリソース食うんだけど、
これって使ってるコントロールの数とかモロに影響します?
0184デフォルトの名無しさんNGNG
Windowsの終了間際に
不特定多数のコピーを行いその後
シャットダウンを続行したいのですが、
うまくいかなくて困ってます。

BOOL CTestDlg::OnQueryEndSession()
{
if (!CDialog::OnQueryEndSession())
return FALSE;

// TODO : ここに特定なクエリの終了セッション コードを追加してください。

CopyFiles();//不特定多数のファイルのコピー処理
  return FALSE;
}
実際書いてみると、コピー処理が長く、
応答が無いから終了しますか?みたな
プログレスバー付きのダイアログが表示されてしまいます。
これはちょっと不自然なので、どうしたらいいでしょうか?
0185184NGNG
↑書き忘れました。
環境はWinXP VC.NETです。
よろしくお願いします。
0186デフォルトの名無しさんNGNG
>>184
根本的に、終了間際に時間のかかる処理はするなってこった。

適切な対処法は知らんけどさ。とりあえず、OnQueryEndSessionで
FALSEを返しておいて、OnEndSession で CopyFiles() を読んんで処理が
終わった後、ExitWinodowsするとか。
0187デフォルトの名無しさんNGNG
これ。

BOOL exitFlag = FALSE;

BOOL CTestDlg::OnQueryEndSession()
{
  return exitFlag;
}

void CTestDlg::OnEndSession(BOOL bEnding)
{
  if(!bEnding && !exitFlag) {
    CopyFiles();
    exitFlag = TRUE;
    ::ExitWindows(0,0);
  }
}
0188184NGNG
レスありがとうございます。
この方法でいけそうです。
ありがとうございました。
0189VC初心者NGNG
処理に長い時間がかかる場合に×ボタンが利かなくなったりするのですが
VBでいうDoEvents()にあたる関数を教えていただけませんでしょうか?
0190あNGNG
>189
おいおい、俺はVB知らんから
教えてやろうにも教えてやれない。
そこで検索してみることにした。
VB DoEvent
見事にヒットした。
代わりに検索して欲しいと言う依頼ですか?
出直してきなさい。
0191VC初心者NGNG
ありますた…スミマセン

void DoEvents(void){
MSG msg;
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) != 0){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
0192デフォルトの名無しさんNGNG
>189
DoEventsは知らないけどAfxBeginThread辺りを調べてみて。
0193VC初心者NGNG
ありがとうございます。MSDN見てみたのですが
全然わからないので無理っぽいです。(汗

とりあえず、上のDoEvents()でうまくいきました。
0194今田純NGNG
入力した数を計算したあと文字として出力したいのですが、
以下のコードではだめなんですが、どこをどうなおせばいいのか、
おしえてください。おながいします。

void CMy1Dlg::OnButton1()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
CEdit* e1 = (CEdit*)GetDlgItem(IDC_EDIT1);
CListBox* l1 = (CListBox*)GetDlgItem(IDC_LIST1);
CString s1;

e1 ->GetWindowText(s1);
l1 ->InsertString(-1,s1);
}

void CMy1Dlg::OnButton2()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
CEdit* e2 = (CEdit*)GetDlgItem(IDC_EDIT1);
CListBox* l2 = (CListBox*)GetDlgItem(IDC_LIST1);
CString s2;
char buf[50];
double n1;
double n2;

e2 ->GetWindowText(s2);
n1 = atoi(s2);
n2 = n1 + 1;
sprintf(buf,"%d",n2);
l2 ->InsertString(-1,buf);
}
0195今田純NGNG
特にこの辺がだめぽいんです。
e2 ->GetWindowText(s2);
n1 = atoi(s2);
n2 = n1 + 1;
sprintf(buf,"%d",n2);
l2 ->InsertString(-1,buf);
0196あNGNG
>195
だめっぽいのはわかったけど、
どうだめっぽいの?
0197デフォルトの名無しさんNGNG
>>195
結果が表示されないとか?
0198デフォルトの名無しさんNGNG
リストボックスっていうのはUpdateDataは必要ないのかい?
0199あNGNG
>198
当たり。
自信なくてUpdateData(FALSE);
ありとなしの両方のコード書いてきたら
なしじゃ結果が表示されなくて、
UpdateDataしたらいけたよ。
よって解決。
0200今田純NGNG
194-195です。

>>196-197
結果は表示されますが、おかしいです。
数字が出力されてほすぃのに、文字が「フ0」とかでます。
>>198
UpdateData。。。なんでしょう。。あたらしい言葉だ。。
調べてきます。
sprintf(buf,"%d",n2); を
sprintf(&buf,"%d",n2); にしました。

Editboxに「1」を入力したら、Listboxに「2」とでてほすいのですが、、
「フ0」(フは半角)
と表示されますた。
editboxが空だと「0」と表示されます。
ウトゥです。
0201今田純NGNG
さそーく、やらしてもらいます。
ありがとうございました。
0202デフォルトの名無しさんNGNG
>>200
> sprintf(&buf,"%d",n2); にしました。

あほう。
0203今田純NGNG
&bufはなおしました。
「あ」さん
UPDATEDATAってコードのどこに書き込めばよいのでしょうか?
教えてください。オナガイします。
これで僕の最初のVC++プログラムが動く。。かもです。
0204デフォルトの名無しさんNGNG
atoi関数ってCStringに対応してるのか?
0205デフォルトの名無しさんNGNG
UpdateData(TRUE)でダイアログ上のコントロールの値を対応する変数に代入する
UpdateData(FALSE)で変数の内容をコントロールに表示する
普通は変数を処理する前にTRUEで処理した変数の内容を表示する場合にFALSEだから
メッセージハンドらの最初にTRUE、最後にFALSEが一般的では?
0206今田純NGNG
ありゃ?
cahrじゃないとだめですか?
教科書もチャーで書いてあるし、、
0207デフォルトの名無しさんNGNG
それと余談だけどGetDlgItem(IDC_EDIT1)の戻り値をポインタ変数を宣言して代入して

e1 ->GetWindowText(s1);
l1 ->InsertString(-1,s1);

としなくても、戻り値がコントロールのポインタなので戻り値をそのまま利用して

GetDlgItem(IDC_EDIT1)->GetWindowText(s1);
GetDlgItem(IDC_LIST1)->InsertString(-1,s1);

これでOKだよ
この方がわかりやすいでしょ?
0208デフォルトの名無しさんNGNG
CStringはクラスですよ
0209今田純NGNG
つまり、char でないとだめだと。
文字列の中身をcharに直さないと。
ということですね。
0210今田純NGNG
あああぁぁぁぁぁ!
わかっているつもりだttが、わかってないことがわかってしまったあぁ!

歩いたら道が伸びていく感じです
0211デフォルトの名無しさんNGNG
クラスウィザードでエディットコントロールに変数を割り当てる時にCStringではなくて最初からintを割り当てればいいんじゃない?
0212今田純NGNG
>>205,207どうもです。やってみました。
>>208クラス。。クラスってなんか塊みたいなものですよね。代入不可ですか
>>211僕もとてもそうしたいですが。。
GetWindowText(s1);
InsertString(-1,s1);
とかが使えないと、ファイル入出力ができなくないですか。
テキストファイルからデータを読んで、数値計算をして、
結果をテクストファイルで出力したいんです。
0213デフォルトの名無しさんNGNG
UpdateDataは関係ねーべよ。

 e2 ->GetWindowText(s2);
 n1 = atoi(s2);
 n2 = n1 + 1;
 sprintf(buf,"%d",n2);
 l2 ->InsertString(-1,buf);

ここらへんをステップ実行して、s2,n1,n2,buf の値を調べてみれ。
どこで変数の値が化けるのか分かるから。
0214デフォルトの名無しさんNGNG
ちゅーか、

 e2 ->GetWindowText(s2);
 n1 = atoi(s2);
 n2 = n1 + 1;
 l2 ->SetWindowText( itoa( n2, buf, 10 ));

ではダメなん?
0215デフォルトの名無しさんNGNG
atoiにCString渡してもVC上では問題ないと思ったが
0216デフォルトの名無しさんNGNG
n1,n2はなんでdoubleなの?
0217デフォルトの名無しさんNGNG
このスレ最近ふわふわしてるな
0218デフォルトの名無しさんNGNG
>>215
VC上っつーか、CString::oprator LPCTSTR()があるんで、
TCHARがcharならば、C++的に問題なし。
0219デフォルトの名無しさんNGNG
>>216
カッコイイからじゃないか?
0220今田純NGNG
>>213 ステップ実行なんて高度な技を。。ついに学ぶときが来たのですね!
>>214おお!atoiがあるならitoaもあるはず!なんで気づかなかったのか!
>>215どもですー。
>>216数値計算に使いたいからですー
>>217僕が地に足の着いてない生き方だからです、すんまそん。
>>218LPCTSTR()って何の略なのかすらわかりませぬ。とりあえずNO問題?
0221デフォルトの名無しさんNGNG
>>220
> おお!atoiがあるならitoaもあるはず!なんで気づかなかったのか!

C標準関数じゃないから。
0222デフォルトの名無しさんNGNG
>LPCTSTR()って何の略なのかすらわかりませぬ。とりあえずNO問題?
略っていうかCSTRINGのメンバ関数だよ
0223デフォルトの名無しさんNGNG
>>220
あなたが参考にしてるという教科書にはクラスに関する解説はないの?
0224デフォルトの名無しさんNGNG
まだVC初心者スレに留まっていた方が良かったのかも
0225今田純NGNG
221-222>>みなさん、CStringの中とか読んでるんですか?
223-224>>そんなこというなよ、ウワァァァンヽ(`o´)/
0226デフォルトの名無しさんNGNG
>>225
君が使ってるVC++が合法的に入手したものであればヘルプ機能が付いてるはず
VCのヘルプであるMSDNは素晴らしいツールだから是非使い方を覚えるべきだね
CStringのメンバについてもその使い方についても全て書いてあるからさ
まずエディタの中でCStringという記述を反転させて(記述がなければ記述してくれ)F1キーを押す
それから「該当するトピック」の中からCStringクラスメンバを選んでクリックする
0227デフォルトの名無しさんNGNG
>> の使い方が、ストリーム演算子みたいになってますよ(w
(それなら << か...どうでもいいや。)
0228デフォルトの名無しさんNGNG
CString hoge;
int num=12345;
hoge.Format("数値は%dですが何か?",num);

MessageBox(hoge,"test",MB_OK);
//(゚д゚)ウマー?
0229デフォルトの名無しさんNGNG
>>226
>エディタの中でCStringという記述を反転させて
カーソルを CString という文字列のどこかに置くだけで OK。
0230デフォルトの名無しさんNGNG
CString strTemp1(_T("変体ねーチャン"));
CString strTemp2 = strTemp1;

としてもほとんど処理速度に影響ないときいたのですが
どういう意味でしょうか?
0231あNGNG
あっ、偉いスレが伸びてるからびっくりしたよ。

>今田純
別に嫌味で言うわけじゃないけどさ、
はっきりいってMFCやるの早いよ。
クラスのこと分かってなかったら
MFCいじっても勉強っていうより
作った気になるだけじゃないかな。
MFCよりまずはクラスがなにか、
継承、カプセル化などについて学び、
その後SDKを学ぶことを強くオススメする。
0232今田同定NGNG
>>231
ふん、おめーよりはわかってるよ!
0233デフォルトの名無しさんNGNG
つーかMFCの方が簡単だべ。
C++の基礎とかわかんなくても何となく作れちゃうから。
0234デフォルトの名無しさんNGNG
>>230
>CString strTemp2 = strTemp1;
のときは文字列の内容自体はコピーしなくて、ポインタのコピーと参照回数++しか
しないことがいいたいんだろ

>>232
同定ageすんなよ
0235デフォルトの名無しさんNGNG
n1とかはdoubleなのにsprintfで%dつかってる。CString使うんだから
いちいち char buf[50]なんてやらんでよろし。DDXとか使わないんだったら


CEdit* e2 = (CEdit*)GetDlgItem(IDC_EDIT1);
CListBox* l2 = (CListBox*)GetDlgItem(IDC_LIST1);
CString s2;
int n1;
int n2;

e2 ->GetWindowText(s2);
n1 = atoi(s2);
n2 = n1 + 1;
s2.Format("%d",n2);
l2 ->InsertString(-1,s2);

でいいだろ。


こういう処理したかったら普通ClassWizard使ってエディットボックスの
値を反映させるメンバ変数使います。
0236デフォルトの名無しさんNGNG
>>220
>>216数値計算に使いたいからですー

すまん、doubleが使いたいのね。だったら%dじゃなくて%gとか%f。
atoiはatof使わないと少数切られるよ。
0237デフォルトの名無しさんNGNG
doubleならatofよりもstrtodの方が良いかも知れない。
0238VisualC++初心者NGNG
VisualC++初心者の者です。
アプリケーションを起動した時のみ一度だけ実行したい関数があるのですが、
その関数はCClientDCオブジェクトのアドレスを渡さなければなりません。
それでオブジェクトを作るためにCAppView::CAppView()にCClientDC DC(this)と
記述したのですが、どうも不安定になっていしまいました。(Appはプロジェクト名です)
OnDrawに同じコードを書くと問題無いようなのですが、何回も関数が呼び出されるわけには
いきません。何か方法ありませんか?
0239デフォルトの名無しさんNGNG
素直にsprintf()ではいかんの?
0240デフォルトの名無しさんNGNG
>>238
CAppView::OnInitialUpdate()に書いとけば?
0241デフォルトの名無しさんNGNG
doubleやfloatなら俺もsprinf使ってしまう罠。

>>238
フラグでも用意してやれば良いんじゃない?
0242あNGNG
>233
そりゃMFCの方が断然簡単だよ。
=SDKの知識が必要ないとは
別な気がするなぁ。
私はSDK->MFCの流れだけど、
SDKやってるからかなり分かりやすかったよ。
俺の使ってた本には、
船の操作方法はわからなくても
海を航海できるが、
最低限の舵取りなどは覚えておくべき、
みたいな例え方してたと思うけど、
ほんとその通りだと思うなぁ。
0243デフォルトの名無しさんNGNG
MFCやらSDKやら言う前の段階だろ。
単にヘルプとIDEの使い方知らない奴なんだから。
0244あNGNG
>243
確かに。
根本的なものが抜けてるね。
で、考え直したけど、つまりは
できないことじゃなくて、
できることからやってろ。
って言うのが結論ですかね。
頑張れ新人。
0245デフォルトの名無しさんNGNG
CAppView::CAppView()の時点ではまだウインドウが作られてないので、
CClientDC DC(this)なんてことしたら実行時にエラーで落ちるでしょうね。
ViewクラスにBOOL型のメンバ変数でも追加して、OnDrawで1回だけ描画
されるようにしたらいいと思いますよ。

>>240
その時点で描画しても多分描画されないと思う。
0246今田純NGNG
>>「あ」さん。読んでもわかんないから、聞きながらやります、
 なので、生あたたか〜く見守ってください
>>232いつもくるけど、道程じゃねえっていってるだろ!プンプン!
>>233-237レスさんくすこ
0247デフォルトの名無しさんNGNG
ダイアログベースのソフトで
メニュー->オプションで
オプション設定画面(ダイアログ)を表示するような
コードを書いたのですが、
もう結構進んだ段階なのですが、
オプション設定画面に置くべきコントロールが
増えてきたのでタブ式のオプション設定ダイアログに
変更したいと思ったのですが、
なにかいい方法はないでしょうか。
タブコントロールを使うのが一番早いでしょうが、
あれってリソースエディタ画面がコントロールで
ぐちゃぐちゃになりません?
必要に応じてShowWindowで切り替えるので
リソースエディタ開いたら1〜?ページぶんの
コントロールが表示されてる状態で。。
ページをタブコントロールで切り替える場合
リソースエディタの見た目入り混じって
ぐちゃぐちゃになりますが、こういうものなんでしょうか?
実際起動するとShowWindowで制御されてるので
普通に見えます。
0248デフォルトの名無しさんNGNG
>>247 そんなあなたに CPropertySheet
0249247NGNG
>248
やっぱりそうですよねぇ。
実は私もそう思ったんですが、
CDialogから派生したオプションダイアログなんですが、
これをAddPageするにはCPropertySgeetからの
派生クラスに変更しないといけないんですが、
なんか単純に public:CDialog
の部分を変更しただけだとコンパイルすら
通らない状態になってしまって。。
両方ともCDialogの派生クラスだからいけると思ったんですけどね。
なんか間違ってますか??
0250デフォルトの名無しさんNGNG
>>249
余裕で変更できる。

・ダイアログの基本クラスを、CPropertyPage(CPropertySheetではない) にする。
・ダイアログエディタで
  [無効] と [タイトル バー] プロパティにチェック
  [スタイル]→[チャイルド] 、[境界線]→[細枠]

・CPropertySheet::AddPage() , CPropertySheet::DoModal()
0251デフォルトの名無しさんNGNG
今日からVCに再挑戦してるだども、いきなりつまっただよ
CClientDC myDC(&m_pict); <====アソコ
m_pict.GetWindowRect(&pictSize);
.....
.....
myDC.SelectObject(&myRgn);

となっとるだどもアソコでは何をしてるんだべか?
CClient型のオブジェクトmyDCを作ってるのかと思ったら
m_pictというオブジェクトもできてるように思えるんだべが。
0252デフォルトの名無しさんNGNG
タブコントロールでグチャグチャって。。。?
タブ分のフォーム作って選ばれたタブによってフォームをSHOW,HIDEしてやれば?
0253デフォルトの名無しさんNGNG
>>251
>CClient型のオブジェクトmyDCを作ってるのかと思ったら
思ったとおり、引数にCWnd*がいるからm_pictはCWnd(または派生クラス)のはず
>m_pictというオブジェクトもできてるように思えるんだべが
まちがい、m_pictはすでに存在しているウインドウのはず
0254251NGNG
解決したべよ
.hファイルというものがあったのでそこ見てたらあったm_pictべ
.hファイルをしらなかったのでここから勉強することにするべ
いままでひとつのファイルしか使ったことなかったんで
知らなかったんだべよ
0255デフォルトの名無しさんNGNG
>>251
m_pictというウインドウに描画するためのCClientDCのオブジェクトを作ってます。
コンストラクタというものを勉強しましょう。
0256デフォルトの名無しさんNGNG
0x100げっと
0257251NGNG
>>253
書き込んでる間にお返事ありがと
.hに
CStatic m_pictとあったべよ
まだC(not ++しかーもーインタプリタ)はじめてから経験浅いのでつらいべよ
昔買ってぜんぜん使えなかったVC++をちょっと使ってみようかと思うったべよ
0258251NGNG
>>255
オラがもってるブックにはコンストラクタは
クラス名 オブジェクト名 = new クラス名();
としか乗ってなかったから
引数とることがありえることすらわからなかっただべよ
短時間にものすごい勉強させていただいたべよ
ありがとだべよ
0259デフォルトの名無しさんNGNG
>>251
どういたしましてだっちゃ
0260251NGNG
ブックに載ってないnewを使わいやり方も学んだべよ
0261デフォルトの名無しさんNGNG
#define nyu new
0262デフォルトの名無しさんNGNG
>>251
>まだC(not ++しかーもーインタプリタ
「しかーもー」は昔やってたクレアラシルのCMの外人口調でよむのか?

>オラがもってるブックにはコンストラクタは
>クラス名 オブジェクト名 = new クラス名();
>としか乗ってなかったから
別の本買ったほうがいいぞ、それはポインタの場合だけだからな
0263VisualC++初心者NGNG
>>240さん >>241さん
どうもありがとうございました。おかげで解決しました。
0264デフォルトの名無しさんNGNG
ダイアログアプリでタスクバーにボタンを登録されたくないのですが、
非表示の親ウインドの子にしてしまう方法でダイアログアプリのやり方を教えてください。
とりあえず、
1.CWinAppの派生クラスのInitInstanceでダミーウインドを作成
2.CDialogの派生クラスのPreCreateWindowでcs.hwndParentにダミーのハンドルセット

で、だめですた。。そもそもPreCreateWindowに来ないです。。
教えてください
0265デフォルトの名無しさんNGNG
ところでCTreeCtrlでアイテムのイメージの抜き色を
表示しないようにするにはどうすれば?(CImageListを使ってます

なんか上手くいかなくて
(抜き色部分が黒で表示されてしまうなど
サンプルソースどこかのサイトにありませんか?

0266デフォルトの名無しさんNGNG
>>264
1の非表示のウインドウってどうやって作ってる?
ダイアログをDoModal()するんじゃなくて、フレームウインドウか自滅型のダイアログを
CreateしてShowWindowするほうがいい。
で、WM_CREATEで表示させるダイアログをDoModalする。
2は意味不明。
0267247NGNG
>247での説明間違ってました。
リソースエディタ->ダイアログエディタでした。
>250
ありがとうござまいます。
今から言われたとおりにチャレンジしてきます。
また報告にきます。
>252
上で訂正しましたが、
起動画面上での話しではなく、
ダイアログエディタ上の話しでした。

0268デフォルトの名無しさんNGNG
VC+6.0なのですが、
unsigned longよりも大きな整数を扱うにはどうすれば
よいのでしょうか?
0269デフォルトの名無しさんNGNG
>>268
自作 or 64bitのCPUつんだパソコンが出るのを待つ
0270デフォルトの名無しさんNGNG
>>268
__int64は?
0271デフォルトの名無しさんNGNG
>>269
お前は、多倍長計算と言うものを知らんのか ? 8086 のコンパイラでも、
32bit 整数をサポートしてる奴はいくらでもあるぞ。
0272268NGNG
>>270
MSDN見てみます。ありがとうございました。
0273デフォルトの名無しさんNGNG
VC++6.0です。
タイトルバーの領域を取得して、タイトルバー上でのマウスの操作を無効にしたいです。
↓を使ってやりたいと思います。
UINT CMainDlg::OnNcHitTest(CPoint point)
{
   return CDialog::OnNcHitTest(point);
}
CPoint pointに今のマウスの位置が入ってくるみたいなのですが、
タイトルバー上にあるかどうか判定するにはどうしたらいいのでしょうか?
と、いうより、タイトルバーの領域の求め方を教えて下さい。
0274デフォルトの名無しさんNGNG
>>273
GetSystemMetricsとかでなんとかならんの?
0275デフォルトの名無しさんNGNG
>>273
SDK ならば DefWindowProc(hwnd, WM_HITTEST, 0, MAKELONG(point.x, point.y) ); で
HTCAPTION が返ってくればそこはタイトルバーやーってことなんだけど
このセンで何とかならんっすか?
0276デフォルトの名無しさんNGNG
>>275
ううむ、MFCでやってるのでよくわからないです。
いい加減、まともな文法覚えないといけないんですが。

よく見たらUINT OnNcHitTest(CPoint point)
の戻り値がHTCAPTIONだったらタイトルバー上ってことらしいです。
が、使い方がわかりません。
どこで使ったら(判定)したらいいでしょうか?

SystemMetricsはよくわからなかた。
0277デフォルトの名無しさんNGNG
UINT CxxxDlg::OnNcHitTest(CPoint point)
{
UINT nHit = CDialog::OnNcHitTest(point);
return (nHit == HTCAPTION) ? HTNOWHERE : nHit;
}

とか。
0278276NGNG
>>277
ありがとうございます。

大丈夫みたいです。
でも、return〜の行がなにやってるかわからない(汗
?とか:とか。

0279デフォルトの名無しさんNGNG
三項演算子をぐぐれ
0280276NGNG
>>279
ありがとん!
今日帰ったら調べてみるよ。
0281デフォルトの名無しさんNGNG
リストビューのヘッダ上で右クリックしたことを知るにはどうすればよいですか?
エクスプローラではカラムのリストがコンテキストメニューとして表示されますが、
ああいうことをやりたいのです。
0282デフォルトの名無しさんNGNG
CInternetSession や CHttpConnection 等を使ってWebサイトからファイルをダウンロードするプログラムを作ってます。
複数のスレッドを立ち上げて同じサーバからファイルを同時にダウンロードしたいのですが、
CInternetSession や CHttpConnection クラスのインスタンスは1つでいいのでしょうか?
それとも、スレッドごとに作成しなければいけませんか?
0283デフォルトの名無しさんNGNG
>>281
ヘッダに関してはHDN_XXXXXXメッセージを処理。
0284デフォルトの名無しさんNGNG
>>283
実際にやってみそ。メッセージ飛んでこないから。
0285デフォルトの名無しさんNGNG
>>284
あああそういえばそんな話を聞いたことがあったような。スマソ。
OnNotifyオーバーライドするしかないのか?
0286285NGNG
てか、そもそも右クリックを処理するメッセージがないのね。
重ね重ねゴメン。
0287デフォルトの名無しさんNGNG
>>281は CodeGuru にありそうな典型例ですな
0288VisualC++初心者NGNG
ゲームの効果音としてWAVファイルを再生したいのですが、いろいろ調べても
適当な方法が分かりません。
細かいところは自分で調べるので、おおまかな手順を教えてください。
お願いします。
0289デフォルトの名無しさんNGNG
>>281
ヘッダコントロールをサブクラス化すればできるんじゃないのかな。
Spy++でメッセージ見てみれば?

>>288
MFCにまるで関係なさげだが…

1.DirectXを使ったラッパライブラリを使う(沢山あるよ)
2.DirectXを自分で使う
3.MMsystemを使う

こんなとこかね…
0290デフォルトの名無しさんNGNG
MFC初心者です。
Windowsのエクスプローラのようなプログラムを作ろうと思っています。
この場合、ドキュメント・ビューアーキテクチャーのサポートは
する必要があるのでしょうか?
データファイルの入出力はないので必要ないと思うのですが、どうでしょう?
0291デフォルトの名無しさんNGNG
>>290
ドキュメント・ビューアーキテクチャーがわかりにくかったら
こういうケースでは特に使う必要は無いと思う
まあ、普通にアップウィザードでSDI,MDIアプリをつくると
勝手にサポートしてしまうけどな
ドキュメント・ビューアーキテクチャーになったらなったで
あまり気にせず作るのもありだと思うがな
0292デフォルトの名無しさんNGNG
> ドキュメント・ビューアーキテクチャーになったらなったで
> あまり気にせず作るのもありだと思うがな
なるほど。
実はプロジェクトの新規作成(SDI)で、分割ウィンドウを作成するには
「ドキュメント・ビューアーキテクチャーのサポート」にチェックを入れないと
駄目みたいだったので、どうしようかな〜と思って質問してみました。
ドキュメント・ビューアーキテクチャーをサポートしても、exeのサイズ
がそんなに変わらないのであれば、そうしようと思います。
0293VisualC++初心者NGNG
>>289
3番の方法で音を鳴らすことができました。どうもありがとうございました。
0294デフォルトの名無しさんNGNG
age
0295デフォルトの名無しさんNGNG
CTreeViewでツリーを表示しているのですが
アイコン位置にチェックボックスを出したいのですが
どうすれば良いでしょうか?
0296デフォルトの名無しさんNGNG
exitを使ってプログラムを終了させると落ちるのですがだめなのでしょうか。
0297あNGNG
>295
俺は自分でチェックボックスの
オンとオフのイメージを用意して
必要に応じてイメージを入れ替える、
という方法で実装できた。
でもなんか間違ってる気がするんだが。。
0298デフォルトの名無しさんNGNG
>>295
CTreeCtrl::SetCheck()っていうのがあるけど、使ったこと無いから知らん
タメシテレポートキボンヌ
0299デフォルトの名無しさんNGNG
OnInitDialog()
の中でソフトの起動を止めたいときは
どうすればいいでしょうか?
PostQuitMessage(1)
にすると
一瞬メインウィンドウが表示され困ってます。
0300デフォルトの名無しさんNGNG
>TreeViewにチェックボックス
TVS_CHECKBOXESというスタイルがある。
(MSDNでTree-View Control Window Stylesを検索すればスタイル一覧がみつかる)

ダイアログにツリービューコントロールを貼ってプロパティで
スタイルを見ると、チェックボックスをつける項目があるので
そういうスタイルがあるんだろうなと予想できる。
0301デフォルトの名無しさんNGNG
300ゲットやねん。
MFCのアップウィザードで作ったダイアログベースアプリやったら
CxxxApp::InitInstance() で処理したらど〜や
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (´´
    ,---..、- 、,-、        (´´
    .ivvvi:i::'.、. ヽ}      (´⌒(´
  ⊂j(゚ヮ゚j;;!⊂} }⊃≡≡≡(´⌒;;;≡≡≡
       ̄ ̄ ̄ ̄ (´⌒(´⌒;;   ズザーーーーーッ
0302301NGNG
        ,.r''" ̄``ヽ、
          /::::;:ハ:::::::::::::::',
        l:{レム! ';i'、!;:::::::::!
       |::';‐- -‐-i:::::::|
       |:::i,! |r‐、| l,!:::::::l  300取られへんかった
          !l::i;`r'テ'i"i|::::;、:|
        il、li´''‐--,i/リ;ヾ
           / |▽▽▽! `、
0303299NGNG
>301
それもそうですね、今書き換えてきました。
ちなみにCxxDlg::OnInitDlg()関数内部では
無理なんでしょうか?
今後の参考に。
0304びひゃ〜ん ◆Ec4xpdlg NGNG
>>303
「OnInitDlg()をオーバーライドする場合、まず基本クラスのOnInitDlg()を呼び出す」
ってとこに答えがあるような...
0305299NGNG
>304
なるほど、
納得できました。
ありがとうございます。
0306デフォルトの名無しさんNGNG
>299
InitDialog中でEndDialog
0307デフォルトの名無しさんNGNG
>>299
EndDialog
0308デフォルトの名無しさんNGNG
>>299 EndDialog
0309299NGNG
>306-308
EndDialog
0310デフォルトの名無しさんNGNG
EndDiabloに見えてきた。鬱だ寝よう
0311デフォルトの名無しさんNGNG
MFCって時代遅れじゃないよね?
まだ使えますよね?
0312デフォルトの名無しさんNGNG
>>311
ユーザーに高性能なPCを買わせる(買い替えさせる)ために.NETが推奨される
0313デフォルトの名無しさんNGNG
 MFCのコンボボックスで、
編集・選択可能なコントロールを作成して、
aaa,bbb,ccc というアイテムを登録した状態で、
エディトボックスに"ddd"と入力します。

 この状態で、↓を下げて、"ccc"を選択すると、
WM_SELCHANGE が来るのですが、
ここで、その処理を中止したいので、
csCombo.SetWindowText( "ddd" ) と書きましたが、
コンボボックスは"ccc"になってしまいます。

 何か回避策は無い物でしょうか。
(出来ればTimer等を使用しない方向で・・)

 よろしくお願いします。
0314あNGNG
>313
なにをしたいのかよくわからんが、
dddと選択されたくない、と思ってるなら
スタイルをドロップダウンリストにすればいけるよ。
0315313NGNG
>>314
既存で登録されている物はリストに出るんですが、
好きな名前を入れると、その名前で新規登録できるような仕組みです。
 ただ、SELCHANGEの時に、本当に変えて良いか確認するのですが、
ここで、『変えない』とされた場合に、元に戻すようにしたいのですが、
それが上手く行かないという状況です。

0316デフォルトの名無しさんNGNG
>>315
入れたい場合はAddStringで追加してやれば?
0317デフォルトの名無しさんNGNG
>>315
|ON_CBN_SELCHANGE
| このメッセージを処理するとき、コンボ ボックスのエディット コントロール
| 内のテキストを取得するには、GetLBText 関数または別の同種の関数を使いま
| す。GetWindowText 関数は使えません。
これ、大丈夫?
0318デフォルトの名無しさんNGNG
↑あ、関係ないか。スマソ。
0319デフォルトの名無しさんNGNG
>>315
CBN_SELENDOKでやったらどうか、と勘で答えてみる。
いずれにせよ、SELCHANGEだと矢印キーで移動するたびに
確認メッセージが出ることになるので良くない気がするもより。
0320313NGNG
>>316
まだ、それは確定アイテムでは無いので、そういう訳にも。

>>319
よく考えたら、そうですね。
当方、マウスオペレーションしか考えてませんでした(^^;
とりあえず、SELENDOKの方で変えるように、これから変更してみます。
0321313NGNG
319さんからの ご指摘の通り、SELENDOKの方に移してみましたが、元々のやり方では駄目でした。
(すべて、SELENDOKのハンドラの中で記述し、直後にreturnしてます)

(不可A) →全く無視され、変更後のセルの内容が表示されます
m_csCombo.SetWindowText( "元に戻したい文字列" );
(不可B) →DeleteString実行時に、エディト内容が心中します。
lIndex = m_csCombo.AddString( "元に戻したい文字列" );
m_csCombo.SetCurSel( lIndex );
m_csCombo.DeleteString( lIndex );
(不可C) →Spyで見たところ、WM_SETTEXT自体が来てませんでした。
::PostMessage( m_csCombo.m_hWnd, WM_SETTEXT, 0L,
 (LPARAM)"元に戻したい文字列" );

(悩み続けても生産効率が悪いので。)
PostMessage( WM_USER+77, 0, 0 );

WindowProc( ... )
{
 if( message == WM_USER+77 ){
  m_csCombo.SetWindowText( "元に戻したい文字列" );
  return 0;
 }
}

 コードが汚くなってしまったのが口惜しいのですが、
とりあえず、これで目的の動作をしてくれました。
ご助力頂き、ありがとうございました。

もし、もっと良いコードが有れば、是非教えて下さい。
0322デフォルトの名無しさんNGNG
CListCtrl (リストビューコントロール) で、レポートビューの時に、ヘッダーと
実際の値で異なるフォーマットを指定したいんですが、できないのでしょうか ?

要は、ヘッダーに「ファイルサイズ」と表示して、各々のファイルサイズを表示
したいんです。実際のファイルサイズは数値なので当然右詰で表示するんだけど
ヘッダーは中央揃えの方が美しいと思うので...。

Explorer なんかだと、両方とも右詰で表示されているのでできないのかなぁ...。
0323デフォルトの名無しさんNGNG
>>322
オーナードロー
と「リストビュー」だけ見て条件反射で書き込んでみるテスト。
0324322NGNG
>>323
う〜〜〜ん、それしかないか...。何で別々に指定できないかなぁ...。
第一、タイトルなんて常に中央揃えで良いと思うし...。

と、愚痴を言ってても始まらないので、とりあえずオーハードローでしこしこ
やってみます。ありがとう。
0325デフォルトの名無しさんNGNG
俺もリストビューについて質問。
行の高さを動的に変更したいのですがどうすればよいでしょうか。
1行目は高さ20、2行目は高さ30、、、というふうに各行を任意の高さに
変更したいのです。
オーナードローでWM_MEASUREITEMが送られてくる時点ではまだ高さはわからず、
実行時に任意の高さに変更できるような仕様です。
0326デフォルトの名無しさんNGNG
>322
Header Controlに対してだけ、CustomDrawを仕掛けたら?
0327デフォルトの名無しさんNGNG
つか、HeaderControlにHDM_SETITEMを送れば済むかナ?
0328デフォルトの名無しさんNGNG
便乗気味に質問ですけど、CListCtrlってリサイズ時に凄くちらつきません?
CTreeCtrlは全然ちらつかないのに…
0329デフォルトの名無しさんNGNG
C++.NETを買ってMFCで使ってみたのですが、ClassWizardが見つかりません。
コントロールに対応する変数を作れないのです。どうすればよいのでしょう。
お願いします。
0330デフォルトの名無しさんNGNG
なんと!!
C++.NETってのも出たのか。
知らんかった。
0331あNGNG
>329
コントロールを右クリックして変数の追加
0332デフォルトの名無しさんNGNG
OFFICE XP風のメニューにするにはどのようにすればよいのでしょうか?
0333デフォルトの名無しさんNGNG
初心者ですが
この間VC++初めて使ってクイズプログラム作ってみたんだけど

テキストに書いてある
「はろ〜わ〜るど」のプログラムからはじめるやつっているの?
意味不明だし..
0334あNGNG
>333
テキスト??
学校のテキストか?
んなの知るかよ。
俺の初心者時代に使った本に載ってある
Hello,World!!には
Windowsの仕組みを知る上で大事な
ファーストステップだった。
書きたくなきゃ書くなよ。
0335329NGNG
>>331
ありがとうございます。
普通のボタンなどはうまくきました。
しかし、ラジオボタンはどうしても変数が作れません。
VC6でやっていたようにグループボックスを貼り付け、
ラジオボタンをいくつか貼り付け、
一番上のラジオボタンのIDを変え、そのラジオボタンを
右クリックして「変数の追加」を選んでも、そのIDが
出てこないのです。

どうすればよいのでしょう?
教えて君ですみませんが、よろしくお願いします。
0336あNGNG
>335
グループ化したいラジオボタンの
タブオーダーの一番若いやつを
右クリック->プロパティ
Group true
にしたらいけると思うよ。
今確認したらいけたから。
0337335NGNG
>>336
ありがとうございます。
やってみたら、できました。
#言われてみればその通りで、お恥ずかしいです。
0338あNGNG
>337
そうか、一件落着だな。
そういえばラジオボタンで思い出したけど、
俺のところではなぜか三つ以上のラジオボタンに値を割り当てることが
できない。
VC6で確かintに出来たはずなんだけどなぁ。
.NETでGroup true にしてから
タイプをValueにして手動で
BOOLからintに打ち変えても
ちゃんと動かないんだなぁ。
なんでだろ。
仕方ないのでGetDlgItemを使用した
SetRadioButton()とGetRadioButtonを自作してるよ。
みんなこうなの?便乗だけど。
0339337NGNG
>>338
あ、ほんとですね。ラジオボタンをintにできない。ちょっと鬱。
うーん、俺はGetCheckedRadioButtonを使ってみます。
0340デフォルトの名無しさんNGNG
タブオーダーが実は変とか。Ctrl+Dで確認してみては如何か。
0341デフォルトの名無しさんNGNG
俺も便乗なんだけど、ラジオボタンの背景って灰色になっちゃうよね。
別の色にする方法ってあるのかな。
0342あNGNG
>340
アドバイスはありがたいが違うと思う。
ちなみにそのまま書くが、
俺のCtrl+D押した時のタブコントロールのタブオーダーは
5-6-7
で、5がgroup true になってる。
0343デフォルトの名無しさんNGNG
>VC6で確かintに出来たはず
VC6使ってるが、できるの?
というか DDXのことを言ってるのだったら、その変数は対応する1つのラジ
オボタンの状態しか反映しないので、どのラジオボタンにチェックが入って
いるかを調べるには、結局 GetCheckedRadioButton みたいなことやらないと
ダメなんじゃないの?(DDXあまり使わんので...)
0344あNGNG
>343
調べなおしてみたけど
CWnd::GetCheckedRadioButton(int nIDFirstButton, int nIDLastButton);
選択されてるラジオボタンを調べるこんな関数もあったのね。
知らなかった。
でもDDXでintに割りあてれなかったかなぁ。
VC6使ってる人レポート求む。
0345デフォルトの名無しさんNGNG
>>344
VC6ではintにしかできなかった(もちろん値の場合)
単にダイアログにラジオボタンを配置しただけではクラスウィザードの
メンバー変数ページにはIDC_RADIO1は表示されなかった。
ダイアログエディタでラジオボタンのプロパティのグループにチェックを入れると
クラスウィザードで表示されるようになった
0346あNGNG
>345
レポートありがとう。

>ダイアログエディタでラジオボタンのプロパティのグループにチェックを入れると
>クラスウィザードで表示されるようになった
この状態では多分クラスウィザード内では
型はBOOLだったと思うんだけど、
ここで「int」とか選択できたり
書き返れたりはしない?
0347325NGNG
>ラジオボタンにint割り当て
VC6。ラジオボタンの一つのグループ属性をオンにするとClassWizardで
int型メンバ変数が割り当てられる。
どのラジオボタンが選択されているかは
 UpdateData();
 int nCheck = m_int_radio; // m_int_radioはClassWizardで割り当てたint型メンバ変数
とする。nCheckに選択されているラジオボタンの0ベースのインデックスが入る。
つまり、次のようなボタンの配置の場合、
 ○ 項目1
 ○ 項目2
 ◎ 項目3
三番めの項目が選択されているのでnCheckには2が入る。

>>341
OnCtlColorで他のコントロールと同様に変更できるよ。
if(pWnd->GetDlgCtrlID() == IDC_RADIO3){ // IDC_RADIO3はラジオボタンのID
  // ここで色変更処理
}
みたいな感じで。

で、>>325なんだけど誰かリストビューの各行を別々の高さにする方法知らないかなぁ。
CodeGuruとかCodeProjectに出てるオーナードローの例は全行同じ高さのしか
無いようなんだよねぇ…
0348347NGNG
上げ忘れたage。
0349デフォルトの名無しさんNGNG
 ってなに?
0350345NGNG
>>346
>VC6ではintにしかできなかった(もちろん値の場合)
intのみ選択可能、BOOLはなかった
0351あNGNG
>347
分かりやすい解説ありがと。
結論をまとめると
VC6ではラジオボタンを
DDXでint型に設定できる、ということですね。
VC.NETではVC6のように
BOOL型に割り当てることは可能なのですが、
.NETにてラジオボタンにint型を割り当てる方法を
ご存知の型いませんか?
それとも出来なくなっちゃったのでしょうか?

>325はお力になれそうにありません。
申し訳ないです。
0352343NGNG
>>346
スマソ。>>343はでたらめだった(;´Д`)
VC6では、確かに、ラジオボタンのグループの最初のラジオボタンに int を
割り当てられるようになっていて、
  m_radio = 2;
  UpdateData( FALSE );
とかやると、グループ3番目のラジオボタンにチェックが入るね。
0353343NGNG
とかいって >>347と内容がモロかぶってるし...鬱だし脳
0354デフォルトの名無しさんNGNG
> .NETにてラジオボタンにint型を割り当てる
.NETは持ってないんだけど、手動でDoDataExchange()内に
DDX_Radio(pDX, IDC_RADIO1, m_radio_1);
と追加できないんだろうか?
0355 NGNG
dswがあるソースはクリックしてビルドでコンパイラ
出来るけどdswがない場合は空のワークスペースを作って
ファイルを挿入するだけでよさそうに思うけどエラー0で
コンパイラ出来たためしがありません。どこが間違ってる
のでしょうか?
0356デフォルトの名無しさんNGNG
意味がわかりません。
0357デフォルトの名無しさんNGNG
OfficeXP風なメニューを作りたいけどサンプルない?

http://www.codeguru.com/menu/owner_drawn_menu3.shtml

を見つけたけどほかにサンプル知ってる人いる?
0358デフォルトの名無しさんNGNG
355じゃないけどcppとhだけのソースをvisualCで
コンパイラ(ビルド)はするにはどうやればよい?
0359あNGNG
>358
プロジェクト作ってコピペでいいんじゃないかなぁ。
0360デフォルトの名無しさんNGNG
空のプロジェクト作ってファイルを追加。
0361デフォルトの名無しさんNGNG
>>358
355じゃないと書いてるけど355ちゃうんか。
"コンパイラ"したいんでしょ?
0362デフォルトの名無しさんNGNG
cppがひとつならダブルクリックしてビルドが早い。
あらかじめ空のフォルダに移しておかないと面倒なことになるけど。
0363362NGNG
ダブルクリックしてVC++を立ち上げてからビルドね。
0364あNGNG
>361
ほんとだ、するどいねw

>355==>358
だね。
ふたりともコンパイラしたいのか。。
0365デフォルトの名無しさんNGNG
>>325
リストビューにはLVS_OWNERDRAWFIXEDしかないみたい。
リストボックスなら高さ可変にできるので、そっちで頑張るというのはいかが。
0366デフォルトの名無しさんNGNG
>363 355=358 ですが、355の文読み直したら
痛い文章だったので他人のふりしましたがばれましたか・・
0367デフォルトの名無しさんNGNG
355じゃないけどasmのファイルをVCで
アセンブリするにはどうすればよい?
0368デフォルトの名無しさんNGNG
え、できるの?
0369367NGNG
え、できないの?
アセンブリは無理でもアセンブルならできると思ったんだが。
0370デフォルトの名無しさんNGNG
>>367 すれ違い
0371デフォルトの名無しさんNGNG
仕方がないのでリストビューをフォームビューに代えてListBox貼り付けるか・・・
0372デフォルトの名無しさんNGNG
単純アプリケーションの実行画面で
横に出るスクロールバーってもっと伸ばせないんでしょうか?
実行結果が最初の方が分からないからどういう動作してるか見たいんですが。
0373デフォルトの名無しさんNGNG
また意味不明な質問が…
0374デフォルトの名無しさんNGNG
オブジェクトを直接宣言する場合と、
 CTest oObj(Hoge);
一旦ポインタの形で宣言しnewする場合は、
 CTest* pObj;
 pObj = new CTest(Hoge);
どのように使い分ければいいのでしょうか?

具体的にはMDIアプリケーションの作成のところで
下記の記述が有ったのですが、なぜnewを使うのか
よく理解できません。
 CMultiDocTemplate* pDocTemplate;
 pDocTemplate = new CMultiDocTemplate(
  IDR_TEST88TYPE,
  RUNTIME_CLASS(CTest88Doc),
  RUNTIME_CLASS(CChildFrame),
  RUNTIME_CLASS(CTest88View));
0375デフォルトの名無しさんNGNG
スコープを外れても残したい時はnew。
きっとここよりC++スレ向きの質問。
0376デフォルトの名無しさんNGNG
>375
どうも有り難う。
ややスレ違いのようなので下記に移しました。
http://pc3.2ch.net/test/read.cgi/tech/1029315669/971
0377 NGNG
CSplitterWndを使ってプログラムを作成しようとしていま
す。
スプリットウィンドウを設定する時、

AAA.CreateView(0, 0, RUNTIME_CLASS(CBBBView),

とViewクラスで指定するわけですが、このビュークラスにメッセージを送ったり
したい場合、CBBBViewクラスのオブジェクトの実体名が指定してないわけですが、
そういう場合はどういう処理をすればいいのでしょうか?
0378デフォルトの名無しさんNGNG
タスクトレイ
0379デフォルトの名無しさんNGNG
>>357さんどうも有難う。
0380デフォルトの名無しさんNGNG
>>377
CSplitterWnd::GetPane()でCWnd*が取得できる、CBBBView*にするには
キャストしかないと思う(RTTI,RTCIでも使ってくれ)
MFC的にはドキュメント・ビューアーキテクチャに若干依存しているクラスなので
CDocument::UpdateAllViews()やCView::OnUpdate()をオーバーライドして
使用するのが最も楽な使用方法だと思う。
0381 NGNG
>>380
サンクス
0382デフォルトの名無しさんNGNG
別のスレに書き込んだけどスレ違いだからこっちで質問しろといわれたのでこちらにもう一度書きます。

MFCを使ってダイアログボックスを作る。
dlgをdomodalで作成する。
dlg内でEndDialgが使われる。
制御がdlgのdomodalしたところに戻らずにexeが終了するのは仕様でしょうか?

知っている方がいたらよろしくお願いします。
0383デフォルトの名無しさんNGNG
>>382
{
  ・・・
  CMyDlg dlg ;
  dlg.DoModal() ;
  ・・・      <ここにブレークポイント
}

でブレークしないで終了ということで?
0384デフォルトの名無しさんNGNG
戻ります。
0385382NGNG
>>383 , 384

一番最初のAppWizardでダイアログを作成したときの話です。
そのときにOnOKなどを押すとdlg.DoModal()の次の行にはいかずに終了しています。
0386デフォルトの名無しさんNGNG
"!"マークでデバッガ走らせてるとか、、、
ほかの場所のブレークは効きますか?
0387デフォルトの名無しさんNGNG
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: ダイアログが <OK> で消された時のコードを
// 記述してください。
TRACE("OK\n");  // ←ここにブレークポイントをおく
}
else if (nResponse == IDCANCEL)
{
// TODO: ダイアログが <キャンセル> で消された時のコードを
// 記述してください。
}

// ダイアログが閉じられてからアプリケーションのメッセージ ポンプを開始するよりは、
// アプリケーションを終了するために FALSE を返してください。
return FALSE;
------------------
0388デフォルトの名無しさんNGNG
デバッガで追ってみたけど、デフォルトのソースで「次の行」に行かないのは本当みたい。
int nResponse = dlg.DoModal(); // ここへブレークポイントを置き、OKで閉じる。
if (nResponse == IDOK)   // ここへは行かない。
{
 :
 :

ただし、以下のようにすればちゃんと「次の行」へ行くことは確認できる。
int nResponse = dlg.DoModal();  // ここへブレークポイントを置き、OKで閉じる。
TRACE("break point\n"); // ここへは行く。
if (nResponse == IDOK)
{
 :
 :
0389デフォルトの名無しさんNGNG
if (nResponse == IDOK)
{
  //何もしない
}
だったら、ここはスキップされ、ブレークポイントが自動的に後ろに移動する。
どっちにしろ、どこかでブレークするはずだが。
0390デフォルトの名無しさんNGNG
>>389
デバッグすると普通はステップがif (nResponse == IDOK) に行くけどそこを飛ばして
一気にreturnまで行ってる。
って俺は>>382じゃないけど。

まぁ「DoModalの次の行が実行されてない」ってわけじゃないから気にしなくても。>382
0391デフォルトの名無しさんNGNG
ちょっと>>388のコメントが誤解を与えるかもしれないので訂正しておくと、
  if (nResponse == IDOK)   // ここへは行かない。
ってのは、処理が行かない(=if文が判定されない)という意味では無く、
デバッグしたときにステップの矢印がその行をを飛ばすという意味ね。

試してみると分かると思うけど、AppWizardでダイアログベースのアプリを作って
Appクラスの
int nResponse = dlg.DoModal(); //ここにブレークポイントを置いてOKで閉じる
if (nResponse == IDOK)
をデバッグしてみるとそうなる。
自分でCDialogから派生ダイアログ作ってDoModalすると
ちゃんとif文にもステップが行くんだけど。Win2000+SP3、VC6+SP5。
0392デフォルトの名無しさんNGNG
下記にブレークを起き、一旦止めて混合モードで表示して見て。
if、elseとも何の記述も無いので、最適化されてコードが何も無いでしょ。
だからブレークをはれない。

int nResponse = dlg.DoModal();  // ←ここにブレークポイントをおく
if (nResponse == IDOK)
{
// TODO: ダイアログが <OK> で消された時のコードを
// 記述してください。
}
else if (nResponse == IDCANCEL)
{
// TODO: ダイアログが <キャンセル> で消された時のコードを
// 記述してください。
}

// ダイアログが閉じられてからアプリケーションのメッセージ ポンプを開始するよりは、
// アプリケーションを終了するために FALSE を返してください。
return FALSE;
0393デフォルトの名無しさんNGNG
補足、下記みたいにすると最適化されないのでブレークはれるようになる。

int a;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
a=0;
}
else if (nResponse == IDCANCEL)
{
a=1;
}
0394デフォルトの名無しさんNGNG
リストボックスでオーナードローし、
MeasureItem()で
lpMeasureItemStruct->itemHeight = 255;
とするとアイテムの高さが変えられますが、
この数値が256以上だと高さがおかしくなります。
具体的には256をセットすると表示されず(アイテム高さ0)、
また値を増やして行くとアイテムの高さが増えていきます。
どうやらアイテムの高さが255を超えると0にリセットされているようです。

アイテムの高さを256以上にするにはどうしたらよいのでしょうか?
0395デフォルトの名無しさんNGNG
>>394
>リスト ボックス、コンボ ボックス、またはメニューの各項目の高さを
>指定します。オーナー描画のリスト ボックス、コンボ ボックス、
>またはメニューのオーナーは、メッセージ処理から戻る前にこのメンバに
>値を設定しなければなりません。
>リスト ボックスの項目の最大の高さは 255 です。
ヘルプに書いてる
0396デフォルトの名無しさんNGNG
も  う  だ  め  ぽ
0397デフォルトの名無しさんNGNG
CHtmlViewで文字列を選択中かどうか判断するのにはどうしたらいいでしょう?
0398デフォルトの名無しさんNGNG
プログラマーの求人に応募して
面接したんですが、無事一時面接を通過し、
二次面接へは一時面接へ持っていったプログラムの
ソースを持ってこいと言われ、完全独学なので
明らかに変なコードを書いていないか心配です。
すみませんが業務経験者の方、ちらっと見ていただけないでしょうか?
内部的な動きとかは結構ですので、経験者として
このコードを見て「これは見るからにおかしいだろうw」
みたいなのがあれば指摘していただけませんか?
変な質問ですみません。
http://www.geocities.co.jp/SiliconValley-Oakland/1693/TestDlg.txt
http://www.geocities.co.jp/SiliconValley-Oakland/1693/TestLib.txt
ほんと流し読みくらいの感じで結構です。
「おいおいこれは。。」みたいのあれば指摘してください。
初めて人に見せるのが面接担当者というのはあまりに危険を感じてます。
よろしくお願いします。
0399デフォルトの名無しさんNGNG
>>398
それじゃ面接の意味ないじゃん。
実力もないのにあるフリをされると会社としては困るんだよ。

ていうかスレ違い
0400デフォルトの名無しさんNGNG
CString cs=_T("の作成に失敗しました");   <- 意味ね−じゃん
cs.Insert(0,lpSavePath);
lstrcpy((LPTSTR)lpErrorMsg,(LPCTSTR)cs);
ff.Close();
return true;

0401デフォルトの名無しさんNGNG
>>398

指摘はしない。399の言うとおりだから。でも完全独学でこれだけ書けるんなら、
入社後「ちゃんと指導 and/or 教育してもらえれば」プログラマになれると思う。

現時点ではプログラム「らしきもの」は書けているけど、このコードのおかしな
点に気付かないならプログラマとして即戦力ではないと思う。
0402デフォルトの名無しさんNGNG
401はヒッキーです。信じてはいけません。
0403398NGNG
>399-401
アドバイスありがとうございました。
このスレで質問させていただいた理由は
MFCを使って書いたので他のスレだと
余計にスレ違いになると思い、ここに書かせていただきました。
スレ違いと言われるなら素直に反省します。
すみませんでした。
>399
実力のあるフリをするつもりはありませんでした。
私の間違いを指摘していただくて書き込みました。
最後の勉強としてご指摘願いたいと思っておりました。
>400さん
_T()の使い方をいまいち分かっておらず
使うべきところで使っていないより書いた方がましかと思って書いていました。
ご指摘ありがとうございます。
>401
即戦力などとは毛頭思っておりません。
現場の意見として重くとらえさせていただきます、ありがとうございました。
続く。。
0404398NGNG
>399-401
最後に、。
スレ違いにもかかわらず丁寧な指摘、非常に参考になりました。
仕事はすぐに決まるとは思いませんが、
がんばってプログラマになりたいと思います。
なによりPC、プログラムが好きでたまらないので
これから精進していきたいと思います。
次お会いする時までによりいっそう腕を磨いておきます。
スレ違い失礼しました、
ずっと人に見てもらう機会などが無かった私には
すごくためになりました。
本当にありがとうございました。
0405デフォルトの名無しさんNGNG
>>404
次は回答する側で書き込めるといいね
0406デフォルトの名無しさんNGNG
タブコントロール(CTabCtrl)のタブ位置を横&シングルラインにするとバグりませんか?
リサイズ時に縦長にするとタブが途中で消えたり、(コントロールの横幅分だけしか描画されない?)
InsertItemで追加していくとタブスクロール用のボタンが効かなかったり、
タブ位置を上→横に変更するとタブスクロール用のボタンが縦長になったり。
0407デフォルトの名無しさんNGNG
スライダーコントロールの背景色を指定したいのですが、やり方がわかりません。
システム色ではなく、赤とかピンクとかいろいろな色で作りたいのです。
ご存知の方、教えてください。

よろしくお願いします。
0408デフォルトの名無しさんNGNG
>>407
マルチポストすんな
0409デフォルトの名無しさんNGNG
LVITEM ListItem;
ListItem.mask = LVIF_TEXT;
ListItem.pszText = "てきすと";
ListItem.iItem = 0;
ListItem.iImage = 0;
m_List.InsertItem(&ListItem);
でリストにな〜んも表示されない。なんで?
0410デフォルトの名無しさんNGNG
>>409
>ListItem.pszText = "てきすと";
Basicじゃないんだぞ…

こっちのメンバ関数使ったら?
int InsertItem( int nItem, LPCTSTR lpszItem );
0411デフォルトの名無しさんNGNG
CListCtrl m_List; ←ClassWizで追加したヤシ
こいつにOnInitDialogの中でInsertItemしてるがなんにも表示されない
なんで??
0412デフォルトの名無しさんNGNG
>>411
ListItem.iSubItem = 0;  //これが足りないよ

初期化について勉強すべし。
LVITEM ListItem;
って宣言しただけじゃ各メンバ変数の値は不定。
0になっているって保証はない。(宣言直後の値を見れば分かる)
0413デフォルトの名無しさんNGNG
ぐはぁ!それだ・・
どうもありがとう。。
0414デフォルトの名無しさんNGNG
エクスプローラみたいなのを作りたいんですが
リストビューに表示するアイコンはどうやって取ってくるのですか?
0415デフォルトの名無しさんNGNG
>>414
教えて欲しい時は誠意を見せろ!
つーか穴を貸せ
0416デフォルトの名無しさんNGNG
ホモ氏ね
0417あNGNG
>414
ちょっと聞き方悪い、答える方も困るよ。
アイコンはどうやって取ってくるか!
と聞かれた5ら
自分で用意しなさい、
と答えるのが普通なんだが
それを聞きたいのか?
0418デフォルトの名無しさんNGNG
α 自分で用意する
β SHGetFileInfo
0419デフォルトの名無しさんNGNG
γ 「ホモ氏ね」と書く
Σ >>418と>>415を結ばせる。
Ω alt+f4
0420デフォルトの名無しさんNGNG
MFC使ってソフト作る時
メンバ変数追加する時
どうしてます?
private か protected か public
の判断がつきません。
privateとpublicは分かるのですが、
普通Appウィザードが作成した
クラス (CXXXDlgなど) を派生することってないですよね?
とりあえずprotectedにしとくべきでしょうか?
それともAppウィザードが作成した
クラスを派生することを派生すること自体ありえないので
publicにしても問題ないのでしょうか?
0421デフォルトの名無しさんNGNG
>>420
APPウィザード使うかどうかに関わりなく、
サブクラス作んないんならprotectedは不要。

> 普通Appウィザードが作成した
> クラス (CXXXDlgなど) を派生することってないですよね?

あなた自身が、なぜ「普通」と書いたのか、
その理由を考えてみるこった。
0422デフォルトの名無しさんNGNG
>>420
まあ、Wizardで作ったクラスでも、派生することはありえなくもないけど、
普通はアプリケーションに依存したコード書くから、最終的な派生クラスとして、
protectedを無視した決め方してもそれほど実害はないかな。

publicは、コードを少しでも減らしたいとか言う理由じゃなかったら、
セオリー通りにあまり使わないようにした方がいいかと。
publicと( protected || private )は派生するしないで分けるものじゃないし。
(そもそも、MFCもpublicメンバー使いまくりなわけだが。m_hWndとかの重要なものでさえ)
0423デフォルトの名無しさんNGNG
すみません、質問させていただきます。
スタティックテキストに文字色と背景色を設定する事は出来たんですが(OnCtlColorによって)
たとえば、ボタンを押して、スタティックテキストの文字色と背景色を
変更するにはどうすればいいんでしょうか
0424デフォルトの名無しさんNGNG
エクスプローラ風のファイラーが作りたいんだってば。
ファイルをドラッグしてフォルダにドロップできたり、ダブルクリックでファイルを開いたり
外からファイルをドロップしたりをリストビューでやりたいんだけど、
わかんないことだらけだから手っ取り早くエクスプローラ風のソフトのソースの場所教えてちょ。
たのんま
0425デフォルトの名無しさんNGNG
HOGEみたいなソフトを作りたいけど、
面倒くさいからソースくれ?
それって「作る」うちに入るのかナ?
0426デフォルトの名無しさんNGNG
作るに入らなくていいからソースくれ
0427デフォルトの名無しさんNGNG
あの・・・・・・・・
VC++始めるにあたってよい参考書さがしてるんですけど、
みなさんおすすめ教えてください。

一応初心者向けのでおねがいします。
VC++も使ったことがあるにはあるんですけど、まぁ、オブジェクト指向初心者ってことで。
0428あNGNG
初心者なら
山本 信雄のプログラミング学習シリーズ
VisualC++
っていうのが全三巻ででてる。
俺はそれを使ったがなかなかお勧め。
CとC++の基本が分かってる人にはお勧めだよ。
Cとかよくわかってなかったら駄目だけど。
0429デフォルトの名無しさんNGNG
うぇ〜んくれくれ厨とスレ違いな質問なんてもうやだよう
0430デフォルトの名無しさんNGNG
>>423
InvalidateRect
0431デフォルトの名無しさんNGNG
マスタリングTCP/IPはとてもわかりやすくてお勧めです。
0432デフォルトの名無しさんNGNG
>>423
staticに""でも書いてあげれ
0433デフォルトの名無しさんNGNG
>>428 基本ってどの程度ですかね?
(分かってないこともないが、分かってるとも断言できないレベルなので)

今日探してみたのですが、あまりにも種類が多くて・・・
しかもこれ系は高いからあれもこれもとはいかないのですよ。
迷ったあげく、経験者の意見を参考にと。

0434あNGNG
>433
俺の場合は「やさしいC」みたいな本終えてから
この本始めたよ。
三巻構成で金かかるけど(1巻2800円)
その文わかりやすいと思うなぁ。
二巻は主にC++のクラスについてだから
C++がよく理解できてるなら飛ばしてもいかもしれない。
流れとしたら
SDK->オブジェクト志向(C++のクラス)->MFC
っていう構成。
逆に買って失敗した本は
作って分かる VisualC++6.0
↑なにもわからなかったよw
前述の三冊してから読んだらまぁ面白かった。
参考に。。
0435デフォルトの名無しさんNGNG
>>433
VisualC++6.0 プログラミング入門
桜田幸嗣/田口景介

この本は俺がVsualC++買ったときに同梱されていた本。
持ってなければこれ辺りが無難だと思う。
0436デフォルトの名無しさんNGNG
ダイアログベースのプログラムを書いているのですが、
スケルトンとしてウィザードが作成した
メイン画面のダイアログと別に自分で
リソースを挿入、からダイアログを作成し、
クラスを割り当てました。
コマンドラインが渡された時はそちらのダイアログを
使用するよう切り替えたいのですが、
ほとんど上手くいってるのですが、
タイトルバー左隅のアイコンの表示の仕方がわかりません。
どうやったらもともと用意されてるダイアログのように
タイトルバー上にアイコンを描画できるのでしょうか?
0437デフォルトの名無しさんNGNG
>>436
WM_SETICONを
窓に
投げつけろ!
0438 NGNG
>>436
OnInitDialogの中で
HICON hIcon=::LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
SetIcon(hIcon,TRUE);
SetIcon(hIcon,FALSE);
でいいんじゃないの?違ってたらゴメン
0439436NGNG
>>437-438
なんの問題もなく出来ました。
ありがとうございます。
0440デフォルトの名無しさんNGNG
以下のようにしてコンボボックスにA〜Jの選択肢を表示し
例えばAを選択すると num に"1"を渡すようにするには
どうすればよいでしょうか?

int i;
int num;

CString select;
CString name[]={"A","B","C"...."J"};

void C***Dlg::OnDropdownCombo()
{
m_combo.ResetContent();
for(i=0; i<=10; i++){
m_combo.InsertString(0,name[i]);
}
}

void C***Dlg::OnSelchangeCombo()
{
m_combo.GetLBText(0,select);
m_combo.SetWindowText(select);
}
0441433NGNG
>434,435
さんくす あす本屋いってみます
0442デフォルトの名無しさんNGNG
>>440 num = m_combo.GetCurSel();  じゃダメなの?
0443デフォルトの名無しさんNGNG
それじゃダメ。
0444デフォルトの名無しさんNGNG
>>443
それじゃ今選ばれてるテキストを取ってきて文字列の配列と比較でもしなさい。
0445デフォルトの名無しさんNGNG
>>443
SetItemData & GetItemData
0446443NGNG
俺は440じゃないんだが・・・
num = m_combo.GetCurSel() + 1;
0447440NGNG
ありがとうございます。
num=m_combo.GetCurSel()+1; でうまくいきました。
0448デフォルトの名無しさんNGNG
CViewクラスをカスタマイズしたビューをダイアログアプリで使うにはどうすればいいですか?
ダイアログのフォームにビューを張り付けることが出来れば最高なんですけど
0449デフォルトの名無しさんNGNG
ViewをActiveXコントロールにしてしまふ。(w
0450デフォルトの名無しさんNGNG
そういうのはCodeGuruやCodeProjectにあったはず
0451440NGNG
GetWindowTextで受け取った数列をint型の変数に
渡すにはどうすればよいか教えてください。
0452デフォルトの名無しさんNGNG
int i = boost::lexical_cast<int>(s);
0453440NGNG
どうもすいませんでした。
数列の場合、GetWindowTextなど使わずに
メンバ変数を使えばよかっただけでした。
0454デフォルトの名無しさんNGNG
lpszHostNameが無効な場合(www.2ch.netttttとか)に例外を捕捉したいんですが。。。

CInternetSession *m_pInternetSession = new CInternetSession();
CHttpConnection *pHttp = NULL;
CHttpFile *pFile = NULL;
:
:
pHttp = m_pInternetSession->GetHttpConnection(lpszHostName, INTERNET_DEFAULT_HTTP_PORT);
if( pHttp == NULL ) return FALSE;  // ホントはもっとちゃんとエラーメッセージ書いてます
pFile = pHttp->OpenRequest("GET", (LPCTSTR)strRequestFile, lpszURL);
if( pFile == NULL ) return FALSE;  // ホントはもっとちゃんとエラーメッセージ書いてます
try
{
  pFile->SendRequest();
}
catch( CInternetException err )
{
  AfxMessageBox("エラー");
  return FALSE;
}

捕捉できない。。。
0455デフォルトの名無しさんNGNG
>>454
例外は発生せず、サーバーから404とかが返ってくるのみ

DWORD dwStatus = NULL;
pFile->QueryInfoStatusCode( dwStatus );
0456デフォルトの名無しさんNGNG
>>455
ファイルがない場合じゃなくて、サーバが見つからない場合のことなんですが。

QueryInfoStatusCodeを実行するのはSendRequestを呼び出した後でしょう?
そのSendRequestを実行中に例外が発生すると思うんです。
0457デフォルトの名無しさんNGNG
>456
スマン、よく見てなかった。

やって見たら数秒後に飛んだけど、
ちなみにキャッチはポインタで捕ってる。

catch ( CInternetException* e )
0458454=456NGNG
>>457
ポインタで取ったらいけました!
ありがとう!!

…ひょっとして常識?(T-T)
0459457NGNG
>478
俺も前に同じハマり方して、試行錯誤で
脱出した事を思い出したので。。。
常識なのかどうかはわかんないけど
それ以来 CException 系はポインタで捕るようにはしている。
詳細知っている人いたらキボンヌ。
0460457NGNG
×>478
○>458
0461デフォルトの名無しさんNGNG
ExcelをOLEとして組み込んで作りたいけど、
参考になる本とかURL教えてください。

お願いします。
(プログラムに多機能なGridを使いたいだけです。)
0462デフォルトの名無しさんNGNG
>>461
質問ならあげたほうがいい
>(プログラムに多機能なGridを使いたいだけです。)
市販のOCXとかを使ったほうがいいかもしれない
それかwww.codeguru.com
0463デフォルトの名無しさんNGNG
知人にヘルプファイルを作成してもらったのですが
上手く呼ぶ出せなくて困っています。
Test.exeの横にファイルタイトルが同じ
Test.HLPとTest.cntを置いた状態で
F1キーを押すと
このトピックは存在しません。アプリケーションの製造元に
問い合わせて、新しいヘルプファイルを入手してください。(129)
↑このようなメッセージボックスが表示されます。
ヘルプファイルの横にTest.GIDというファイルが作成されます。
どこが間違っているのでしょうか?
また、ヘルプファイルを他の場所に置いた状態で
F1を推して見つからないと言われて自分で
場所を指定した場合にも同じように表示されます。
よろしくお願いします。
0464463NGNG
↑の追記です。
Test.HLP自体を
ダブルクリックで起動すると
正常にヘルプが表示されます。

よろしくお願いします。
0465デフォルトの名無しさんNGNG
CHtmlViewでマウスの右ボタンに関するイベントを処理するにはどうしたらいいでしょう?
OnRButtonDown や OnNcRButtonDown では捕捉できませんでした。
(端っこの枠の部分ではできましたが^^;)
0466デフォルトの名無しさんNGNG
>>465
OnContextMenu()は試してみた?
0467デフォルトの名無しさんNGNG
>>465
CHtmlViewってあんまり情報ないよね。
View.hに

void OnHogeRClick();

DECLARE_DISPATCH_MAP()

DECLARE_INTERFACE_MAP()

の3行をを追加して、View.cppに

BEGIN_DISPATCH_MAP(CxxxView, CHtmlView)
DISP_FUNCTION_ID(CxxxView, "oncontextmenu", DISPID_HTMLDOCUMENTEVENTS_ONCONTEXTMENU, OnHogeRClick, VT_EMPTY, VTS_NONE)
END_DISPATCH_MAP()

BEGIN_INTERFACE_MAP(CxxxView, CHtmlView)
INTERFACE_PART(CxxxView, DIID_HTMLDocumentEvents, Dispatch)
END_INTERFACE_MAP()

void CxxxView::OnHogeRClick()
{
// ここで右クリックしたときの処理
}

こんな感じでどうかな。もちろんCxxxViewは自分のViewに書き換えて。
0468465 NGNG
ちと言い方がまずかったですね。すいません。
ポップアプメニュー云々ではなく、単に右ボタンのdown/upを検知したかったのです。

>>466
一応試したのですが無反応ですた

>>467
DISPID_HTMLDOCUMENTEVENTS_ONCONTEXTMENU が見つからないって言われるのはヘッダが古いからでしょうか?
かわりに DISPID_HTMLDOCUMENTEVENTS_ONMOUSEDOWN で試したのですが無反応です。。。なんでだろ。
0469デフォルトの名無しさんNGNG
すいません。ちょっと違うかもしれませんが
MFC42.dllを新版に差し替えたいんですが、Win2kのシステムファイル保護機能が
働いて、リブートすると戻されてしまいます

この機能の停止方法がMSページに書いてあるのですが、止まってくれません
クリーンインストール状態でも駄目なんですが何か対策ご存知の方いらっしゃいませんか?
vcインストール、vc sp5インストールと順を追ってやって見ても変化なしでした
0470435NGNG
ずいぶん前の話で申し訳ないが、
>>428
の本を見たけど分かりやすいね。
おれは >>435 でMFCから入ったもんで思わず
第1巻買ってしまった。
0471名無しさん@MeadowNGNG
タスクバーに表示されず タイトルバーも持たない
ウィンドウを作るにはどーしたらいいのでしょう?

今ダイアログベースで作成していてスタイルをポップアップ、
タイトルバーのチェックを外しましたがだめでした。
(タイトルバーは消えたがタスクバーに表示されている)

VBでいうBorderStyleを"0-なし"にした状態を希望してます。
0472デフォルトの名無しさんNGNG
>>471
それはMFCではできません。
0473名無しさん@MeadowNGNG
>>472
回答どうも。
そうか、できないのですか…。
0474デフォルトの名無しさんNGNG
ダイアログベースのアプリでコード上から直接コントロールを消したり、新しく生成したりするには
どうしたらいいですか?
0475デフォルトの名無しさんNGNG
>>474
リソースファイルを書き換えれ
0476デフォルトの名無しさんNGNG
>472
ウソ言うな
0477デフォルトの名無しさんNGNG
>465
そそ、普通には取れないんだよな。
おいらはPreTranslateMessageで横取り(?)してまふ。
0478デフォルトの名無しさんNGNG
>476 答えてやれよ−

>471
普通のウインドウなら
ModiftyStyleEx で WS_EX_TOOLWINDOW を追加すれば良いんだが、
ダイアログでも効くのかな?試してみて。
0479デフォルトの名無しさんNGNG
>474

ダイアログ内のコントロールをコードで作成・破棄するのは技術的には可能だけど、
相当面倒。聞かなければ実現方法が分からないレベルだとかなり苦労すると思う。
(コントロールIDの割り付けやタブオーダーの振り直しなど)

どういう理由で作ったり消したりしたいのか分からないけど、
最初から全部リソースで作っといて、(コントロールの座標が重なっていても構わずに)
OnInitDialog で初期状態で必要無いコントロールは全て非表示にする。
後は、コードで必要に応じて表示・非表示を切り替えた方が全然楽だ。
細かい調整はリソースファイルを直接書き換えたら良い。
俺ならそうする。
0480465NGNG
>>477
なるほど。
あんまりスマートじゃないけどそれしかないかな。
0481名無しさん@MeadowNGNG
>>478

できました ありがとう!
OnInitDialog() に
ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW, 0);
を書いたら実現できました。
0482デフォルトの名無しさんNGNG
リストビュー(レポート)にラージアイコンを表示させることは出来ますか?
0483デフォルトの名無しさんNGNG
できますよ
0484482NGNG
なにやら白抜きの□が表示され照るみたいですがこれは
アイコンを指定しているindexが悪いのですか?
0485デフォルトの名無しさんNGNG
MFCのお勧めの本を教えてくださいm(_ _)m
0486485NGNG
無視しなくてもいいやないですか(#゚Д゚)y-~~
0487デフォルトの名無しさんNGNG
>>485
ログ読め厨房
0488デフォルトの名無しさんNGNG
>>454 >>457 >>458 >>459
亀レススマソ、
気になって調べて見たんだけど BOOL CHttpFile::SendRequest の中に
下記の記述があり、
 if (!bRet) AfxThrowInternetException(m_dwContext);

AfxThrowInternetException の中に
 THROW(pException);
という記述がありました。
pExceptionは、CInternetException* 型なので、キャッチするとき
はポインタで受ける必要があるみたいです。
 catch ( CInternetException* e )
0489デフォルトの名無しさんNGNG
CDialogを継承したクラスを、templateにすることって可能でしょうか?
0490デフォルトの名無しさんNGNG

●●●●●●●●「オセロさえ納期内に作れない=OO役立たず 」祭り●●●●●●●
/|         |  |_____ΦΦΦΦΦΦΦΦΦΦΦ||ΦΦΦ
  |         |  | ̄ ̄ ̄ /|                    ||
  |         |  |   / /|TTTTTT   TTTTTTTTTT||TTTTT
  |        /\ |  /|/|/|^^^^^^ |三三| ^^^^^^^^^^^||^^^^^^^
  |      /  / |// / /|
  |   /  / |_|/|/|/|/|
  |  /  /  |文|/ // /
  |/  /.  _.| ̄|/|/|/         Λ_Λ
/|\/  / /  |/ /           (___)
/|    / /  /ヽ            /〔 非OO 〕〕つ
  |   | ̄|  | |ヽ/l            `/二二ヽ
  |   |  |/| |__|/   Λ_Λ     / /(_)
  |   |/|  |/      ( ´∀`)   (_)    Λ_Λ
  |   |  |/      // /  ^ ̄]゚        (`   )
  |   |/        ゚/ ̄ ̄_ヽ         ⊂〔〔 非OO 〕
0491デフォルトの名無しさんNGNG
VC+++MFCはあんまりOOじゃないから余所荒らせよ

0492デフォルトの名無しさんNGNG
Gatesに文句言えよ。
0493初心者KNGNG
教えてください!!
MSVCで作ってるアプリから、spawn系関数でイメージビューワを起動していますが、
当然のことながらビューワ起動後のアクティブウィンドウはビューワになります。
ここで、起動もとのアプリを、プログラム側からの制御でアクティブウィンドウに
したいのですが、どのようにやったらいいのでしょうか?

ちなみに、ビューワ起動。。。。殺す部分は、以下のように作っています。
char CMD[]="C:\\Program Files\\Windows NT\\Accessories\\ImageVue\\kodakimg.exe";
char filename[]="C:\\WINNT\\nwelcome.bmp";
int ProcessHandle = _spawnlp(_P_NOWAIT, CMD, CMD, filename, NULL );
・
・
・
・
・
TerminateProcess( (void *)ProcessHandle, 0);
※ 文字列の中身は、変えています。だから、フルパス指定でpは不要だとかいじめないでね。

よろしくおねがいします。
0494初心者KNGNG
493の続きです。
とりあえず、
this->SetActiveWindow();
this->SetForegroundWindow();
あたりが怪しいと思い、起動直後に入れてみましたが、状況は変わりませんでした。
そこで、タイマーをかまして、0.5秒後にこの二つの命令が動くようにしました。
これで、とりあえず当初の目的は達成されましたが、どうもダサい。。。。。。
もっとスマートな方法はありませんでしょうか?
0495デフォルトの名無しさんNGNG
>>488
THROWは、newしたポインタを投げてるので、CATCH(or CATCH_ALL)
で受けてやらないと、メモリリークします。
CATCHの後には、END_CATCH(or END_CATCH_ALL)も忘れずに。

C++の例外はインスタンスで投げて、const&で受けるのが常識だけど、
VC++の例外処理がまともじゃなかった頃から、MFCで例外を使う
苦肉の策として、THROW、CATCHが作られたみたいです。

現在のVC++ならthrow CLASS、catch const CLASS&で問題ないんですが。
0496デフォルトの名無しさんNGNG
>>493
_spawn じゃなくて CreateProcess() 使って、STARTUPINFO で
SW_SHOWNOACTIVATE あたりを指定してみたら?
0497デフォルトの名無しさんNGNG
>>495
なるほど!
んじゃぁ、MFCが勝手に投げる例外はCATCHで受けたほうが無難でいいですね。
どうもですー
0498初心者KNGNG
>>496 様
アドバイスありがとうございました。
CreateProcessでビューワを起動し、WaitForInputIdleで起動し終わるのを待って
this->SetActiveWindow();
this->SetForegroundWindow();
で元アプリをアクティブにして、
TerminateProcess(PROCESS_INFORMATION.hProcess)
でビューワを殺すことにしました。多少画面がチラチラしますが、
かなりスマートにできました.
STARTUPINFO.wShowWindow = SW_SHOWNOACTIVATE
を指定してみましたが、ビューワがアクティブになるだけでした。。。
このあたり、間違いがあれば、指摘していただけるとありがたいです。

0499初心者KNGNG
さらに見てみたけど。。。
char CMD[]="C:\\Program Files\\Windows NT\\Accessories\\ImageVue\\kodakimg.exe";
char filename[]="C:\\WINNT\\nwelcome.bmp";
int ProcessHandle = _spawnlp(_P_NOWAIT, CMD, CMD, filename, NULL );
WaitForInputIdle( ProcessHandle, INFINITE );
this->SetActiveWindow();
this->SetForegroundWindow();
でも、結果は同じでした.
0500496NGNG
>>499

STARTUPINFO si;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESHOWWINDOW; ←これ
si.wShowWindow = SW_SHOWNOACTIVATE;

ちゃんと指定した? うちでは意図した通りに動いたんだけど。
0501初心者KNGNG
>>496 様!!
ありがとうございます。そのキーワード、入れていませんでした。
おかげさまでひじょうに麗しい動きを見せてくれるようになりました。
0502名無しさん@MeadowNGNG
ポップアップメニューのON_UPDATE_COMMAND_UIについて、
今下のようにポップアップメニューを呼び出しています。
CMenu menu;
if (menu.LoadMenu(IDR_MENU_POPUP)){
CMenu* pPopup = menu.GetSubMenu(0);
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
point.x, point.y, this);
PostMessage(WM_NULL, 0L, 0L);
}
ダイアログベースのアプリケーションなのですが
ON_UPDATE_COMMAND_UIでメニューのEnableを制御
しようとしても、うまく呼び出されません。

# 自分としてはポップアップメニューを開いたときに
# 呼び出されて欲しいのですが、現状ではそのメニュー項目を
# クリックしたときに呼び出されているようです。

どのようにしたらよいのでしょう?
0503デフォルトの名無しさんNGNG
お し え て く だ さ い
アクロバットリーダーのようにブラウザ上でPDFファイル
を読込もうとすると、自動起動してブラウザ内部に
アクロバットリーダーが起動しますよね。
そのようなアプリを作りたいのですがどのように作るのですか?
おねがいします。


0504デフォルトの名無しさんNGNG
STDでMFCの関数を使うには、なにをインクルードしたらいいのでしょうか?

だれか教えて下さい。
0505デフォルトの名無しさんNGNG
STDって?
性病?
0506504NGNG
>>505
知らないなら書き込まないでください。
0507デフォルトの名無しさんNGNG
>>506 http://www.mochida.co.jp/tiken/qa/top.html
0508504NGNG
>>507
どっかいってろ!
0509デフォルトの名無しさんNGNG
な ん だ か し ら ん が 5 0 4 必 死 だ な 藁
0510504NGNG
>>509
おまえがわかんねーからってあおってんじゃねーよ!!
氏ね、あふぉ
0511デフォルトの名無しさんNGNG
>504
おいおい、知らない人に質問しておいて
えらそうな口聞くじゃないかw
いるんだよなぁ、お前みたいな勘違いしてるやつ。
ちなみに俺も含めてここに居る人の大抵はお前の
質問の答えくらいわかってると思うよ。
まぁもっと困って頭を冷やしなさい。
0512デフォルトの名無しさんNGNG
俺は分からない、、、
STDとMFCで検索かけたら
http://www.twinring.jp/motorsports/motor/experience/race/kart/schedule.html
これが出た。
0513デフォルトの名無しさんNGNG
>>502
ダイアログではデフォルトではON_UPDATE_COMMAND_UIは効かないので
OnInitMenuPopup内でチェックする。
別の方法としてアイドル処理でON_UPDATE_COMMAND_UIを捕まえる例が
確かCodeGuruにあった。
0514名無しさん@MeadowNGNG
>>513
どうもです。
どうやらON_UPDATE_COMMAND_UIは効かないようですね。
ttp://support.microsoft.com/default.aspx?scid=KB;EN-US;Q242577&
ここにやりたいことがそのまま書いてありました。
0515デフォルトの名無しさんNGNG
>>488
小亀レスですが勉強になりますたありがとう
0516デフォルトの名無しさんNGNG
>>495
catch (CException* pE) {
//例外処理
pE->Delete() ;
}
でもいいらしい。これなら他の例外処理とまとめられる。

>>498
余計なことかもしれないけど…
TerminateProcess使うよりWM_CLOSEをポストした方がよくないかなあ。
0517デフォルトの名無しさんNGNG
質問。
CToolBarを動的に作ったときボタンをEnableにする方法がわかりません。
リソースエディタでツールバーを作ったときは、
ビルドして動かすと最初はボタンがDISABLEになっている。
ClassWizardでハンドラを作るとEnableになる。
CToolBarを動的に作ったときはClassWizardでハンドラを
作るということができないのでどうすれば?
0518デフォルトの名無しさんNGNG
>>517
そういう質問何度か出てるけど、ClassWizardで作れないなら自力で書く。
0519517NGNG
>>518
で、自力で何を書けばいいのかを聞きたいんですけど。
CToolBarを動的に作ったとき、ツールボタンをEnableにするには?
という質問です。
0520517NGNG
CToolBarCtrlを引っ張り出してEnableButton()してみたのだが反応なし。
なので困ってます。
0521アホで御免なさいNGNG
CWinAppクラスのソースを読みたいんですが
何処にあるのか分かりません。ヘルプ!!
0522デフォルトの名無しさんNGNG
>>521
VCのファイルの中を検索するやつがあるだろ。
あれでCドライブで、class CWinApp をキーとして検索すれば場所がわかる。
0523517NGNG
WM_COMMANDだけPreTranslateMessage()でとればいいや、と思っていたのだが
あらかじめメッセージマッピングしておかなきゃだめなんだろーか?
ボタンをEnableにするためだけに?
0524アホで御免なさいNGNG
正直スマンのですが
検索しても見つからないんですよ。
よろしければファイル名を教えていただけませんか?

もしかして、(よく分からんのだが)dllってのに入ってたり!?
0525デフォルトの名無しさんNGNG
>524
最初からソースファイルをインストールしてなかったりしてね。
大体どこを検索してるの?
VCのインストールディレクトリの配下全部調べました?

ちょっと手元に無いので確実じゃないけど
"wincore.cpp"だったかな?
0526デフォルトの名無しさんNGNG
タスクトレイのみのアプリケーションを作る時ってどうするもんなのでしょう。

とりあえずSDIでView/Docを消してMainFrameのみで
やってますが皆さんどのようにやってますか?

0527あNGNG
>526
検索ワードは
タスクトレイアプリケーション
0528デフォルトの名無しさんNGNG
>>524
下記が無ければインストールしてないんじゃないかな?
VC98\MFC\Include\AFXWIN.H
VC98\MFC\SRC\APPCORE.CPP
0529アホで御免なさいNGNG
>525,>528
ありがとうございます。
見つかりました。検索のし方が悪かったみたいです。
0530デフォルトの名無しさんNGNG
>>526
前に実験したことあるけど、MFC使うならおっしゃる通り、CMainFrame 派生が一番
いいよ。サイズ 0 で、アイコンや MENU は NULLのウィンドウクラス作ってさ。

メインウィンドウを CDialog にすると CMainFrame よりメモリ食う。

ましてや、設定ダイアログをそのまま非表示にして、メニューで「設定」が
選択されたら this->ShowWindow(SW_SHOW) なんてのはもっての外。
VBアプリじゃないんだから(w

ま軽さを突き詰めたら「MFC使うな」ってことになるんだけどさ...
0531530NGNG
あ、CMainFrame というか CFrameWnd の派生。
0532デフォルトの名無しさんNGNG
だれか
> CDialogを継承したクラスを、templateにすることって可能でしょうか?
おしえてくだちい・・・
0533デフォルトの名無しさんNGNG
templateって、
temaplte< class T> のtemplate?
0534デフォルトの名無しさんNGNG
あ、そうです。>>533
0535デフォルトの名無しさんNGNG
何を可変(template)にするのさ?
0536デフォルトの名無しさんNGNG
>>535
template < typename T > class CHoge : public CDialog {
private: const T * m_gehol
};

希望です。
0537デフォルトの名無しさんNGNG
>>536
m_gehol は m_geho;
すんまそん。
0538デフォルトの名無しさんNGNG
どうでもいい
0539デフォルトの名無しさんNGNG
まぁそういわずに。
0540デフォルトの名無しさんNGNG
>>536
別のアプローチを考えそうな気がする。普通は。
0541 NGNG
>>532
templateクラスがメッセージマップを持たなければ可能。
メッセージマップがある場合はかなり厄介。
0542デフォルトの名無しさんNGNG
>>541
ですか…
メッセージマップ持ってますわぁ。あきらめます。
0543 NGNG
>>542
親クラスにメッセージマップを持たせて、そこからtemplateクラスを
派生したらどうかな?
メッセージハンドラをvirtualにしておけば、ちゃんと動くはず。
0544デフォルトの名無しさんNGNG
>>543
オオゥ
やってみます。
0545デフォルトの名無しさんNGNG
StretchDIBits()
SetDIBitsToDevice()
DitBlt()

の違いを教えてください(゚ー゚*)
0546デフォルトの名無しさんNGNG
>>545
StretchDIBits
http://www.microsoft.com/japan/msdn/library/ja/jpgdi/html/_win32_stretchdibits.asp

SetDIBitsToDevice
http://www.microsoft.com/japan/msdn/library/ja/jpgdi/html/_win32_setdibitstodevice.asp

DitBltは知らないけど、BitBltなら↓
http://www.microsoft.com/japan/msdn/library/ja/jpgdi/html/_win32_bitblt.asp
0547 NGNG
DLLからメインの関数って使える?
0548 NGNG
>>547
メインの関数というのがいまいち意味不明だが、EXEのモジュールにある
関数という意味なら普通にexportして使えるよ。
0549 NGNG
>>548
そうそういう意味
サンクス
0550デフォルトの名無しさんNGNG
質問です。

時間を設定しておいて、その時間になったらアプリケーションの起動等をさせ
るプログラムを作っています。

実際に今の状態で使えているのですが、性質上、複数起動出来てしまうのが気
になっています。

何か、複数起動を禁止する方法は無いのでしょうか。
ご存じの方、教えて下さい。
0551デフォルトの名無しさんNGNG
>>550
Mutexを調べろ
0552550NGNG
>>551
レス、ありがとうございます。
早速調べて試してみます。
0553デフォルトの名無しさんNGNG
VS.NETで新規作成、C++プロジェクト、MFCアプリケーションとやって、
SDIで基本クラスCEditViewにして、そのままビルドすると簡単な
テキストエディタになるんですが、ファイルに保存するとshift-jisでは
保存されません。どうしたらshift-jisで保存されますか?
どこかでコードページでも指定するんでしょうか。

0554デフォルトの名無しさんNGNG
下記の現象が起きて困っています。どのようにすればよいでしょうか?
 MFC AppliWizard(exe)を選んで新規作成。
 ダイアログベースのアプリを選択し、その他はデフォルトのまま。
 エディットボックスを追加。
 ClassWizardメンバ変数追加でIDC_EDIT1に適当な変数を割り当てる。

上記を行うと確実に下記が発生します。
 ClassViewからC***Dlgが消える。
 FileViewで***Dlg.cppを編集すると this-> とか書いてもメンバの
 補間機能が使えなくなっている。

環境
 Win2000
 VC6++SP5スタンダードエディション
0555デフォルトの名無しさんNGNG
>>553
VS.NET知らないけど、プロジェクトの設定で
_UNICODEとかをdefineするようになってたらそれはずせば?

>>554
本当にそれしかやってないならバグでしょう。
SP当てたタイミングでそういう現象が出るようになったって事ではない?
なんにせよMSに相談するのがいいでしょう。

とりあえず
>  ClassViewからC***Dlgが消える。
>  FileViewで***Dlg.cppを編集すると this-> とか書いてもメンバの

を復活するには 一端 ***.CLWを消してからクラスウィザード開いて
そのままOKで出来ると思うけど。
0556デフォルトの名無しさんNGNG
>を復活するには 一端 ***.CLWを消してからクラスウィザード開いて
>そのままOKで出来ると思うけど。
うちも ClassView からメンバ関数を削除したりすると、たまにそうなる。
***Dlg.h に変更を加えるだけで復活する。
0557555NGNG
>>554
そういえば ウィルスチェックしてたら
そんな現象が起こりやすかったような気がしないでもないような。
0558554NGNG
今日やっても再現しますね。
ちなみに研究室の
 WinMe+VC6CP5プロフェッショナルエディション
では再現しませんでした。

>>555
>一端 ***.CLWを消してからクラスウィザード開いて
>そのままOKで出来ると思うけど。
これではだめでした。

>>556
>***Dlg.h に変更を加えるだけで復活する。
これは上手くいきますね。今後これで対応することにします。

レスくれた方どうもありがとうございました。
0559デフォルトの名無しさんNGNG
MFCのAfxBeginThreadに渡す制御関数は、
staticでなければならいないのでしょうか?
ご存知の方おながいします。
0560556NGNG
>>558
VC6sp6 pro 使ってるけど、特定のクラスで、ClassView からメンバ関数を削除したり
すると ClassViewから消える。まぁ (゜ε ゜)キニシナイ ことにしています。
0561デフォルトの名無しさんNGNG
>>559
引数にLPVOIDを持ち、UINTを返すグローバル関数なら何でも
よいのでは?
0562デフォルトの名無しさんNGNG
>>560
sp6って、いつ出たの?
0563560NGNG
>>559
「staticでないメンバ関数を渡せるか?」ということかな?
だとしたら多分無理なんじゃないかな...
thisポインタを渡さなくてはいけないので。(という自分もよく分からず)

class Hoge :
{
 main();
 static UINT Foo(LPVOID ptr);
}

Hoge::main()
{
 AfxBeginThread(Hoge::Foo, (LPVOID)this);
}

Hoge::Foo(LPVOID ptr)
{
 Hoge* a = (Hoge*)ptr;
 a->何か;
}

なら可能でしょう。
Fooを実行中にインスタンスがデストラクトされたらマズいことになるので注意。

>>562 スマソ。sp5の間違いですた。
0564デフォルトの名無しさんNGNG
>559
ヒープでも可
0565デフォルトの名無しさんNGNG
VC.NET 買った。が。
Win32 プログラム+MFCというプログラムが作れない・・・・
(↑MFC ベースのプログラムではなく、Win32 プログラムで MFC を使う)

コンソール+MFCはできるのに・・・
これってどうしようもないんでしょうか??
0566560NGNG
あ、実際は >>563 みたいなのは危険で、ASSERTで怒られるので
thisポインタを直接別スレッドに渡すのは止めたほうがよいらしい。
0567デフォルトの名無しさんNGNG
>>565
[Windows アプリケーション]
Win32 プログラムが作成されます。
Win32 プログラムとは C または C++ で記述された実行可能アプリケーション (EXE) であり、
Win32 API を呼び出してグラフィカル ユーザー インターフェイスを作成します。
「Windows アプリケーションには MFC サポートや ATL サポートを追加できません。 」

しょぼ(w
0568マストNGNG
[email protected]
ウィルスをここに流し込んで見て下さい。
0569デフォルトの名無しさんNGNG
>>563
別に必ずしもthisを渡す必要は無いよ。
0570559NGNG
>>561
>>560
>>569

ありが�d。
グローバル関数の存在を知らず、
メンバ関数を渡そうとしてました。
this渡しと同期化でなんとかなればいいのだけど。
0571デフォルトの名無しさんNGNG
>>559
staticという表現をどういう意味で使用してるかよく分からない。
「宣言の前にstaticをつけなければならないの?」と言う意味なら
別に必要ない。↓こんな感じでもいい。
int gInt = 0;
BOOL gFlag = TRUE;
UINT gTempThread (void* pParam) {
  for ( ; gInt<50 ; gInt++) Sleep(100);
  gFlag = FALSE;
  return 0;
}
class CTemp {
public:
  void Func(){
    mpThreadList = AfxBeginThread(gTempThread ,(void*)0);
    while (gFlag) {
      printf("%d\n",gInt);
      Sleep(50);
    }
  }
private:
  CWinThread* mpThreadList;
};
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]){
  CTemp oTemp;
  oTemp.Func();
  return 0;
}
0572デフォルトの名無しさんNGNG
おっと2分遅れだった。
0573デフォルトの名無しさんNGNG
>>570
>this渡しと同期化でなんとかなればいいのだけど。
独立スレッドのほうでメンバ変数などを使用する場合は、this
を渡せば大丈夫。
571の例では(CTemp*)pParam->とすることでメンバにアクセ
スできる。

スレッドを呼び出す部分より後ろに、もしくは別ファイルに
独立スレッドがある場合は、呼び出すところより前に
 extern UINT gTempThread (void* pParam);
などと宣言しておくこと。(スコープの外でね)
0574デフォルトの名無しさんNGNG
市販のキーロガーやスパイウェアってタスクマネージャに表示されないように
グローバルフック仕込んでいるみたいだけど、あれってどうやるんですか?

例えば、
a.exe がフックをセットするプログラムで、
a.dll がフックプロシージャを含む dll だとします。

Windows開始時に起動される a.exe がデスクトップを表示している
explorer.exe に a.dll のフックプロシージャをセットし、
アンフックせずに終了すれば、explorer.exe 内に a.dll が常駐
した状態になるんでしょうか。
ただ試してみたところ、a.exeでアンフックせずに終了しても自動的に
アンフックされてしまったみたいでした。
Explorer側に入り込んだフックプロシージャ内で、再度自分自身に
フックをかければOKなのでしょうか。
最初にフックをセットするプログラム側では、上記処理が完了するまで
終了を待つことにすればよいかもしれませんが、イマイチ実現方法が
かりません。

どなたか実現方法をご存知のかたいらっしゃいませんか?
0575 NGNG
>>574
作り方も分からないものを作る必要は無いだろ。
0576デフォルトの名無しさんNGNG
>>575
>作り方も分からないものを作る必要は無い
その考えに従えば、全ての発明はなくなるなw
0577デフォルトの名無しさんNGNG
>575
一度でも自分で何か調べながらモノを作ったことがあるならそんなことはアタマに浮かばないはずだけどな。
すくなくともプログラミングはしたことないだろ。
0578IISObjectNGNG
多分MFCの範疇じゃないと思うけどちょっと質問。
VC6.0にてWizardでActiveXサーバコンポーネントをそのまま
生成すると、ASPではServer.CreateObject("XXX.Class")
で上手くいってたのに、WinXP SP1を入れてから同様のコードで
「オブジェクトを作成できません」のエラーが出るように
なってしまいました。
皆さんはどうなっていますか?
ADODB.Recordsetなどは上手く作成されるのですが…。
因みに new ActiveXObject("XXX.Class")でも動かなくなりました。
0579 NGNG
>>577
574がマトモなものを作るとは思えなかったもんでね。
スパイウェアの作り方教えろと言ってるようなもんだろ。
そんなものは自分で作れるようになってから作れってこった。
0580デフォルトの名無しさんNGNG
うぇーん。なんで範疇じゃないのに質問するんだよー。
こんなのもうヤダよー。
0581デフォルトの名無しさんNGNG
>>579
最初からそう書けよ。
>>575と全然内容が違うだろ。
しょーもないこと書くからこうなるんだ。
0582デフォルトの名無しさんNGNG
>>575
>作り方も分からないものを作る必要は無い
>>575が毎日嫌々単純な肉体労働をしてるってことだな。
0583デフォルトの名無しさんNGNG
CMiniFrameWndって普通どんな用途で使うんでしょ?
0584デフォルトの名無しさんNGNG
>>581
>>579がやり方知ってんならそれでもいいんだけど、知らないんだろ。

知ってんなら答えてみ。
0585578NGNG
>>578
アクセス権がなかったことが原因でした。
無事解決しました。
どっとはれ。
0586デフォルトの名無しさんNGNG
>>584
ちょっと検索したら腐るほど出てきたぞ。
0587デフォルトの名無しさんNGNG
そのうち95%くらいは本当に腐ってるだろうがな
0588デフォルトの名無しさんNGNG
>>586
検索エンジンと検索ワードを教えてくれ
0589デフォルトの名無しさんNGNG
>>588
検索エンジン:ぐぐる
検索ワード:C
0590デフォルトの名無しさんNGNG
258,000,000万件もでてきたw
0591デフォルトの名無しさんNGNG
Edit Controlを使ったテキストエディタを作ってます。
行番号をつけたいんですがどうすればいいでしょうか
0592デフォルトの名無しさんNGNG
C++.net&MFCを使っています。

二つのListBoxがあってタブキーを押すと交互に二つのListBox
のフォーカスが入れ替わるようにしたいのですが、
その下にOKボタン等もあって普通にタブオーダーを決めたのでは
二つのウインドウ間だけを行き来させることができません。
これを解決する方法はありますでしょうか?
またどちらかのListBoxにフォーカスがあるということを
よりよくわからせたい(ListBoxの周りが太字になったり浮き上がったりするような方法で)
のですがこのような方法はあるのでしょうか?
ご存知のかた
宜しくお願いいたします。
0593デフォルトの名無しさんNGNG
前者:OKボタンのプロパティでタブストップのチェックをはずす。
後者:GetFocusでListBoxにフォーカスがあるときにスタイルを変更したり色変えたり
    好きなように
0594ひよっこプログラマーNGNG
VCです。
テキストファイルを読み込みたいのですが、
fp = fopen("ifile","r");
if(fp==NULL){
printf("失敗\n");
exit(1);}
として、よみこもうとしたのですが、

失敗

としか、でません。ファイルをどこに置けばいいのでしょうか?
ちなみに今はデバッグなどのファイルがある場所に置いてます。
0595デフォルトの名無しさんNGNG
>>594
スレ違いです。
0596あNGNG
>594
>デバッグなどのファイルがある場所
これってDebugビルドしたファイルが出力される
ディレクトリのことだよね?
/Debug/のこと。
そこでいいよ。
ただしVC上からCtrl+F5とかで起動した時は
プロジェクトファイルの置いてあるディレクトリ、
つまりDebugのひとつ上のディレクトリがカレントディレクトリと
見なされるので注意。
作ったプログラムの横において
ダブルクリックにてプログラムを起動するなら
横に置くだけでいい。
またはfopenの第一引数にファイル名のような相対パスで
指定するのではなく"C:\test\ifile"
などと絶対パスで指定したらどこから起動しようが関係ないので
取り合えずにはお勧め。
0597あNGNG
>564
>595
あ、ほんとだ、気付かなかった。
こういうミスはプログラム以前に人格を問われるので
次から気をつけてね。
0598ひよっこプログラマーNGNG
気をつけます。
0599デフォルトの名無しさんNGNG
>597
こういうミスもプログラム以前に性格を問われるので
次から気をつけてね。
0600デフォルトの名無しさんNGNG
ListBoxの見出し部分を二つみっつに切ってる場合
ウインドウサイズを変えても見出し部分のサイズは変わらないですよね。
あれをウインドウのサイズに合わせて比率で動かすようにスルにはどうしたらよいのでしょう?
0601デフォルトの名無しさんNGNG
>>600
ListViewコントロールの間違いだと思うけど、自分で計算してSetColumnWidthじゃないかな。
0602初心者KNGNG
また質問に来てしまいました。

CD-ROMドライブがEドライブだとして。。。。。

struct stat fstat;
stat( Dir1, &fstat);
if( ( fstat.st_mode & _S_IWRITE ) == _S_IWRITE ) {
・・・・・
というソースで、Dir1で指定されたフォルダが書き込み可か否かを
調べようとしました。
ここで、Dir1="E:\folder1"とした場合、書き込み可のビットは立っていませんが、
Dir1="E:\"とした場合、書き込み可のフラグが立ってしまいます。
んで、仕方が無いのでE:\はCDドライブだよ(HDDじゃないよ、で充分)、
という情報を取りたいと思うのですが、どのようにしたらいいのでしょう?
ご存知の方、ご教授ください。
0603デフォルトの名無しさんNGNG
>>602

GetDriveType とか GetVolumeInformation とかじゃないのかなー。
0604初心者KNGNG
>>603 様
ありがとうございます。
GetDriveTypeで目的が果たせそうです。
感謝感謝。
0605初心者NGNG
すんません、、、
バブルソートを行いたいのですが、2つの文字列を比較したときの
文字コードの老若を知るヒントを教えていただけないでしょうか?
0606>>605の初心者NGNG
書き忘れました。2つの文字列はCString型です。
0607605NGNG
Ageで書くべきでした…よろしくお願いします。
0608デフォルトの名無しさんNGNG
せめてMSDNでCStringのメンバ関数見ようよ
Compare
0609>>605の初心者NGNG
>608
MSDN見てみましたが、メンバ関数がたくさんありすぎて…
どうもありがとうございました。
0610デフォルトの名無しさんNGNG
印刷プレビュー画面をカスタマイズするには
CPreviewViewクラスの派生クラスと、自前のダイアログバーを作って
CxxxView::OnFilePrintPreview()でDoPrintPreview()を呼び出すのが
普通の方法ですか?
ほかに楽な方法とかありますか?
0611デフォルトの名無しさんNGNG
MFC難すぃ〜んですけどいい勉強法教えてください。
オブジェクト指向は憂鬱本を読んだからたぶん
大丈夫だと思うんだけど・・・。
0612デフォルトの名無しさんNGNG
>>611
使いまくれ。
そして、MFCのクラス一覧表みたいのを部屋の壁に貼っとけ。
0613デフォルトの名無しさんNGNG
助けて頂きたいのですが、エディットボックスコントロールから文字列を取得してくるコードで悩んでいます。
(m_edit1及びm_edit2はエディットボックスコントロール,m_overwriteはチェックボックスコントロールです。)

char filename_in[200];
char filename_out[200];
int ret1,ret2;
//ファイル名入力チェック
ret1=m_edit1.GetLine(0,filename_in);
ret2=m_edit2.GetLine(0,filename_out);
if(ret1==0 || (ret2==0 && !m_overwrite.GetCheck())){
return;
}
AfxMessageBox(filename_in);
AfxMessageBox(filename_out);

このコードで、DEBUGモードでビルドすると各エディットボックスに入力した文字がメッセージ表示されますが、
Releaseモードだと、文字を入力してもret1が0になってしまいます。
どなたか対処法をご教授願いたいと思います。
0614デフォルトの名無しさんNGNG
>>613
MSDNに
>コピーされる行には、終わりを示す NULL 文字は含まれません
とあるけど、文字列の終わりにヌル文字はある?
0615デフォルトの名無しさんNGNG
>>613
よく読んでないけどGetDlgItemText()じゃだめなん?
0616デフォルトの名無しさんNGNG
>>613
GetLineの3つ目の引数を入れる。
0617613NGNG
>614-616
早速のご回答有り難うございます。

>614
確かにMSDNにはそう書いてありますねー
しかし実際ブレークさせてみると、ヌル文字入っているのですが..(謎

>615
GetDlgItemText()で出来ました!
有り難うございます。

>616
3つ目の引数入れると出来ました!
有り難うございます。
引数2つのGetLineプロトタイプは何なのか、
何故デバッグビルドでは動いたのかまだまだ不明点はありますが、
お陰様で動かす事が出来ました。
0618デフォルトの名無しさんNGNG
C サイコー!
0619初心者NGNG
┏━━━━━━━━━━━━━━━━━┓
┣━━━━━━━━━━━━━━━━━┫
┃新・開・保・印刷                  ┃
┣━━━┳━━━━━━━━━━━━━┫
┃      ┃                    ┃
┃      ┣━━━━━━━━━━━━━┫
┃      ┃                    ┃
┗━━━┻━━━━━━━━━━━━━┛

SDI形式で↑のような分割したウインドウを作製したいのですが
どのように実装すればいいのでしょうか?

現在、まずメインフレームを CSplitterWnd で左右に分け
その右側にCFrameWndを貼り付けてそこでまた分割するように
してみたのですが、右側のペインがくぼんだように見えます。

メインフレーム:OnCreateClient
m_wndSplitter.CreateStatic(this, 1, 2);

m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(左側のビュークラス), CSize(150, 100), pContext);
m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(右側のCFrameWndクラス), CSize(100, 100), pContext);

右側のCFrameWndクラス:OnCreateClient
m_wndSplitter.CreateStatic(this, 2, 1);

m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(右上のビュークラス), CSize(150, 100), pContext);
m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(右下のビュークラス), CSize(100, 100), pContext);

環境は VC++6.0です。よろしくお願いします。
0620デフォルトの名無しさんNGNG
俺最強
0621デフォルトの名無しさんNGNG
>>619
わざわざCFrameWnd貼る必要なんてなし。

//真中の区分け
m_wndSpCenter.CreateStatic( this, 1, 2, WS_CHILD|WS_VISIBLE, AFX_IDW_PANE_FIRST );

// 右側を上下に
m_wndSpRight.CreateStatic( &m_wndSpcenter, 2, 1, WS_CHILD|WS_VISIBLE|WS_BORBER,
m_wndSpCenter.IdFromRowCol( 0, 1) );

// 左側のビュー
m_wndSpCenter.CreateView( 0, 0, 略);

// 右上
m_wndSpRight.CreateView( 0, 0, 略 );

// 右下
m_wndSpRight.CreateView( 1, 0, 略 );
0622初心者NGNG
>>621
できました!ありがとうございました。
0623デフォルトの名無しさんNGNG
plug-in をつかったプログラムを作りたいのですが、
なにか、参考になるアドレスなどがあれば教えてください。
0624デフォルトの名無しさんNGNG
Windows XPで画面テーマをXPにしていると、CFrameWnd::GetClientRect()が返すクライアント領域が小さい気がします。
そのため、クライアント領域いっぱいにコントロールを作ろうと思っても
隙間が開きます。
FrameWndのスタイルはMAXIMIZEBOX | MINIMIZEBOX | SYSMENU | THICKFRAMEを落としたものです。
回避法をご存知の方はいらっしゃませんか?
0625デフォルトの名無しさんNGNG
VC++ 6.0です

Accept()した後のCSocketのポインタをAfxBeginThreadの引数として
渡しているのですが、そのThreadの中でCSocketをCloseすると
Closeの中のASSERTで引っかかります。

スレッドを開始する前にCloseを呼ぶと成功します。

これって何故なんでしょうか?
わかる方いらっしゃいましたら教えてください。
よろしくお願いします。

0626デフォルトの名無しさんNGNG
CSocketには、不可視のWindowが隠されているから。
CSocketはステ。
0627デフォルトの名無しさんNGNG
マルチスレッドでソケットを使う場合は

void SocketThreadInit()
{
#ifndef _AFXDLL
#define _AFX_SOCK_THREAD_STATE AFX_MODULE_THREAD_STATE
#define _afxSockThreadState AfxGetModuleThreadState()

_AFX_SOCK_THREAD_STATE* pState = _afxSockThreadState;
if (pState->m_pmapSocketHandle == NULL)
pState->m_pmapSocketHandle = new CMapPtrToPtr;
if (pState->m_pmapDeadSockets == NULL)
pState->m_pmapDeadSockets = new CMapPtrToPtr;
if (pState->m_plistSocketNotifications == NULL)
pState->m_plistSocketNotifications = new CPtrList;
#endif
}

っていうグローバル関数を書いてCSocketインスタンスを生成する前に呼び出す
とMSのどっかのページに書いてたはず。
0628625NGNG
>626
そうですか...。
ということはWinSockでCSocketのようなクラスを
自作しなければいけないんですね。

>627
ttp://support.microsoft.com/default.aspx?scid=kb;ja;JP193101

のことですか?
これはServicePack3で修正されたとのことです。
当方SP5ですのでおそらく関係ないかと思われます。

0629デフォルトの名無しさんNGNG
>>624
逆に必要なクライアント領域のサイズから必要なウィンドウの大きさをきめるのは?
CWnd::CalcWindowRect()か::AdjustWindowRectEx()とか使って。
0630629NGNG
なんか的外れな回答したかな。でもXPは前のバージョンよりも
タイトルバーの高さとかも若干大きくなってるはずだから、今までと
同じウィンドウの大きさだと相対的にクライアント領域は小さくなるぞ。
その辺は考慮してるのか?
0631624NGNG
>>629,630
CFrameWndいっぱいのCListBoxを作ろうと思ってGetClientRectし、その大きさで
CListBoxをCreateしていたわけです。で、今まではうまくいっていたんですが、
XPのスタイルXPだけクライアント領域いっぱいにならず、
下の方に隙間が開いてしまうわけです。ちょうどTHICKFRAMEの下の辺の幅くらい足りません。
スタイルはTHICKFRAMEを外してあります。
XPのバグなのでしょうか?
0632デフォルトの名無しさんNGNG
クライアントいっぱいにするならViewでGetWindowRect?
0633624NGNG
>>632
あ、Viewは作ってないんです。Frameの下にいきなりCListBox。
Dialogにすべきなんでしょうか?オーバーライドするメソッドか何かの関係で、
CFrameWndを使わざるをえなかったような記憶が…
0634デフォルトの名無しさんNGNG
ListBoxならFormViewに貼り付けるかなぁ。
俺ならListView使ってるかなぁ。
どうしてもListBoxなら独自にListBoxを使ったコントロールビュー作るか。
MFCスレ的にはこの辺が定番な回答かも。

つーかXPもってないので試せま千円。
0635デフォルトの名無しさんNGNG
リストボックスだと、LBS_NOINTEGRALHEIGHTが付いていなかったら
項目の高さの整数倍になるように調整されてしまうわけだが。
0636624NGNG
>>635
ソレダ!

お恥ずかしいです。今までが偶然ぴったりいっぱいにおさまってたんですね。
お騒がせしました。
0637デフォルトの名無しさんNGNG
MFCのCHttpを使用してサーバにファイルをアップロードしたいんですけど
データ自体は転送されるのですが
サーバ側のcgiでformをうまく解析できず
ファイルの転送が完了しません
ちなみにindex.htmlでformを書いてcgiを動かせば正常に作動します

以下のデータは全て直接(CString strData, CHttpFile *pFile)
pFile->WriteString( strData )で書き込んでいます

msize= 230653
-----------------------------
Content-Disposition: form-data; name="author"

who
-----------------------------
Content-Disposition: form-data; name="fname"; filename="C:\0.ppm"
Content-Type: text/plain

P6 320 240 255
:JF:JF8LG9MH<LH<LH@LE?KDBJGBJGFKEHMGKKJKKJHMGIN
HSFDQGCPFGPIGPIEQJFRKCUJEWLGSLGSLJSLLUNOULMSJL
...続く
0638デフォルトの名無しさんNGNG
Content-Lengthはキチンと送っているか?
そのあたりの手を抜いているCGIは多いぞ。
0639637NGNG
>>638

msize= 230653というのがContent-Lengthの値に対応しています
サーバ側では

u_long msize = atol(getenv("CONTENT_LENGTH"));
if( msize > MAX_MEMORY ){
printf("Too large data to recieve.\n");
exit(1);
}

で読み込んでいます
637のデータ自体は標準入力から得られたものをファイルにも書き込んでいるので
「データそのもの」は送信されています...

ちなみにこのプログラムはいまサンプルとして製作中のため

strData += "-----------------------------\r\n";
strData += "Content-Disposition: form-data; name=\"author\"\r\n\r\n";
strData += "who\r\n";
strData += "-----------------------------\r\n";
strData += "Content-Disposition: form-data; name=\"fname\"; filename=\"C:\\0.ppm\"\r\n";
strData += "Content-Type: text/plain\r\n\r\n";
strData += "P6 320 240 255";
strData += data;

としていますが,ここがまずいとかありませんか?
0640637NGNG
>>638

ちなみにヘッダーは

const TCHAR szHeaders[] =
_T("Accept: */*\r\n User-Agent: HogeSampleCode\r\n");

です
0641デフォルトの名無しさんNGNG
WriteStringはWrite( pstr, lstrlen(pstr) );だけど、\0含んでたりしないか?

それでもダメなら、間にデバッグ系のプロキシ噛ませて、
何吐いているか確認したら?
0642637NGNG
>>641

えとですね

最後に書かれているデータ

P6 320 240 255
:JF:JF8LG9MH<LH<LH@LE?KDBJGBJGFKEHMGKKJKKJHMGIN
HSFDQGCPFGPIGPIEQJFRKCUJEWLGSLGSLJSLLUNOULMSJL
...続く

の部分は画像でありまして
このデータだけをマニュアルで切り出せば
途中で切られることなく転送前の画像と全く同じになっていることから
データ長は正しいと思われます

あ,それと一応ですが
サーバ側cgiの標準出力で読んだデータは解析にかける前に
テンプデータとして別に保存しています
といっても解析されないので転送されたファイルは作成されないのですが...


0643637NGNG
>>641

参考に正しく動いているindex.html版の結果を載せます

-----------------------------7d22972e2a70122
Content-Disposition: form-data; name="author"

who
-----------------------------7d22972e2a70122
Content-Disposition: form-data; name="fname"; filename="C:\0.ppm"
Content-Type: text/plain

P6 320 240 255
(ここには巨大なデータが改行なしで書かれています)
-----------------------------7d22972e2a70122--
Recieved [author] = [who]
Recieved file C:\0.ppm

最後の2行はサーバが解析した結果です

すみませんねレスしていただいて...
POSTについては,もう2週間以上かかってるんです...
自分では最後の大詰めだと思っているんですが甘いですかね?

>WriteStringはWrite( pstr, lstrlen(pstr) );だけど、\0含んでたりしないか?

これについての回答ですが

pFile->SendRequestEx( strData.GetLength());
pFile->WriteString( strData );

のように記述しています
0644デフォルトの名無しさんNGNG
Content-Type: multipart/formdata; boundary=-----------------------------
はつけてるだろうな、、、
0645デフォルトの名無しさんNGNG
まちがえた。boundaryに--が先行するわけだから、
Content-Type: multipart/formdata; boundary=---------------------------
だな。

そして、postの最後に-------------------------------の追加。
でよかったかな。詳しくは、MIME Multipartを。
0646637NGNG
>>644

書いてませんでした

後,ヘッダーにですか?データの中にですか?
共に試しましたが変化はありませんでした...
とりあえずは

const TCHAR szHeaders[] =
_T("Accept: */*\r\n User-Agent: UMTPSampleCode\r\n Content-Type: multipart/formdata; boundary=-----------------------------\r\n");

で保存しました

実行時の返り値が

Status Code is 3435973836
となっています
確か200が正常終了なので...
0647637NGNG
>>645

むむっ...
postの後にですか...

pFile = pServer->OpenRequest( CHttpConnection::HTTP_VERB_POST,
strObject, NULL, 1, NULL, NULL, dwHttpRequestFlags );

なので...後ろに追加する方法が...
実はMSDNのTEARというサンプル(サンプルはGET)を参考にしています
0648デフォルトの名無しさんNGNG
ざっくり説明すると、
ヘッダ部
Content-Type: multipart/formdata; boundary=<BOUNDARY>
<BOUNDARY>は任意の、ぶつからなさそうな任意の文字列とする。

ボディ部
各パートの区切り <改行> + "--" + <BOUNDARY> + <改行>
MIMEの最後 <改行> + "--" + <BOUNDARY> + "--" + <改行>
となる。
ブラウザの出力と見比べてみるよーに。

>467
POSTの後、というかPOSTするデータの末尾(最後)という意味
0649637NGNG
>>645

あ あ あ あ あ

あ り が と う ご ざ い ま す !!

うまく動作しました

最終行に-------------------------------を追加しろということだったんですね
もうなんと言っていいのやら

本当に感謝します

ここ数週間自分で悩み続けて
今日,他人を頼ったわけですが
解決できて何よりです
0650637NGNG
>>648

なるほど,確かに自分の送信したデータと比較すると
違いがわかります
0651デフォルトの名無しさんNGNG
MFC超初心者です。これから勉強したいと考えているのですか、
どこ良いサイトが有りましたら教えって下さい
0652デフォルトの名無しさんNGNG
「スタートボタン>>Windowsの終了」の時に呼び出される
ダイアログを呼び出す方法教えてくだせー
0653デフォルトの名無しさんNGNG
PGM形式のファイルを表示させたいのですが、可能なのでしょうか?
0654デフォルトの名無しさんNGNG
現在、CPropertySheetとCPropertyPageを使って作成したモードレスのプロパティシートにおいて
特定ページ内に、入れ子でプロパティシートを配置しようと考えています。

これを実装する上で、参考となる情報、または情報へのポインタがありましたら教えてください。
0655デフォルトの名無しさんNGNG
CodeGuru、CodeProject。
ダイアログにプロパティシートを貼り付けるサンプルがあったはず。
0656デフォルトの名無しさんNGNG
>>655
CodeGuruで見つかりました&実装できました。ありがとうです。
0657デフォルトの名無しさんNGNG
デバッガが

例外処理 (初回) は hoge.exe (ATOK15W.IME) にあります:
0xE06D7363: Microsoft C++ Exception。

シリアライズしてるときにでてくるんですけど
やっぱり悪いのはATOKじゃなくておれですか?
0658デフォルトの名無しさんNGNG
WinInetで、FTPでレスポンスを取得したいのですが、

pFtp->Command("SITE DEVICE 00 00 00", CFtpConnection::CmdRespNone);
だと、問題ないのですが(レスポンスは取得できません:正常)

pFtp->Command("SITE DEVICE 00 00 00", CFtpConnection::CmdRespRead);
だと、そのままフリーズしてしまいます。

どなたか、アドバイスお願いします。
MFC7.0 IE6.0SP1
0659デフォルトの名無しさんNGNG
一度リリースモードでexeファイルを出力してから
再度ワークスペースを開いて
新しくメンバを追加しようとしたら、
「新規メンバを追加できません」というダイアログがでてできません。
もしかして一度リテールで出力したらそのクラスでは
もういじれなくなるんでしょうか?
0660デフォルトの名無しさんNGNG
>659
VC6.0?内部データがぶっこわれると、発生する。
ソースとプロジェクト以外の内部ファイルを全て削除すれば、復活するかも。
0661デフォルトの名無しさんNGNG
>>652
PostMessage(FindWindow(...), WM_CLOSE, 0, 0);

FindWindowの中身は、Spyで確認してね。
0662デフォルトの名無しさんNGNG
>657
他のIMEではどうなるの?
0663デフォルトの名無しさんNGNG
>>660
*.clwとか*.ncb辺りだね。
0664デフォルトの名無しさんNGNG
VIsualC++.net + MFCでプログラムを書いています。
IMEで入力フォーカスのある状態
(たとえば「へんかん」と入力してスペースを押す前の
下線がついている状態)
の文字列を取得したいのですが、そういう方法はありますでしょうか?
文字を入力してスペースを押す前にF11あたりを押したら
その文字列がポップアップされるみたいなイメージです。

またIMEで漢字変換の候補が出現するボックスのような
ウインドウを作るのはどのような方法がベストなのでしょうか?

どうもIME周りは情報が少なく良くわからなくて困っています。
ご存知の方ご教授をお願いします。
0665デフォルトの名無しさんNGNG
一つ聞きたいことがあるのですが、
整数があって、特定の桁数にそろえて文字列(CString)
に代入するにはどうすればいいでしょうか?
例:
int i = 20;
CString s;
5桁にそろえるとき、
sに00020という値が欲しいわけです。
0666デフォルトの名無しさんNGNG
>>665
ヘルプでCStringのメンバ関数見てみ。
Format()つーのがあるから。

べつにsprintf()で整形してから代入してもええけどな。
0667デフォルトの名無しさんNGNG
はい、見たのですが、Formatは%dなどでint変数を取り込んだりしますが、
桁数が、最小になりますよね?
5桁など指定桁数に揃えたいわけです。
0668○NGNG
>>667
format指定でどうにか出来たかな?%0.5dかな?
まあ前に"00000"を継ぎ足してRightメソッドでもいいだろうけど。
0669あNGNG
>665
Format
っていってるだろ
頭悪いのか?
マルチしね。
0670デフォルトの名無しさんNGNG
>>667
format文字列の桁指定くらい理解しておかないといつまでたっても初心者だぞ。
ヘルプにちゃんと載ってるだろ?
0671デフォルトの名無しさんNGNG
あの、COLORREFというものについてなのですが、
これに格納した色データを各要素に分解する方法はあるのでしょうか?
RGB()の逆をしたいわけです。
0672デフォルトの名無しさんNGNG
Get[R|G|B]Value

MSDNぐらい、持ってないの?
0673デフォルトの名無しさんNGNG
>どうもIME周りは情報が少なく良くわからなくて困っています。
MSDN,PlatformSDK,DDKのドキュメントをまず、読みましょう。
0674夢を見る人NGNG
CSplitterWndのCreateViewで窓を分割したんですが、
分割した小窓のハンドル(HWND)を取得するにはどうすればいいんですか?
0675デフォルトの名無しさんNGNG
小窓.GetSafeHwnd()
0676デフォルトの名無しさんNGNG
CWnd* GetPane( int row, int col );
0677VisualC++初心者NGNG
AppWizardでSDIのフレームを作りました。それで、生成されたCView派生クラスの
OnInitialUpdate関数でCComboBoxオブジェクトを建築して、Create関数で
コンボボックスを貼り付けました。貼り付けたコンボボックスは、正常に
動作するのですが、コンボボックスの文字が異常に大きくなってしまいました。
文字の大きさを指定するにはどうしたらよいのでしょうか。

おおまかな方法を教えていただければ、後は自分で調べるので、アドバイスよろしく
おねがいします。
0678デフォルトの名無しさんNGNG
CComboBoxオブジェクト.SetFont( )
0679デフォルトの名無しさんNGNG
■謎の現象■
スレッドを作成し、そのスレッドプロシージャから指定ウインドのDCに描画するプログラムを書きました
ウインドはダイアログに乗っけたStaticで、そのウインドへのポインタは初期化の時に一回だけ
GetDlgItemで取得し、グローバル変数に保持させます
その後スレッド関数はそのグローバルなポインタg_pWndを使って
都度、g_pWnd->GetDC()でDCを取得し、そこに絵を描く寸法です。

しばらくはおとなしくウインドに描画するのですが突然(9990回めの呼び出し)で
ウインドでも何でもないデスクトップに描画に行ってしまうのです・・
さらにいろいろ調べると突然アクセスバイオレーションになったりすることもあるようです。
原因はGetDCしたもののm_hDCがNULLだったからでした。突然そうなるのです。
なぜこのような事が起こるのですか??
0680デフォルトの名無しさんNGNG
>>679
CWnd::GetDlgItem() →「返されるポインタは、一時的なポインタです」とMSDN
にある。9989回は“たまたま”エラーにならなかったということだと思われる。

Cwndオブジェクトを他のスレッドに持っていくのは危険だ、と MFCの ASSERTに怒られる
こともあるから、そんなときは CWnd* でなく、HWND をグローバルにする。
0681デフォルトの名無しさんNGNG
なるほど、そうでしたか。どうもありがとうございます
HWNDでトライしてみます。ではでは。
0682664NGNG
>673
いろいろ試行錯誤したらわかってきました。
HWND hWnd = this->m_hWnd;
HIMC hImc = ImmGetContext(hWnd);
char str[256];
memset(str,'\0',256);
ImmGetCompositionString(hImc,GCS_COMPREADSTR,str,256)

でこのようにするとstrにIMEへの入力文字列が取れることがわかったのですが、
"テスト"のように半角カナなってしまいます。
これを"tesuto"として取得したいのですが、そのためには、
IMEを起動させてからのキー入力を取ったほうがよいのでしょうか?
しかしその場合バックスペース等の処理が・・
もしくは半角カナからローマ字へとも思うのですが、
C++の正規表現ってわけわかんなすぎる・・・
0683デフォルトの名無しさんNGNG
C++で、GUI環境の脳波分析プログラムを作ろうと思っています。
一晩中のデータを見たいのでエクセルなどでは全体を見ることができないんです。
グラフを表示させてそれをページとばしでみていけるようなプログラムを作れるでしょうか?
アドバイス等お願いします
0684超初心者NGNG
VC.netのMFCで、ダイアログベースで、タブコントロールを用いて、タブが9つ
(上段に5タブ、下段に4タブ)というようなダイアログを作りたいのですが、
SetItemSizeを用いてすべてのタブの幅・高さを同じに設定する方法はわかったのですが、それでは
上段5段の合計幅と下段4段の合計幅が、違ってしまい、ブサイクになってしまうので、
上段の合計幅と下段の合計幅を同じにしたいので、タブ1つずつについて幅を
設定する方法を調べてみたのですがわかりませんでした。
タブごとに、幅を変える方法がわからないので知っている方がいましたら、
ご教授お願いします。
誠に初心者質問で申し訳ないです。


0685デフォルトの名無しさんNGNG
とりあえずマルチポストはどうかと思ふ。
0686664NGNG
とりあえず正規表現を使って日本語を無理やり
ローマ字にすることで解決しました。
ですが、IMEの変換候補ボックス風ウインドウを作る方法がどうしてもわかりません。
IME専用のクラスなどがあるのでしょうか???・
0687デフォルトの名無しさんNGNG
MFCでひとつのフレームにViewが複数(仮にViewA,ViewB)あったとき
あるクラスからViewBのエディットボックスのポインタを手に入れたいときなどは
どうしたらよいのでしょう?
ようするにViewBへのポインタが手に入ればそこからGetDlgItem
すればよいのかとは思うのですが。
0688デフォルトの名無しさんNGNG
おっぱい (ρ_;)ノ
0689デフォルトの名無しさんNGNG
>>687
>>676
0690デフォルトの名無しさんNGNG
>>687
何がどうなってるのか良くわからんが、
普通フレームがViewへのポインタ持ってるだろうから、
そこからもらうんじゃないか?
0691デフォルトの名無しさんNGNG
Viewというよりはメインフレームでは
CSplitterWnd w2;
CSplitterWnd w1;
このようにしてCSplitterWndを使って分割してそれぞれの
ウインドウに対してViewを設定しているという状態なんですね。
そうするとまったく別のクラスからどうやって
Viewのポインタを手に入れるかがわからなくて・・・
0692デフォルトの名無しさんNGNG
>>691
>>676
0693デフォルトの名無しさんNGNG
Viewのポインタを取得してメンバを操作するのもよいが、
わしは、SendMessageで処理しているぞ。

任意のViewにOnInitialUpdateを追加して、

// Appのメンバにハンドルをつくり、保持する
CxxApp*pApp = (CxxApp*)AfxGetApp();
pApp->m_hxxViewWnd = GetSafeHwnd();
あとは、DocからでもMainFrameからでも
SendMessage( pApp->m_hxxViewWnd, UMSG_xx, NULL, NULL );
とする。
スプリッターウインドに対しても別々に処理できる。

0694691NGNG

レスありがとうございます。

>692

ただGetPaneは
CSplitterWndの関数ですよね。
CMainFrameには

class CMainFrame : public CFrameWnd
{
//
CSplitterWnd w2;
CSplitterWnd w1;
このように二つのウインドウの変数があるのですが、
w1かw2のどちらかを手に入れることができません。
ただw1かw2のどちらかが手に入ればGetPaneもいらない気がしますが・・・・

>693
つまりそれはOnInitialUpdate以外で使う場合は
メッセージを自作しなければならないということですね・・・
WM_****見たいなのをちょっと難しそうですが試してみたいと思います。

ただこのような形で
CxxApp*pApp = (CxxApp*)AfxGetApp();
pApp->m_hxxViewWnd = GetSafeHwnd();
どうやって二つのCSplitterWndを区別するのでしょうか?
0695デフォルトの名無しさんNGNG
CSplitterWnd w2;
CSplitterWnd w1
としているのは、3分割するためだと推測しまして、

w1.CreateStatic(this,1,2);
w2.CreateStatic(&w1,2,1,WS_CHILD | W・・・
w2.CreateView(0,0,RUNTIME_CLASS( CTopView)・・・
w2.CreateView(1,0,RUNTIME_CLASS( CBtmView )・・・
w1.CreateView(0, 0, RUNTIME_CLASS (CLeftView)・・・
となると思います。

で、CTopViewとCBtmViewと CLeftViewのハンドルはそれぞれで、
取得しておくと、それぞれ、Viewのメンバを操作できます。

おそらく、この手の操作は、ネット上でもっと良い方法が公開されていると思われます。


0696デフォルトの名無しさんNGNG
>>694
((CMainFrame*)AfxGetMainWnd())->w2.GetPane( ・・・ );
0697デフォルトの名無しさんNGNG
MFCの売り物はドキュメント・ビューアーキテクチャらしいのですが、
私は直接DBMSにアクセスすることが多いので、ドキュメントの方を
使ったことがありません。
なにか間違ってます?
0698デフォルトの名無しさんNGNG
age忘れ
0699デフォルトの名無しさんNGNG
>>697
問題ない。
別に必要ない物を無理に使わんでもよい。
0700デフォルトの名無しさんNGNG
>>697
VBでフォームにロジックとか全部書くような感じか?
0701デフォルトの名無しさんNGNG
質問なのですが、VC++.netでタブ一つ一つを違う幅に設定することは不可能
なのでしょうか?
すべてのタブを同幅に設定するのは、SetItemSizeを使うことによってできましたが・・・
0702デフォルトの名無しさんNGNG
>>699 ありがとうございます。
>>700 ロジック部は別モジュールに切り分けております。

フレームワークからドキュメントを切り離す(捨てる)ことは出来るのでしょうか?
0703デフォルトの名無しさんNGNG
>>702
できる。
0704デフォルトの名無しさんNGNG
>>702
MFC AppWizardで「ドキュメントビューアーキテクチュアをサポートする」に
チェックを入れた場合のこと?その場合はできないよ。
0705デフォルトの名無しさんNGNG
>>701
まず、.NETは持ってないので参考まで。

MSDNのCTabCtrl::Createより
>TCS_RAGGEDRIGHT コントロールの全体幅に合わせるようにタブを伸縮しません。
>このスタイルはデフォルトです。
なのでこのスタイルをはずしてみては。

そこら中にマルチするのはどうかと思う。
0706デフォルトの名無しさんNGNG
VC++.NETでMFCプロジェクトを新規作成。
CMainFrame::CMainFrame()を以下のように書き換える。

CMainFrame::CMainFrame()
try
{
  // TODO: メンバ初期化コードをここに追加してください。
}
catch(...)
{
}

コンパイルエラーが出まつ。なんで?
ちなみにcatchブロックの最後に ; をつけると通る。
0707デフォルトの名無しさんNGNG
>MFCの売り物はドキュメント・ビューアーキテクチャらしいのですが、
>なにか間違ってます?
使いたいように使うのが良いと思います。

本当の考え方的には、
ドキュメント → データの保持・操作・入出力に徹する
ビュー → ユーザインターフェース(操作など)・ドキュメントのレンダリング(ドキュメントの視覚化)に徹する
と言うのが、設計思想の様です。
0708デフォルトの名無しさんNGNG
VC++.netでの質問です。
あるダイアログがListBoxを一つもつプログラムを作っています。
ListBox内の項目を上下キーで移動して、
項目をリターンで決定するようにするのが目的です。

そこでリターンキーが押されたことを取得するために
ListBoxのプロパティでWantKeyInputの欄をtrueにし
ダイアログの派生クラスで
OnVKeyToItem(UINT nKey, CListBox* pListBox, UINT nIndex);
をオーバーライドし

if (nKey == VK_RETURN){
//
}
としているのですが、
うまく動作していません。
変数の推移を見るとnKeyは229となっており
きちんとしたキーコードが帰ってきていないようです。
これにはどのような原因が考えられますでしょうか?
0709デフォルトの名無しさんNGNG
>705
情報ありがとうございます。
タブの数に関わらずタブアイテムの合計幅を上段・下段ともに同じくするのは、
プロパティのstyleをright justifyにすることで解決しました。
(VC6で言えば、プロパティのスタイルの配置を「右に揃える」にするに当たる、、かな?)
これにより705さんの教えてくれた、TCS_RAGGEDRIGHTのデフォルトをはずす事に
なったのだと思います。

しかし、個々のタブ幅を設定する方法は結局わからずなので、現状では、タブに
設定する名前の前後にスペースを入れることでムチャ技で対応しようと思います。

>マルチに関して
質問した時に回答がないままに、レスが流れてしまったので3つほどのスレに
書き込み&2回書き込みしてしまいました。
以後気をつけます。
0710デフォルトの名無しさんNGNG
>>709
幅というか、CTabCtrl::SetMinTabWidth で、最小幅を指定してやれば
いいんじゃないかな? 試してないから分かんないけど。
0711デフォルトの名無しさんNGNG
ビュー/ドキュメントアプリで一ちゃん最初にクラスを作って
アプリケーションが終了したときに破棄したい場合
どこに書くのが普通でしょうか?
C***Appクラスのコンストラクタ、デコンストラクタ?
0712デフォルトの名無しさんNGNG
MFCでマウスカーソルの位置でなくて
テキスト入力用カーソルの座標を取得する方法ってないでしょうか?
EditBoxなんかでカーソル入力を行う際に
カーソルの位置(何文字目か)とかではなくて座標が
わかればコマンド入力時の
ヒントボックス見たいなものが作れて便利なのですが。

マウスカーソルのそばにヒントボックスをポップアップするのは簡単そうですが・・・・
テキストカーソルとなるとちょっと難しくて困っています。


0713デフォルトの名無しさんNGNG
 InternetExplorerで、サイト上から特定の拡張子のファイルを
ダウンロードしたときに、InternetExplorerのクライアント窓上に
自動起動するようなアプリケーション(*.pdfに対するAcrobatReaderのような感じ)を
VisualC++6 で作成したいのですが、
どこか、良い解説(またはサンプル等がある)サイトなどは無いものでしょうか。
0714デフォルトの名無しさんNGNG
>>706
ま、VC++でfunction-try blockは使うなってことよ。
0715706NGNG
ちゃんと答えろよクズども
0716 NGNG
>>706
CMainFrame::CMainFrame(){
try{
  // TODO: メンバ初期化コードをここに追加してください。
}catch(...){
}
}
なら通ったぜ。
0717デフォルトの名無しさんNGNG
(´-`).。oO(functionごとtry領域に入れるにはどうすればよかったんだっけ?)
0718706NGNG
>>716
>>714のがマシだな(プ
0719708NGNG
結局なぜnkeyがきちんと帰ってこないかわからなかったので
プロパティじゃなく手動でLBS_WANTKEYINPUT
を指定することにしました。
そこでCListBoxクラスのOnCreate関数をオーバーライドして
cs.style |= LBS_WANTKEYINPUT
すればよいということはわかったのですが、

しかし現在
CDialogの派生クラスであるCMydlg
がCListBoxを持っているという関係にあります。
この場合
CListBoxの中の関数をオーバーライドするにはどうしたらよいのでしょうか?

CMydlgの中の関数をオーバーライドする方法はわかるのですが、
その所持するクラスを変更したい場合
CListBoxを派生したクラスを作ってそれを所持する必要があるのでしょうか?

0720デフォルトの名無しさんNGNG
>>719
はい。
0721デフォルトの名無しさんNGNG
>>719
リストボックスに Enterキーの処理をさせるんじゃなくて、ダイアログの OnOK()
とかをオーバーライドしたほうが超簡単だと思うのだが、だめ?
0722デフォルトの名無しさんNGNG
>>711
クラスを作る/破棄する?
デコンストラクタ?
人にわかる言葉で説明しましょう。
0723デフォルトの名無しさんNGNG
>>711
それでOK。
0724デフォルトの名無しさんNGNG
>>712
あれはキャレットと言いまつ。
GetCaretPosで座標は求められるけど、
どのウィンドウがキャレットを持っているか自分で把握してるのが条件。
0725711NGNG
>723
どうもです
そのようにやってみます。
MFCの場合は基本的なスタイルみたいなのがわからなくて・・

>722
すみません。職業プログラマなもので
ちょっとわかりずらい書き方だったかもしれませんね。
ごめんなさい。
0726デフォルトの名無しさんNGNG
ポインタの指すオブジェクトをコピーしたいんだけど
いい方法ないですか?
0727デフォルトの名無しさんNGNG
>>711
デコンストラクタじゃなくて
デストラクタ

そう言いたいだけちゃうんかと。

0728デフォルトの名無しさんNGNG
>>726
CHogeDoc* pDoc = (CHogeDoc*)AfxGetMainWnd()->GetActiveDocment();
CString str;
str = pDoc->m_str;
0729719NGNG
>721
onOkのオーバーロードがうまくいかないので、
(OKボタンをもう消してしまっていたので、
関数を作れない・・・・プロパティにもWM_OKみたいなのがないので・・(^-^;)
そこでOnKeyDownをオーバーロードしてみました。
が、リストボックスのなかにフォーカスがある場合、
ダイアログにはOnKeyDownが返らないんですね・・
0730デフォルトの名無しさんNGNG
CListBoxを拡張するクラスを@@ClassWizardで@@つくる
CMyLstBoxをメンバ変数(コントロール同期)にする
0731デフォルトの名無しさんNGNG
>>729
適当にボタン作ってIDをIDOKにしてハンドラ作った後にボタンを消せばハンドラだけ有効になる
0732デフォルトの名無しさんNGNG
>>729
virtual void CDialog::OnOK( ) なんだから、普通に手動でヘッダに
 void OnOK();
って書いてオーバーライドできるよ。IDOKボタンが無くても、Enterを押したときは
既定で呼ばれる。
0733729NGNG
>731,732

ありがとうございます。
その方法でできました。

0734デフォルトの名無しさんNGNG
CEditBox内の文字列に文字を挿入し、
カーソル位置をその部分にもって行くプログラムを作りたいです。
GetWindowTextした文字列を編集して
SetWindowTextすれば
挿入はできると思うのですが、
カーソル位置を移動させることがうまくいきません。

CEdit *CE = (CEdit*)GetDlgItem(IDC_EDIT1);
CE->SetFocus();
POINT p;
p.x = 10;
p.y = 0;
CE->SetCaretPos (p);


SetCaretPosの使い方がまずいのでしょうか?

0735デフォルトの名無しさんNGNG
>>734
CE->SetFocus();
CE->SetSel(3, 3);
0736デフォルトの名無しさんNGNG
ダイアログにコンボボックスAとコンボボックスBがあります。
A,Bとも最初は何も選択していない状態なので、GetCurSel() == -1となってます。
コンボAで何かを選択したときに選択した項目番号に応じて
コンボBの項目内容を決定したいとします。
Aを選択するとダイアログが以下のイベントメッセージを受け取るんで
OnSelchangeComboA()、OnSelendokComboA()
これらの関数内でBの項目を初期化しようとしたんですが
GetCurSel()すると、新しく選択された値ではなく-1のまま・・・
どうすればよいでしょうか?DDXとか使わないとだめっすか?
0737デフォルトの名無しさんNGNG
>>736
GetDlgItemでもDDXでもできたけど。<OnSelchangeComboA()
0738736NGNG
ぐえっ!バグチンですた・・・
AのイベントでまずAのGetCurSel()してからBに項目入れなきゃいけないのに
BのGetCurSel()してからBに項目入れようとしてた。
そりゃ-1だわ(´・ω・`)
0739デフォルトの名無しさんNGNG
static でポインタ宣言するってのは有り?
0740デフォルトの名無しさんNGNG
グローバル変数を介してポインタのやりとりをする
のとあんまり変わらんな
0741デフォルトの名無しさんNGNG
WINAPI WinMainのHINSTANCE hInstanceをMFCプログラムの中で取得できますか?
DialogBox()から読み込んだときに生成されるhWndは、MFCでダイアログその他を
DialogBox()を使わずにつくったときに、取得できますか?
享受ください。
0742デフォルトの名無しさんNGNG
CWinApp(theApp)のメンバ変数にm_hInstanceって無い?
0743デフォルトの名無しさんNGNG
享受・・・・
0744デフォルトの名無しさんNGNG
AfxGetInstanceHandle()だろう。
0745デフォルトの名無しさんNGNG
二番目の問はGetSafeHwnd()のことだろうか
0746デフォルトの名無しさんNGNG
有難うございます。
ただ、GetSafeHwnd は、CWndのメンバなので、Dlgではどうすればいいでしょうか?
0747デフォルトの名無しさんNGNG
>>746
ダイアログもCWndじゃん。
0748デフォルトの名無しさんNGNG
そうですね。有難うございます。
0749デフォルトの名無しさんNGNG
エクスプローラなどのある別のウィンドウでのマウスのダブルクリックを感知して
動くようなプログラムを作りたいんですがどこかにヒントみたいなものは無いでしょうか。

SnapItでしたっけ、エクスプローラの空白部分をクリックしてフォルダを上の階層に上るような、
そういう処理がしたいんですがどうすればいいでしょうか?
0750デフォルトの名無しさんNGNG
たびたびですが、
メンバ関数をCALLBACK関数にし、
DialogBox()のような形で呼び出せないでしょうか?
0751デフォルトの名無しさんNGNG
>>750
DialogBoxのような形ってのがいまいち何のことを言いたいのかわかりませぬ。
0752デフォルトの名無しさんNGNG
>>750
CALLBACK関数にしたいメンバ関数をstaticにする。
>>751に同意だが、MessageBoxのことか?
0753デフォルトの名無しさんNGNG
> DialogBox()のような形で呼び出せないでしょうか?
  ↓翻訳↓
DialogBox() のようなAPI に渡す、CALLBACK関数として使えないでしょうか?
0754デフォルトの名無しさんNGNG
それじゃなんのためにMFC使ってるんだよ・・・
まぁCALLBACK関数は>>752のようにstaticなメンバ関数にすればよい。
0755デフォルトの名無しさんNGNG
static にすると(ヘッダーのほうだけstatic にしたのですが)
エラーが出ます。
どのように書き換えればいいのでしょうか?
0756デフォルトの名無しさんNGNG
>755
書き忘れました。static にすると、
メンバ変数が使用できないので困っています。
0757デフォルトの名無しさんNGNG
なんかHINSTANCEが欲しいとかHWNDが欲しいとかCALLBACK関数を渡すとか、
もしかしてMFCアプリでDialogBox()APIを使いたいってだけのことか?
なんでMFCアプリなのにCDialogを使いたくないのかが激しく謎なのだけど
とりあえずエラーが出たならその内容を書くなりソースを提示するなりしる。
つーか無理してMFCにこだわらずにプロシージャをグローバルに宣言して
普通のWin32APIアプリみたくしたら。
0758デフォルトの名無しさんNGNG
C++の勉強をする。
0759デフォルトの名無しさんNGNG
いえ、CALLBACKで返す関数を使用したいのです。
(その関数以外は、MFCでないととうてい処理できません)
0760デフォルトの名無しさんNGNG
だからエラーならそのエラー内容を
0761デフォルトの名無しさんNGNG
メンバ変数が使用できない わけです。
0762デフォルトの名無しさんNGNG
thisポインタ渡してコールバック関数内で
CHoge* pWnd = (CHoge*)this;
pWnd->m_hoge; // メンバ変数にアクセス
0763デフォルトの名無しさんNGNG
掻き忘れましたので掻いてきます。
0764デフォルトの名無しさんNGNG
静的メンバ内では、this は使えないのではないでしょうか?
0765デフォルトの名無しさんNGNG
だから間接的に渡すんだってば。
例えばフォント列挙でEnumfontFamiliesの第三引数にコールバック関数、
第四引数(LPARAM)にthisを渡すのと同じ。
0766デフォルトの名無しさんNGNG
あーそうか>>762はこうだった。

CHoge* pWnd = (CHoge*)lParam;
pWnd->m_hoge; // メンバ変数にアクセス
0767デフォルトの名無しさんNGNG
>>766のlParamがEnumFontFamiliesで渡したthisってことね。
ぐだぐだになってきたけど言いたいことわかるだろ!な!な!
0768デフォルトの名無しさんNGNG
>>767
ちょっとよく分かりません。もう少し詳細お願いします。
0769デフォルトの名無しさんNGNG
がーん
ってかそのコールバック関数て何?自作?
0770デフォルトの名無しさんNGNG
引数が無かったりLPVOIDが使えなかったりする
CALLBACK関数もあるからな。そのコールバック関数
の宣言晒してみぃ。
0771デフォルトの名無しさんNGNG
そのコールバック関数て自作?
0772デフォルトの名無しさんNGNG
自作と言えば自作ですが、
BOOL CALLBACK CTestDlg::MainDialogProc(
HWND hwndDlg,
UINT msg,
WPARAM wParam,
LPARAM lParam)

デバッグでlParamの値が0になっていて実行中にエラーが出ることが
判明しました。
0773デフォルトの名無しさんNGNG
CTestDlgはMFC使ってCDialogの派生か?
0774デフォルトの名無しさんNGNG
>>772
DialogBoxParamでちゃんとthisを渡せ。以上。
# つーか、API 呼ばずにMFCのCDialog使えってばさ。
0775デフォルトの名無しさんNGNG
dialog を表示するのが目的でなく、CALLBACK関数を実行するのが
目的。
0776デフォルトの名無しさんNGNG
>>774
いやだっていっているでしょ。
0777 NGNG
>>776
thunkを間に挟めばできる。
意味がわからないなら諦めろ。
0778デフォルトの名無しさんNGNG
というかもう解決済みのはず。
0779デフォルトの名無しさんNGNG
ViewクラスのPreTranslateMessageを使用して
以下のようにしてスペースキーの入力を得ています。

BOOL MyView::PreTranslateMessage(MSG* pMsg)
{// TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください

if (pMsg->message == WM_KEYDOWN){
    case VK_SPACE:
//ここで処理
return TRUE;
break;

このときIMEがONならば別の処理をするようにしたいのですが、
たしかにその処理はできるのですが、
同時にIMEにもスペースキーの入力が伝わってしまって
変換ウインドウが出てしまいます。
これをIMEがONのときもスペースキーの入力がIMEにいかないようにしたいのですが、
そのようにする方法ってありますでしょうか?
0780デフォルトの名無しさんNGNG
bmp、jpeg等のヘッダ情報を取得する方法を教えて下さい。
サンプルソース等載せていただけると助かります。
よろしくお願いします。
0781デフォルトの名無しさんNGNG
>>780
ネットにごろごろ転がってるから調べてみましょう。
http://www.google.co.jp/
0782780NGNG
探したんですが見つからないんです。。。
調べ方が悪いのでしょうか?
0783デフォルトの名無しさんNGNG
VC++で最近使ったファイルと最近使ったワークスペースを
クリアしたいのですが、どこを削除すれば良いでしょうか?
0784デフォルトの名無しさんNGNG
>>779
pMsg->message = WM_NULL;
0785デフォルトの名無しさんNGNG
ツール→オプション→ワークススペースで
最近使った一覧の項目を0で初期化する。

もしくはレジストリの
HKEY_CURRENT_USER\Software\Microsoft\DevStudio\6.0\Recent File List
をいじる。モノによっては\DevStudio\6.0は違うかも。
0786785NGNG
>>783
0787デフォルトの名無しさんNGNG
┏━━━┳━━━━━━━━┓
┃ ツ  ┃ リストビュー    ┃
┃ リ  ┣━━━━━━━━┫
┃ |  ┃            ┃
┃ ビ  ┃ HTMLビュー    ┃
┃ ュ  ┃            ┃
┃ |  ┃            ┃
┗━━━┻━━━━━━━━┛
MFCでこういうWindowを作りたいのですが、
どうすればいいのでしょうか?
0788デフォルトの名無しさんNGNG
そーいうのはdelphiが楽
0789デフォルトの名無しさんNGNG
>>787
スプリッタウィンドウ(CSplitterWnd)を入れ子にする。
定番だからサンプルはWEBで探せばいくらでもあると思われ。
0790デフォルトの名無しさんNGNG
>>787

>619-621
辺りを嫁
0791779NGNG
>784
ありがとうございます。
しかし試してみたのですが、だめなようでした。

おそらくPreTranslateMessage(MSG* pMsg)
よりも先にIMEにキー情報が行ってしまっているような気がします。
0792デフォルトの名無しさんNGNG
>>791
WM_IME_XXX系のメッセージでなんとかなるかも。
WM_IME_KEYDOWNとかね。
はずしてたらゴメン。
0793791NGNG
>792

ヒントどうもありがとうございます。
WM_IME_****には気づきませんでした
それでちょっと試行錯誤してみます。
0794デフォルトの名無しさんNGNG
CのAPIが要求するコールバック関数に
C++のクラスメソッドを登録できますがこれは合法ですか?
またこれはポータブルですか?

#include <windows.h>
typedef void (CALLBACK MyCallback)(const char *message);
void callcallback(MyCallback callback){
 if(callback != 0) callback("hello,world\n");
}

class CallbackTest
{
private:
 static void CALLBACK Callback(const char *message)
 { OutputDebugString("CallbackCaller:"); }
public:
 void Execute() { callcallback(Callback); }
};

int main()
{
 CallbackTest ct;
 ct.Execute();
 return 0;
}
0795 NGNG
>>794

合法でかつポータブルです。
クラスメソッドという用語はそんなにポータブルじゃないけど。
0796------------------さんNGNG
これどうしたらいーの??文字データを数値に変換するってところでこんなのでてきた
-------------------構成: gpibsdi - Win32 Debug--------------------
コンパイル中...
gpibsdiView.cpp
C:\Windows\デスクトップ\gpibsdi\gpibsdiView.cpp(169) : error C2065: 'f' : 定義されていない識別子です。
C:\Windows\デスクトップ\gpibsdi\gpibsdiView.cpp(169) : error C2440: 'initializing' : 'int' から 'char [256]' に変換することはできません。(新しい動作 ; ヘルプを参照)
配列型への変換はありませんが、参照またはポインタから配列への変換があります。
C:\Windows\デスクトップ\gpibsdi\gpibsdiView.cpp(173) : error C2440: '=' : 'unsigned char [256]' から 'double' に変換することはできません。(新しい動作 ; ヘルプを参照)
この変換が可能なコンテキストはありません。
C:\Windows\デスクトップ\gpibsdi\gpibsdiView.cpp(174) : error C2664: 'GpCnvStrToDbl' : 1 番目の引数を 'char [256]' から 'unsigned char *' に変換できません。 (新しい機能 ; ヘルプを参照)
指示された型は関連がありません; 変換には reinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。
cl.exe の実行エラー

gpibsdi.exe - エラー 4、警告 0
0797デフォルトの名無しさんNGNG
>>796
fの型は?
ソース張ったら796の文より多いの?
0798デフォルトの名無しさんNGNG
>>797
長いです・・
えっと用は文字charデータをdoubleに変換する「atof」ってやつです。
これを実行すると上記のエラーがでます。

キャストというのがわからないのですが、これが関係あるようです
0799デフォルトの名無しさんNGNG
>>797
とりあえず、 f は宣言されているの?
「定義されていない識別子です」って言われてんじゃん
0800799NGNG
>>797 じゃなく >>798 でした。
0801デフォルトの名無しさんNGNG
>>798
じゃあとりあえずatofを使ってる部分とそこで使ってる変数の宣言だけ載せればいいじゃん
0802_NGNG
StretchBltやBitBltでちょっと大きめの画像を扱っていますが、
処理中は重くてマウスカーソルが止まったりします
(memdc→memdc、memdc→hdcどちらでも起こります)

マウスカーソルに影響を与えずに処理するにはどうしたらいいでしょうか
0803デフォルトの名無しさんNGNG
>>802
別スレッドで(memdc→memdc)の処理させる。
0804デフォルトの名無しさんNGNG
>>796
C言語を勉強しなおしたほうがいいな。
最初の2つのエラーはfが宣言されていないから。
3つ目は論外。
4つ目は型変換ミス。
'GpCnvStrToDbl' はコンテックのGPIBボードについてるライブラリか?

ソース、恥ずかしくて貼り付けられないだろうな。
たったこれだけのソースでほとんど同じエラーが出るぞ。
  char s[256] = f; /* fは宣言されていない */
  double d = s;
  GpCnvStrToDbl(s, &d);

DWORD GpCnvStrToDbl(unsigned char *str, double *dbldata); ね。ちなみに。
0805デフォルトの名無しさんNGNG
>>804
神です!
0806デフォルトの名無しさんNGNG
>>804
すげぇw
初歩の初歩だな。
VB厨が書きそうなコードだ。
0807デフォルトの名無しさんNGNG
>>804
ディスアセンブルじゃなくてディスエラーコメントの
称号を与えよう。
0808デフォルトの名無しさんNGNG
正直、こんな感動の仕方をしたのは初めてだ。
0809802NGNG
>>803
AfxBeginThread(SkipBitmap,this,THREAD_PRIORITY_IDLE);
のようにして別スレッドで呼び出していますが症状がおさまりません

上の別スレッドはさらにCxxxViewクラスのメンバ関数を呼び出し、
StretchBltは実際にはそこで使っていますが、これが関係あるでしょうか
0810デフォルトの名無しさんNGNG
あんまり関係ないけど
 AfxBeginThread(・・・, this
は止めといた方がいいっぽい。よく見かけるんだけど。
0811------------------さんNGNG
謎です。文字列→数値データへの変換でつまりました。
<正しい例、これは正常に稼動しました。出力は1233.000Hz>
char *zzz="1.23300000E+003";
double s = atof(zzz);
char r[80];
sprintf( r,"※周波数→ %6.3f Hz(数値データ%f)",s);
pDC->TextOut(30,20,r,strlen(r));

<実際作ってるプログラム、外部シンボルが未解決ですエラーがでます>
<いろいろ処理をしてGPIBというオシロスコープから取り込んだ文字データzzzが文字列形式で%sでとりあえず見ると>
<上の正しい例にある1.233E003という数値です。これを数値で表せレない。>
double s = atof(zzz); 
char r[80];
sprintf( r,"※周波数→ %6.3f Hz(数値データ%f)",s);
pDC->TextOut(30,20,r,strlen(r));
0812------------------さんNGNG
×上の正しい例にある1.233E003という数値です。
○上の正しい例にある1.233E003という文字列です。
0813------------------さんNGNG
そしてこれがエラー内容。バカですいません。新説なひと教えてください
リンク中...
gpibsdiView.obj : error LNK2001: 外部シンボル ""double __cdecl atof(unsigned char const *)" (?atof@@YANPBE@Z)" は未解決です
Debug/gpibsdi.exe : fatal error LNK1120: 外部参照 1 が未解決です。
link.exe の実行エラー
0814デフォルトの名無しさんNGNG
>>810
理由は?
0815デフォルトの名無しさんNGNG
>?atof@@YANPBE@Z
なんでatofが型修飾されてるんだ?
きちんとstdlib.hをincludeしたか?
0816デフォルトの名無しさんNGNG
name mangling
キタ━━━(゚∀゚)━━━!!
0817デフォルトの名無しさんNGNG
>>814
http://www.google.com/search?q=CWnd+%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89+%E3%83%91%E3%83%BC%E3%83%9E%E3%83%8D%E3%83%B3%E3%83%88%E3%83%9E%E3%83%83%E3%83%97&hl=ja&lr=&ie=UTF-8&oe=utf-8&filter=0

>一時オブジェクトを別のスレッドに渡すときは、必ずネイティブな HANDLE 型と
>して渡します。C++ のラップ オブジェクトを別のスレッドに渡すと、予想外の
>結果 になることが少なくありません。

thisを渡して、「予想外の結果」になった経験何回か有り。それで昔調べた。
0818デフォルトの名無しさんNGNG
>>811
激しくMFCと関係ない悪寒(;;;゜Д゚) ガタガタブルブル
0819デフォルトの名無しさんNGNG
>>817
なんか、もっと重大な問題があるのかと、思っちまったぜ。
「仕組みを理解した上で、thisを渡せ」って前提が抜けてるな。
0820803NGNG
>>809
(memdc→memdc)で処理の重いStretchBltなどを
使う。最終的にmemdc→hdcして実際に表示する時は
WM_PAINT(OnDraw)を呼び出すメソッドをスレッドから
呼び出す。
memdc→hdcするときに画像サイズの違いで、BitBltが
デフォルトで呼び出すStretchBltが起きてないか注意する。
 (memdc→memdc)だけさせるスレッドでも重いか
テストしてみる。
0821817NGNG
>>819
そうだね。

worker_thread(LPVOID ptr)
{
 CHogeWnd* pHoge = (CHogeWnd*)ptr;

とやって
 HWND hHoge = pHoge->m_hWnd;
とか
 int result = pHoge->HogeMethod();
とかやってると、アクセス違反で落ちたり変な値が帰ってきたり...
それが、いつも再現するとは限らず 100回に1回現れるとかで、今うまく
いってるからといって油断してると痛い目にあう。
0822デフォルトの名無しさんNGNG
スレッド越しのウィンドウやCOMやActiveXの操作は鬼門だけど、

>HWND hHoge = pHoge->m_hWnd;
>int result = pHoge->HogeMethod();

これは、いくらなんでも問題ないじゃない?(関数の方の、実際の処理内容は除く)
本当にNGなら、ポインタやInterfaceがすべて破綻してまう。
0823デフォルトの名無しさんNGNG
>>822
スレッドがまだ動いている間に
スレッドが使っている領域を開放しちゃって落ちる

ってのをよくやっちゃうんですが・・・
わしが迂闊なだけか・・・鬱
0824802NGNG
>>820
何度もありがとうございます

>(memdc→memdc)で処理の重いStretchBltなどを使う。
(memdc→hdc)にStretchBltを使わないよう書き換えました

>最終的にmemdc→hdcして実際に表示する時は
>WM_PAINT(OnDraw)を呼び出すメソッドをスレッドから 呼び出す。
Invalidate() を使って OnPaint() を呼び出すようにしました
この部分では症状がでなくなったようです

>memdc→hdcするときに画像サイズの違いで、BitBltが
>デフォルトで呼び出すStretchBltが起きてないか注意する。
すみません、よくわかりません
しかし、BitBltではもう症状は出なくなりました

>(memdc→memdc)だけさせるスレッドでも重いかテストしてみる。
やはりStretchBltでは重いようです
画面には何も表示されませんが、
処理をした瞬間にマウスカーソルが何かにひっかかるような感じです
0825デフォルトの名無しさんNGNG
>823
スレッドが動いてるときに、呼び出したウインドウ閉じちゃったりして
死ぬってことかな?
それは this を渡すのが悪いんじゃなくて実装の仕方が悪いような、、、
俺もよくやるけど。
0826820NGNG
>>824
>すみません、よくわかりません
CDC::BitBltの解説
「GDI は、・・・・」を参照されたし。
プラットフォームSDKのヘルプには無い解説
なので注意。
0827821NGNG
>>822
CWndの場合は、それがヤヴァイというようなことが、どっかの ASSERTに
載ってた。例えば

worker_thread(LPVOID ptr)
{
 CHogeWnd* pHoge = (CHogeWnd*)ptr;
 ・・・
 int result = pHoge->HogeMethod();
 ・・・
}

int CHogeWnd::HogeMethod()
{
 return this->m_data;
}
とやるとおかしな値が返ってくるので、試しに HogeMethodで Breakしたら、
thisの値が、スレッドに渡した this(pHoge)とは違っていた

ってのではまった。
0828デフォルトの名無しさんNGNG
教えてください。
VCでインデントがされていないソースをきちんと揃えるにはどうすればいいのでしょうか?
0829820NGNG
>>824
>やはりStretchBltでは重いようです
スレッドのプライオリティを下げてみるとか。
それでも解決しなさそうだけど。
0830デフォルトの名無しさんNGNG
>>827
OnInitialUpdate、OnInitialDialog
以降でスレッド起動しても駄目かな?
俺の記憶だとOnCreateでハマッタ覚えがある。
0831デフォルトの名無しさんNGNG
>>802
大きめの画像を扱っている(フィルタとか?)というあたりに適度に
Sleep(0)とか入れてみると言うのはどお?
見当違いならスマソ
0832デフォルトの名無しさんNGNG
結局、AfxBeginThreadでthisを渡さないほうがいいって言うのはどうなの?
俺は今まで問題らしい問題は無かったんだけど、あまり他人に薦めないほ
うがいいのかな。
0833810NGNG
>>832
俺も分かったような分かんないような状態なんだけど、実害を経験してるのと
CWnd::AssertValid() のソースにそれらしいことが書いてあるので、ちょっと
つっかかってみた。
0834デフォルトの名無しさんNGNG
あの、、このスレでVC++6.0のエロ画像がもらえると伺ったのですが、どこにエロ画像があるのでしょうか?
http://vip.bbspink.com/test/read.cgi/erodoujin/1038492534/
0835デフォルトの名無しさんNGNG
>>832,833
要するにWindowsの世界ではスレッド毎にハンドルをくるむCWnd型を持ってて、
それを共有したりすると「うちのスレッドでこのCWnd使ってる人いないね?
じゃ捨てるよ?」とか言って他のスレッドのCWnd破棄したりとか、
(他のスレッドが触ることを考慮してないから)ロックかけずに操作したりとか、
あらゆるやばいことが起きるってことなんじゃ?
漏れは今までそう理解してた。それっぽいバグも経験したし。
というわけでスレッド間で渡していいのはハンドルのみ。
あ、あと自分がMFCと関係なく定義したオブジェクトは当然渡して問題なし。
0836デフォルトの名無しさんNGNG
>AfxBeginThreadでthisを渡さないほうがいいって言うのはどうなの?
手法的には、正しい。

ただ、OSの構造的にスレッドを跨げない機構があるので、要注意。問題が微妙に違う。
CSocketなんかもそうだよね。(←ウィンドウが絡んでる)
vtableを信じる物は、救われる。(足下を?)
0837デフォルトの名無しさんNGNG
>>832〜
わしも、特定できたバクは無かったけど、thisにしてしまうと、誰がからかワカランように
なるのと、***Docでそれをやると、デバックモードで動かなくなる事があった。
スレッドが原因じゃないかもしれんが調べてない
835に同意、多少手間だけど、AppのメンバにViewのハンドルを作って、メッセージで処理しとるよ。
0838デフォルトの名無しさんNGNG
>835
さすがに、他のスレッドが触ることを考慮してないクラスがthisを渡すはまずそうですね。
0839デフォルトの名無しさんNGNG
>>838
それは、スレッドセーフになっていないってこと?事情もないのに、手抜きでそーゆー事するのがおかしい。
そーゆー意味では、ウィンドウ関係は非スレッドセーフ。
たとえば、SendMessage()のロック問題とかあるでしょ?
0840832NGNG
あまり詳しいわけではなく、スレッドセーフの意味が良く分からなかったので、検索して
調べました。意味を取り違えていたらすいません。

下記のように理解しましたがOK?

AfxBeginThreadでthisを渡さないほうがいい。
理由
 本来スレッドセーフで設計するべきだが、Windows関係の処理には一部スレッドセーフで
 無い部分があるので、他のスレッドから直接触るべきではない。
 またスレッドセーフで設計されていたとしても、それを期待してthisを渡すのも、安全面
 からやめたほうがいかも?
0841デフォルトの名無しさんNGNG
>>840
こーゆー事は、あんまり言いたくないのだが...「アホか?」。
いいかげん、ブチ切れた。なんべん、言えば理解できるのか?
「ウィンドウズは、構造的にスレッドを跨げない、場所・機能・使い方がある」ってのがこの問題の本質だ。
スレッドにthis渡してはいけないなんてのは、関係ない。thisじゃなくても、グローバルインスタンスだって、スレッドを跨いだらNGな場合だってある。
「スレッドを跨いでやってはいけない事がある」ってのが正解だ。それを防止する意味でthis渡しを禁止するのは勝手だが、誰も相手にしてくれなくなるぞ
0842 NGNG
>>841
まぁ、落ち着きなされ。thisを渡して慎重にコーディングしてウマー
なプログラムなら飯の種になるでよ。そうでなければそれなりに
というわけで、あんたは何も損しないんだから。
0843デフォルトの名無しさんNGNG
>>840
うーん、thisにこだわってるのでどうも理解度が怪しく見えてしまうよ。
AfxBeginThreadに渡す、渡さないはあんまり関係ない。
とにかく、AfxBeginThreadで作ったスレッドから、こちら側のオブジェクトを触るときは、
スレッドセーフな(複数のスレッドから同時に呼び出しても大丈夫なように作られた)処理がなければダメ、ということ。

MFCのオブジェクトのうち、少なくともCWndを継承しているものはスレッドセーフではない。
だから、thisに限らず、CWndの類ならそれを別スレッドから使うのはダメ。
自分でMFCと関係ないオブジェクトをスレッドセーフに定義して、それを使うのは許される。
ということ。
0844デフォルトの名無しさんNGNG
スレッドにCWnd*なんて怖くて渡せねーよ…。
いつもm_hWnd渡してる。

>>840
それのどこが「理解」やねん…
0845841NGNG
CreateThread使ってないだけ、マシか...
スレッドと例外処理は、薬と一緒。シロートが下手に手をだすと、周りが迷惑する。
(特に、仕事ではね)

>>842 THX
0846デフォルトの名無しさんNGNG
正直、すまんかった
0847デフォルトの名無しさんNGNG
入手したソースをビルドしたいんですが
どうやら shlobj.h の内容が古いようでコンパイルできないんですが
最新のインクルードファイルやライブラリはどこで入手できるんでしょうか?
(MSのページ見てもたどり着けなかったので・・・)
0848デフォルトの名無しさんNGNG
本当に、見たのかと小一時間
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
0849質問NGNG
VC++6でMFCアプリ作成して
以下のクラス(シリアライズ機能をつけた)を作ったんだけど

----Line.h----

class CLine : public CObject
{
DECLARE_SERIAL(CLine)

protected:
int m_fr;
int m_to;
public:
CLine(){};
void set(int f,int t);
void Serialize(CArchive& ar);
};
0850質問NGNG
----Line.cpp----

#include "Line.h"

IMPLEMENT_SERIAL(CLine,CObject,1)

void CLine::set(int f,int t){
m_fr = f;
m_to = t;
}

void CLine::Serialize(CArchive& ar)
{
CObject::Serialize(ar);
if(ar.IsStoring())
ar << m_fr << m_to;
else
ar >> m_fr >> m_to;
}

これでコンパイルすると
「プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。」
っていわれちゃうんですけど・・・どうしてですか?
0851デフォルトの名無しさんNGNG
#include "stdafx.h"
が
ねーから。
0852デフォルトの名無しさんNGNG
C言語を勉強しようと思い
VisualC++ standard pack を導入したのですが、
下のようなプログラムが実行できません。
stdlib がないプログラムはきちんとコンパイルも実行もできていたの
ですが。
初歩的な質問申し訳ありません。

/* ch07-17.c */
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int i;
double d;
long l;

i = atoi(argv[1]);
l = atol(argv[2]);
d = atof(argv[3]);

printf("%d %ld %f", i, l, d);

return 0;
}
0853デフォルトの名無しさんNGNG
ありますよ。
0854質問NGNG
>>851 神!ありがとう!
0855デフォルトの名無しさんNGNG
>>852
実行できないとはどういう状態なの?

実は実行時に引数渡してないだけとか・・・

ch07-17.exe 10 20 30

こんな感じで実行してみ
0856デフォルトの名無しさんNGNG
その前にMFCじゃないだろう。
0857デフォルトの名無しさんNGNG
>>855
設定から引数渡して実行したらできました。ありがとうございます。
ところで、
プロンプトからexeを実行するにはどうすればいいんでしょうか。
最初引数の渡し方がわからなくてプロンプトから実行しようとしたんですが、できませんでした。
0858デフォルトの名無しさんNGNG
>>857
プロンプトで
ch07-17.exe 10 20 30
だって。
だからスレ違いなのよね。
0859デフォルトの名無しさんNGNG
そういや、MFC 使ってると stdafx.h とか afxMessageBox とか
やたら afx が出てくるけど、この afx って何の意味?
誰か解説キボン。
0860デフォルトの名無しさんNGNG
Application Framework X
0861デフォルトの名無しさんNGNG
>>859
>>36
0862デフォルトの名無しさんNGNG
↑
この X ってのは数学で使う変数 X と一緒。
0863デフォルトの名無しさんNGNG
自作でスクリプト言語を作成したいのですが
お勧めのHPとかありますか?
0864デフォルトの名無しさんNGNG
各種2ちゃんねるブラウザのように、各ペインを表示したり非表示にしたりするのは
どうやれば良いのですか?
CSplitterWndでやっているのですが、上手く実装できません。
0865デフォルトの名無しさんNGNG
いきなりですけど、\rってどんなコードですかね?
0866デフォルトの名無しさんNGNG
こーど?
0867デフォルトの名無しさんNGNG
少し悩んでることが…。
ファイルからデータを読み込んで表をSDIに描画しなければならないのですが、
今ひとつ上手く文字と罫線が描画できません。
表の中に表を組み込んだり複雑な描画をしたいのですが、…。
ブラウザみたいに上手くいくといいのですが…。
(ブラウザは使いたくない…というかデータファイルの性格上使えないのでこまってます)
アルゴリズムか何かご存知でしょうか?
0868デフォルトの名無しさんNGNG
>>864
ShowWindow
>>865
CR
>>867
どううまく表示できねんだよ。
0869デフォルトの名無しさんNGNG
すみませんが、助けてやってください!

数字が書いてあるファイルを読み込んで、
データを配列に格納するプログラムの勉強をしています。
配列に格納したデータは後で別の処理に使う予定です。
データの量は二次元配列で[1000][1000]くらいです。

そこでダイアログベースにしてボタンを配置しました。
ボタンでファイルを開いてデータを配列に格納したいのですが、
配列の宣言の仕方がわかりません。
たとえば配列a[1000][1000]というのはどこに書けばよいのでしょう?
OnButton1というメンバ関数?の中で宣言すると、その後その配列を外から
使うことはできないですよね?

そこで、aaadialog.hという所(ヘッダファイル?)に書いてみた所、
外からも使える配列を上手く宣言できました。
ところが、今度は二次元配列をa[1000][1000]という大きな値を使いたいのですが、
スタックオーバーフローをいうエラーが出てしまいます。
malloc関数を使えばよいのかと思ったのですが、
ヘッダファイル?の中ではエラーが出てしまいます。

長文ごめんなさい。質問をまとめますと、
1.プログラム中で共通に使える配列を宣言するのはどこでやるのでしょう?
2.もしヘッダファイル内で宣言する場合、大きなサイズa[1000][1000]というような
配列の宣言の仕方を教えてください。
0870デフォルトの名無しさんNGNG
だからスレ違い〜。
0871デフォルトの名無しさんNGNG
>>868
ShowWindowだと、スプリットした各ペインを消したり表示したりできないんですよ。
0872デフォルトの名無しさんNGNG
>>871
google で 「分割ウィンドウ 静的 動的」で検索してみぃ
0873デフォルトの名無しさんNGNG
AfxBeginThreadで便乗質問。
スレッド生成元とは別のクラス関数を、複数起動したいんだけどどうやればいいんでしょ?

{
CHoge* HogeA = new CHoge();
CHoge* HogeB = new CHoge();

WorkerA = AfxBeginThread((AFX_THREADPROC)HogeA->Entry, NULL);
WorkerB = AfxBeginThread((AFX_THREADPROC)HogeB->Entry, NULL);
}

最初のAfxBeginThreadで「キャスト出来ん」と出ますです・・・
0874デフォルトの名無しさんNGNG
>>870,>>869
スタックサイズに関してはあながちスレ違いでもなかったり。
プロジェクトの設定、リンクタブのアウトプットカテゴリに、
スタックアロケーションってーのがある。
詳しくはヘルプ見れ。
で、それが現実的でないとか言うんだったら、コンストラクなりなんなり、
C++的に適切な場所で初期化すれ。
0875デフォルトの名無しさんNGNG
シリアライズにてファイル保存の際にスキーマ番号を設定しておき、ファ
イルを開く際のバージョンチェックに使用しようと思い、新規にMFCア
プリケーションをプロジェクトウィザードで作成し、ドキュメントクラス
に次の変更を加えました。

・*.h 内にある、DECLARE_DYNCREATEマクロをDECLARE_SERIALマクロに変更。
・*.cpp 内にある、IMPLEMENT_DYNCREATEマクロをIMPLEMENT_SERIALマクロ
 に変更。(スキームの値には [ VERSIONABLE_SCHEMA|1 ]を指定)

保存したファイルを開いて、Serialize関数の中で、GetObjectSchema()を使
用してチェックをしてみるものの「-1」と返ってくるのです。どうすれば、
スキーマ番号の設定・取得ができるのでしょうか?
0876デフォルトの名無しさんNGNG
>>873
staticじゃないから。
0877デフォルトの名無しさんNGNG
##################
#  #         #
#  ##############
#  #         #
#  ##############
#  #         #
##################
#            #
##################

スプリットウィンドウを使って上記のように5つに分割するにはどうすれば良いですか?
0878デフォルトの名無しさんNGNG
>>868
どうしても、罫線と文字が重なったり、表を入れ子にすると
重なったり…。
0879デフォルトの名無しさんNGNG
>>877
上下に分割
上側を左右に分割
上側の右側を縦三つに分割
0880デフォルトの名無しさんNGNG
基本的なところでスマソ。

VC++6でMFC app wizard使うと,
Test.h:
class CMyTestApp : public CWinApp

Test.cpp:
// CMyTestApp クラスの初期化
BOOL CMyTestApp::InitInstance()
{
......................
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CMyTestDoc),
RUNTIME_CLASS(CMainFrame), // メイン SDI フレーム ウィンドウ
RUNTIME_CLASS(CMyTestView));
AddDocTemplate(pDocTemplate);
.........................
}

みたいな感じになるよね。
ここの,RUNTIME_CLASS(....)で指定した各classのinstanceを参照する方法。
この方法やこの項目に関連したMSDN内のURLを教えていただけませんか?
0881デフォルトの名無しさんNGNG
ここでの質問では無いかも知れませんが、
知人に
「Visual Studio.NETのMFCを使って、ゲームを作りたい」
と言ったら、
「作りにくいから、辞めておけ」
と、言われました。
事実、そうなのですか?
0882デフォルトの名無しさんNGNG
>>878
それはMFCとは全く関係ない気がするんだが?
あんたのプログラムの仕方がまずいだけだろ。
0883デフォルトの名無しさんNGNG
>>880
コンストラクタでthisを保存。
0884デフォルトの名無しさんNGNG
>>875
Serialize関数のあたまで基底クラスのSerialize()を呼び出すんじゃなかったかね。
スキーマ番号そのものをシリアライズしないと読めないので。
0885デフォルトの名無しさんNGNG
>>881
作るゲームとスキルによる。
貴方、アホですか?
0886デフォルトの名無しさんNGNG
>881
ていうか作る前にここに質問に来るのは根本的に間違ってると思う
0887デフォルトの名無しさんNGNG
24ビットのフルカラービットマップ用の構造体
struct BITMAP24{
unsigned char RED;
unsigned char BLUE;
unsigned char GREEN;
}
がありまして・・・
それようのポインタ
struct BITMAP24 *Img;
を宣言しました。

で、これのビットマップサイズ分(つまり,ビットマップのイメージサイズ分height*width)のメモリを全部0で初期化したいんです・・・.
で、
memset(Img->RED, 0, height * width);
としたところ、エラーで1 番目の引数を 'unsigned char' から 'void *' に変換できません。といわれてしまいました。
memsetを使うやり方がまちがっているのでしょうか?
是非ともご教授いただきたく存じますm(_ _)m
0888デフォルトの名無しさんNGNG
>>887
そのままじゃん。
Img->REDはunsgigned char 1個だぞ。ポインタじゃないだろ。
0889デフォルトの名無しさんNGNG
>>888
ありがとうございました(TT)
おかげで解決しましたm(_ _)m
恥ずかしすぎるシツモンだったと・・・恐縮です。
0890デフォルトの名無しさんNGNG
なんつーかスレ違い質問が多すぎだよな。
単に開発にMFC使ってるってだけで、質問の内容自体はC、C++、Win32APIの話だったり。
本当にMFCに関する質問なのかどうか自分を問い詰めてから
適切なスレで質問した方が回答もより速くより正確に得られるだろうに。
0891デフォルトの名無しさんNGNG
CFormViewに貼り付けたダイアログのサイズをコード上で変えるにはどうすればいいのでしょうか?
0892デフォルトの名無しさんNGNG
MoveWindow
0893891NGNG
ありがとうございます。

すいませんがもう一つ。
そのCFormViewから派生して作成したViewに関連付けてある、
ダイアログのサイズの変更ををViewがサイズ変更(OnSize)した時に、
行いたい場合はどのようにすればいいのでしょうか?
色々やってもASSERTエラーがでてしまいます。
0894デフォルトの名無しさんNGNG
その色々何をやったのか言わんかい。

こういう場合は、初回のOnSize時にはまだダイアログが存在しないから
ダイアログのm_hWndが無効でアサートしてるのが定番。
OnSizeの中で

// m_dlgがダイアログだとして
if(m_dlg){
  // ここでダイアログのサイズを変更
}

とかするとウマー
0895デフォルトの名無しさんNGNG
>>894
遅ればせながらありがとうございます。
なんとかできそうです。
0896デフォルトの名無しさんNGNG
Winsockでプログラミングしているのですが、
Iriaのように環境変数を指定するにはどうすればいいのですか?
教えてください。
0897デフォルトの名無しさんNGNG
好きなだけHTTPヘッダ付ければいいだろ。
0898デフォルトの名無しさんNGNG
すんません・・・。
以下はMFC AppwizardのSDIで書いたコードなんだけど・・・

// TODO: この場所にネイティブ データ用の描画コードを追加します。
int n;
int j=0;
for (n=0;n<=100;n++){
if (n%2==0){
pDC->TextOut(0,10*j,n);
j=j+1;
}
}

}

エラーが出ずに起動するんだが、文字化けするんだよね・・・。
VC++始めて一日目です。教えてくれろ〜
0899899NGNG
えーと、ファイルは***View.cppです。
0900デフォルトの名無しさんNGNG
CString str;
str.Format("%d", n );
pDC->TextOut(0,10*j, str );
0901899NGNG
>>900
ありがとございやす!
0902デフォルトの名無しさんNGNG
一日目からこのスレかよ。先にもっと見るべき本なりサイトなりあるだろうに・・・
0903880NGNG
結局のところ

CFrameWnd::GetActiveDocument
CFrameWnd::GetActiveFrame
CFrameWnd::GetActiveView
CView::GetDocument
CWnd::GetParentFrame

その他諸々で自己解決。

>>883
コンストラクタでどうやるんだ?
漏れにはGlobalVariable使う頭悪い方法しか思いつかん。

>>902
漏れもVC++一日目だったYO!
おかげで,900のCStringなんて知らず,_snprintf使って似たような事を…
0904デフォルトの名無しさんNGNG
>>897
…ダウンローダー側の環境変数を送りたいのです。
InternetExplorerとか、Mozira とか。
0905899NGNG
すんません・・・。
甘えついでにもう一つ・・・。
>>899のコードを実行すると偶数がズラズラ縦に書きつねられますが、
縦にスクロールしてくれないんです・・・。
解決方法は?・・・・。厨ですまそ。
0906デフォルトの名無しさんNGNG
>>904
だから自分でヘッダ送れってば。
0907デフォルトの名無しさんNGNG
>904
WinSockで、HTTPをしゃべるアプリを作っているのではないのか?
そこで出てくる「ダウンローダ側の環境変数」と自分で送った
HTTPヘッダのことではないのか?
Mozillaの偽装をしたいなら、Mozillaと同じヘッダを送ればいい。

環境変数という言い方からも、HTTPを分かってなさそうなことは
よく分かるのだが。RFC2616を読んだことはあるか?
0908デフォルトの名無しさんNGNG
訂正
>」と自分
>」とは自分
0909デフォルトの名無しさんNGNG
RFC2616読まなくてもHTTP ヘッダ ソケット とかでググればすぐ出てくるよ。
perlとかJavaのサンプルでも送る文字列自体は同じだからすぐわかる。はず。
俺はそうやったもの。
0910デフォルトの名無しさんNGNG
>>905
TextOut(10*j,0,str);
0911910NGNG
あ。何でない。
0912デフォルトの名無しさんNGNG
WinInetならUA文字列そのものずばりを指定する引数があるんだけどな。
0913デフォルトの名無しさんNGNG
>>905
CScrollView使いなよ。使い方まで質問しないでね。
0914899NGNG
>>913
ありがとございますw
0915デフォルトの名無しさんNGNG
>>907
どうやって指定すればいいのですか?
0916デフォルトの名無しさんNGNG
>>915
ソケットで"HTTP/1.0\r\nContent-Length: 1024\r\nUser-Agent: モジラ\r\n・・・・・"
みたいな文字列を送る。つーか検索する単語でてるんだから検索しなさい。
0917デフォルトの名無しさんNGNG
>>915
はい。
有難うございます。
0918デフォルトの名無しさんNGNG
MainFrameにあるProtectedメンバ変数(コントローラーのハンドル)
を他のクラスで取得しようとpublicでGetXXXというメンバ関数を作成して
戻り値にハンドルを返そうそうとしたのですが、
コンパイル時に

class 'CSplitterWnd' : コピー コンストラクタが定義されていません。

となります。コピーコンストラクタを定義するにはどうすればいいのでしょうか?
0919デフォルトの名無しさんNGNG
>>918
コントローラー?コントロールバーじゃなくて?
とりあえずそのGetXXXという関数を晒してみよう。
0920デフォルトの名無しさんNGNG
>>919
すいません、分割ウインドウのハンドル(?)だからコントローラじゃないかも・・
また間違ったこと書きそうなのでソース晒します。

[MainFrm.h]
// アトリビュート
protected:
CSplitterWnd m_wndSplitter;

// インプリメンテーション
public:
virtual CSplitterWnd GetSplitterWnd();


[MainFrm.cpp]
CSplitterWnd CMainFrame::GetSplitterWnd()
{
return m_wndSplitter;
}
0921デフォルトの名無しさんNGNG
>>920
ハンドルを取得したいならHWNDだから、Get〜の戻り値はHWNDにして
return m_wndSplitter.m_hWnd;
だと思う。

CSplitterWndのインスタンスを取得したいならポインタを返すのが普通じゃなかなぁ。
Get〜の戻り値をCSplitterWnd* にして
return &m_wndSplitter;
みたく。
0922デフォルトの名無しさんNGNG
参照を返した方がいい気もする
0923デフォルトの名無しさんNGNG
俺はいつもm_wndSplitterをpublicにしちゃってるわけだが・・・
0924デフォルトの名無しさんNGNG
>>923
そんなアバウトな君が好き
0925918NGNG
できました!本当にありがとうございます!
ポインタを返さないとあのエラーが出るということでいいんですか?
これで、かなり進みました・・・
0926880NGNG
また,よろしくお願いします。
クラスウィザードって,「メッセージを受け取るメソッドを自動的に作成し,そのメソッドを人間に記入させる」というコンセプトですよね。
逆に,「予め人間様が作成したメソッドをメッセージと関連付ける」という方法はできませんか?

「メッセージ先にありき」っつーのはやっぱ性に合わない…

>>918
それC++の基本的なところ。
インスタンスを引数,返り値にすると,その実体のコピーが作られる。
copy=new CSplitterWnd(&m_wndSplitter);
と等価なコードで返り値が代入されます。
自分のC++教本読み返しとけぇ!

スレ違い内容スマソ。
0927デフォルトの名無しさんNGNG
昔々、BorlandにDDVTという技術があったと云う。
virtual OnTimer() = WM_TIMER;
というような構文だったらしい。詳しいことは知らんが
0928デフォルトの名無しさんNGNG
>「予め人間様が作成したメソッドをメッセージと関連付ける」
手動でおながいします。
もしくはメッセージを受け取るメソッドで人間様が作成したメソッドを呼べばいいだけだと思うが。
0929デフォルトの名無しさんNGNG
>927
おー,なんか関数ポインタ代入してるみたいで(・∀・)イイ!
順番逆だけどさ…
0930880NGNG
ありゃ,妙な時間差が…

>928
>メッセージを受け取るメソッドで人間様が作成したメソッドを呼べばいいだけだと思うが。
現在は仕方なく,このようにしております…(;_;
メッセージマップの関係がGUIで直に確認できたら(・∀・)イイ!のになぁ,ってね。
0931デフォルトの名無しさんNGNG
>メッセージマップの関係がGUIで
Ctrl+Wでクラスウィザード起動すれば見れると思うけど、どうよ?
0932デフォルトの名無しさんNGNG
グローバル変数をウォッチしても値が更新されない。なぜ?
一度ウォッチの窓を消して、再度出すと更新されているのだが。
6.0 Professional MFC
0933デフォルトの名無しさんNGNG
>>932
常に最新の実行時の値が表示されてるわけじゃないぞ。
0934932NGNG
>>933
素早いフォローサンクス。
じゃあ、刻々と変化していく変数の値を知りたい場合、コードに埋め込む以外は
方法はないと言うことでしょうか?

0935デフォルトの名無しさんNGNG
>>934
TRACE( ... )マクロ便利だよ。
printfと同じ構文で使えて、デバッグウィンドウに文字を表示する。
ASSERTと同じくDebug版のみで動作し、Release版ではなにもしない。

TRACE("%d\n", i);

でiの値がアウトプットウィンドウに逐一出力される。
0936880NGNG
ソースコード眺めてたら,
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
.....
END_MESSAGE_MAP()
てな部分でメッセージマップ定義しているを発見。

>931
こっちを書き換えてやると,確かにクラスウィザード上で確認できました。
今までは,クラスウィザード作るメソッドをラッパーとして使っていたもので(^^;;

# んー,NeXT DevelopersはこのあたりのGUIの出来がよかったなぁ…
0937デフォルトの名無しさんNGNG
モードレスダイアログ上に貼り付けた CListCtrl(仮想リストビュー)上での
ドラッグの開始/終了時に送られてくるメッセージは HDN_BEGINDRAG/HDN_ENDDRAG でOK?
Class Wizardでメッセージハンドラを実装させてみたけどちっとも呼ばれない。
念のため LVN_BEGINDRAG も試してみたけどやはりダメ。
他の HDN_〜 はちゃんと動作するのになあ。

環境はWinXP、VC++6.0っす。
0938あだ名はG。NGNG
すいません。基本的な質問をします。

MFCでCTest1ダイアログをつくりました。
ダイアログ内にはエディットボックス(IDがIDC_EDIT1、変数名がm_edit1)を作りました。

で、ソース内で、
CString str("2ch");
m_edit1=str;

と、エディットボックスにstrを代入したのですが、
ダイアログ内のエディットボックスには、さっき代入した「2ch」が表示されません。

エディットボックス内のメンバーに文字列を代入した際、その代入をダイアログ内に反映(表示)させるのはどうすればいいのでしょうか?
0939あだ名はG。NGNG
>>938
解決。
(CWnd->UpdateData(BOOL))
0940デフォルトの名無しさんNGNG
>>937
LVN_BEGINDRAGでふつーに取れるけど…。
ダイアログにリストビューコントロールはりつけてOnInitDialogでアイテム一個追加して
クラスウィザードでLVN_BEGINDRAGのハンドラ作ってブレークポイント置いただけ。
Win2000, VC++6.0SP5

HDN_はヘッダ用だよ
0941デフォルトの名無しさんNGNG
OnNotifyで強引に捕らえる方法があったような。
0942937NGNG
>>940 >>941
回答ありがとう。

「ドラッグ」の意味を勘違いしてた。
GoogleやMSDNで調べているうちに今やっと気づいたんだけど、
アイテムをまさに「引きずる」のがドラッグだったのね。
自分がやりたかったのはマウスでの矩形選択(複数のアイテム)だった。
この動作のこともドラッグと呼ぶものだと長い間思ってた。

WM_LBUTTONDOWN/WM_LBUTTONUPのメッセージハンドラで様子を見てみたんだけど、
クリックして「DOWN」が送られてきたあと、ボタンを上げずに移動させると(自分的にはドラッグ)、
矩形選択の開始を知らせるメッセージがWinから送られてきている模様。
でもそのメッセージの名称がわからないから、
どうやって捕まえればいいのかよくわからない。

とりあえず、「DOWN」のハンドラでフラグを立てておいて「ドラッグ」開始、
「ドラッグ」中はWM_MOUSEMOVEが送られて来ないので、
「UP」後、「MOVE」が来たときにフラグが立っていたら「ドラッグ」終了、
というやり方を考案してみた。

矩形選択開始時に送られてくるメッセージが何なのかを知ってる人がいたらよろしく。
0943デフォルトの名無しさんNGNG
>>942
LVN_MARQUEEBEGIN
0944デフォルトの名無しさんNGNG
矩形って用語的には bounding box か。
0945デフォルトの名無しさんNGNG
>>943 >>944
回答、Thanks a lot。

そっかー、マーキーなんて名前なんだ。
ぱっと見て一瞬、HTMLのマーキーを連想して「何のネタだよ!」と内心突っ込んでた。すまん。
これ、BEGINはあってもENDはないのね。LVN_BEGINDRAGと同じで。
英語、そんなに得意じゃないんだけど、マニュアルが言ってるのは
「選択を始めたら0が、選択を終了したら0以外が (LPNMLISTVIEW) lParam に代入される」
ことで開始/終了を知ることができる、てとこかな。

勉強になるなあ。
0946デフォルトの名無しさんNGNG
MFC で SDI のプロジェクトを作ったときにメニューって絶対作られちゃうの?
メニュー無しはダイアログベースじゃなきゃ作れないもの?
IDR_MAINFRAME のメニューが非常に邪魔なのだが。
0947デフォルトの名無しさんNGNG
>>946
構築後に消してる

m_pMainWnd->SetMenu( NULL );
0948946NGNG
>>947
> 構築後に消してる
> m_pMainWnd->SetMenu( NULL );

できますた。
ありがと。
0949デフォルトの名無しさんNGNG
オリジナルのMassageBoxの出し方を教えてください。
0950デフォルトの名無しさんNGNG
>>949
他人にわかるように喋ってください。

…ダイアログ自分でつくりゃいいじゃん。
0951デフォルトの名無しさんNGNG
>949
つーか、マッサージボックスって何だよ(w
0952デフォルトの名無しさんNGNG
Emacみたいなコマンドで編集するメモ帳を作りたいのですが、
CEditViewを使った方がいいのでしょうか?
それとも自分でクラス作ったほうが早いですか?
C++&MFC始めたばっかでよくわからんのです。
アドバイスください。
0953デフォルトの名無しさんNGNG
MFCの本出た。
http://www.microsoft.com/japan/info/press/JPN_ViewMsPress.asp?Book_id=879&list_id=1
0954デフォルトの名無しさんNGNG
>>952
オリジナルのViewクラスは結構めんどいよ。
使い始めたばかりなら、まずCEditViewでドキュメントービュー構造になれたほうがよさげ。
0955デフォルトの名無しさんNGNG
最近故あってSDKベースからMFCにやってきますた。

operator= が使えるCStringArrayを作りたいんですが、どう書けばよろしいでしょう?
STLとかATLは使えない環境でつ。
0956デフォルトの名無しさんNGNG
>>954
レスありがとうございます。
了解しました。
0957デフォルトの名無しさんNGNG
>>953
2ヶ月くらい前にね
0958デフォルトの名無しさんNGNG
>>955
普通に派生クラス作って operator= をインプリメントするのはダメなんでしょーか?
0959デフォルトの名無しさんNGNG
VC+++MFCでhttpsサーバにアクセスするクライアントを作成する場合、
どのAPI、クラスを使えばよいのでしょうか?
WinInetやそのラッパークラスにはhttpsについての記述がありませんでした。
0960デフォルトの名無しさんNGNG
INTERNET_FLAG_SECURE
0961デフォルトの名無しさんNGNG
CString に char[256]とかを
=演算子で何度も追加するのはまずいですか?
0962デフォルトの名無しさんNGNG
CMapWordToObでメモリリーク起こさない方法ってどうすればいいんでしょう?
deleteすると、キーを挿入しているところで大量に漏れてると言われます。
VC6.0です。
0963デフォルトの名無しさんNGNG
>>962
ループで回してMapの要素を一つずつdeleteする。
0964デフォルトの名無しさんNGNG
新スレです。

■ VisualC++(MFC限定)相談室 MFC6.dll■
http://pc3.2ch.net/test/read.cgi/tech/1039607377/
0965デフォルトの名無しさんNGNG
>>963
それでも結果全く同じ。
ダンプを見ると、どうもキーのメモリが開放されてないようなんですがそんなことあるんですかね?
以下、削除部のソース

{
POSITIONpos;
WORDkey;
CObject*pa;

pos = ThStack_w.GetStartPosition();
while(pos != NULL) {
ThStack_w.GetNextAssoc(pos, key, (CObject*&)pa);
ThStack_w.RemoveKey(key);
}
}
0966デフォルトの名無しさんNGNG
>>965
SetAt する時にオブジェクトを new してるんでしょ?
↓でどう?

pos = ThStack_w.GetStartPosition();
while(pos != NULL) {
ThStack_w.GetNextAssoc(pos, key, (CObject*&)pa);
delete pa;
ThStack_w.RemoveKey(key);
}
0967デフォルトの名無しさんNGNG
>>966
ダメでつ。
一発目からAccess Violationが出ます。
delete pa のとこで。

といーますかPtrじゃなくてOb系なんで、削除は保証されてるはずなんですがねー。
マニュアルまたバグってる?
0968デフォルトの名無しさんNGNG
>>967
newしてねーだけだろ
0969デフォルトの名無しさんNGNG
ちなみに、MSDNがCMapWordToObの参考にしてくれって言ってる
CMapStringToObにはこうある
>CMapStringToOb オブジェクトを削除するか要素を削除すると、
>CString オブジェクトと CObject ポインタが削除されます。
>CObject ポインタが参照しているオブジェクトは破棄されません。
Mapの要素としてのCObject*は破棄されるが、
その先のオブジェクトは破棄しないということだな。
CMapWordToObの説明は
>その要素を削除すると、対応する CObject オブジェクトが削除されます。
ってあるが。
0970デフォルトの名無しさんNGNG
>>968
そんなことはない。

ThStack_w[para_w] = (CObject *)new CString(temp);

0971デフォルトの名無しさんNGNG
>>969
そう。
どっちを信じていいか小一時間悩んで、結局deleteできないなら後者だろ、と思った。
でも漏れ漏れ。どうなってんやら。
0972デフォルトの名無しさんNGNG
>>970
CStringはCObjectじゃないよ。
0973デフォルトの名無しさんNGNG
>>972
おお、それは気が付かなかった。
CStringArrayに替えたら解決しますた。
ダンケ。
0974デフォルトの名無しさんNGNG
>>973
CStringArrayでええんか?
CString*を保持するCMapWordToPtrの方が良いんじゃ?
0975デフォルトの名無しさんNGNG
MediaPlayerのActiveXコントロールで、実行時にサイズ変更する方法を教えてください。
MoveWindowするとエラー出てしまいます。
CMediaPlayer2を見てもそれらしきものが見当たらないっす。
0976デフォルトの名無しさんNGNG
リストビューとツリービューの混ざったような物を作りたいのですが
どうすればよいのでしょうか。
こんな風にしたいのです↓

http://www.vector.co.jp/magazine/softnews/991006/images/n99100611b.gif
0977デフォルトの名無しさんNGNG
http://www.codeguru.com/treeview/treelist.shtml
0978デフォルトの名無しさんNGNG
スプリットウィンドウで分けて複数のビューを
表示してる場合にWM_KEYDOWNメッセージを
特定のビューで受けたい場合はどうしたらいいのでしょうか
どのビューでもOnKeyDownが動いてくれません
0979978NGNG
すいません、どのビューでも動かないとかいてしまいましたが
一番左上のビューで動きました
2列に分割して左の列を2行に分割していて
左下のビューで受け取りたいのですがSetActivePaneとかしても
アクティブになってくれません
0980978NGNG
すいません解決しました
ボタンにフォーカスあたってたのをなくしたら
OnKeyDown動いてくれました
ボタンにフォーカス当たったままじゃ
ビューがメッセージ受け取らないとは知りませんでした
0981973NGNG
>>974
元々スレッド間通信に使おうと思ってたから、Arrayの方が都合が良い。
故にこれでオケー。
0982978NGNG
続けて質問させてください
入力するキーによって
受け取るビューを変えたいのですが
どうしたらいいでしょうか

たとえば数字キーなら左のビュー
エンターキーなら右のビューといった感じです
0983デフォルトの名無しさんNGNG
新スレへ移動してくれ。

■ VisualC++(MFC限定)相談室 MFC6.dll■
http://pc3.2ch.net/test/read.cgi/tech/1039607377/
0984デフォルトの名無しさんNGNG

  |■\
   | ∀`) ダレモイナイ...
   | ⊂) ワショーイスルナラ イマノウチ
   | /


    ./■\
   ∩´∀`∩ ワショーイワショーイ
    ヽ   丿
    ( ヽノ
   し(_)



    /■\
   (´∀`∩) ワワワワワショーイ
   (つ  丿
   ( ヽノ
   し(_)
0985デフォルトの名無しさんNGNG
age
0986デフォルトの名無しさんNGNG
新スレ

■ VisualC++(MFC限定)相談室 6■
http://pc3.2ch.net/test/read.cgi/tech/1039854032/
0987デフォルトの名無しさんNGNG
真の新スレ

■ VisualC++(MFC限定)相談室 MFC6.dll■
http://pc3.2ch.net/test/read.cgi/tech/1039607377/
0988デフォルトの名無しさんNGNG
>>986
いい加減にそういう冬厨丸出しなことはやめてくれ
0989デフォルトの名無しさんNGNG
冬坊丸出し上げ
0990デフォルトの名無しさんNGNG
どっちが冬厨だか(藁
0991デフォルトの名無しさんNGNG
d
0992デフォルトの名無しさんNGNG
a
0993デフォルトの名無しさんNGNG
r
0994デフォルトの名無しさんNGNG
e
0995デフォルトの名無しさんNGNG
m
0996デフォルトの名無しさんNGNG
o
0997デフォルトの名無しさんNGNG
1000
0998デフォルトの名無しさんNGNG
torannoka
0999デフォルトの名無しさんNGNG
YO!
1000デフォルトの名無しさんNGNG
jyaorega1000
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。