■MFC相談室 mfc11.dll■

このエントリーをはてなブックマークに追加
Microsoft Foundation Classライブラリ専用スレです。

前スレ
■ VisualC++(MFC限定)相談室 MFC10.dll■
http://pc5.2ch.net/test/read.cgi/tech/1074104008/

関連リンクは >>2-10 の辺り。
過去スレ
■ VisualC++(MFC限定)相談室 MFC9.dll■
http://pc2.2ch.net/test/read.cgi/tech/1062098350/
■ VisualC++(MFC限定)相談室 MFC8.dll■ (スレタイ壊れているけど前スレ)
http://pc2.2ch.net/test/read.cgi/tech/1056584836/
■ VisualC++(MFC限定)相談室 MFC7.dll■
http://pc2.2ch.net/test/read.cgi/tech/1047949606/l50
■ VisualC++(MFC限定)相談室 MFC6.dll■
http://pc2.2ch.net/test/read.cgi/tech/1039607377/
■ VisualC++(MFC限定)相談室 5■
http://pc3.2ch.net/tech/kako/1028/10285/1028553308.html
■ VisualC++(MFC限定)相談室 4■
http://pc3.2ch.net/tech/kako/1021/10216/1021620974.html
■ VisualC++(MFC限定)相談室 3■
http://pc.2ch.net/tech/kako/1014/10140/1014057520.html
■ VisualC++(MFC限定)相談室 2■
http://pc.2ch.net/tech/kako/1008/10080/1008031675.html
■ VisualC++(MFC限定)相談室 ■
http://pc.2ch.net/tech/kako/989/989902845.html
>>1
Z!
4デフォルトの名無しさん:04/06/25 00:48
まえすれ
>>972
Thanks!
これでOKザウンス!
5デフォルトの名無しさん:04/06/25 01:42
捕手しときます
MFCってもうすぐなくなるそうですが、本当ですか?
>>6
本当です。
8デフォルトの名無しさん:04/06/25 20:55
MFC42.DLL
   シニ

で命運尽きたと見るべきだろう
MFCは永久に不滅です
最初からMSの提唱プログラミング技術は信用していない。
「の」の位置が変になった。

最初からMS提唱のプログラミング技術は信用していない。
12デフォルトの名無しさん:04/06/25 22:44
CP/Mのパクリ
UNIXのパクり
CORBAのパクリ
SmallTalkのパクリ
Javaのパクリ

オリジナルは??
無い。
COMは何のパクリ?
15デフォルトの名無しさん:04/06/25 23:33
MS-DOS
話の流れ断ち切るようですみませんが質問させてください

.NETの開発環境やブラウザのSleipnirとかで使ってる
アイコンの背景の変わるツールバーってどうやって実装するんでしょう?
スタイル設定とかで駄目なん?

>>16
MFCを継承していじりたおす。
18デフォルトの名無しさん:04/06/26 11:59
ダイアログを使ってて、気になることがひとつあるのですが、
×ボタンでアプリケーションを終了させると、
「コード 20 (0x14) で終了しました。」
で、終了して、タスクバーから終了させると、
「コード 61536 (0xF060) で終了しました。」
と、表示されます。

0で終了していないので、どこかにエラーが潜んでいるのかと思うのですが、
どうやって調べたらよいでしょうか?

検索してもそれらしい情報がなくて、
ヘルプでも、0でなければエラーがあるって事しか書いてないので、
どうやったらいいのかと。。。

どなたか知ってる方お願いします。
>>18
Escキーで終了すると0x1bで、Enterキーで終了すると0x0dになるはずですが。
これはちっともエラーではございません。
20本田:04/06/26 18:10
>COMは何のパクリ?

CORBA
クライアントがインプロセスサーバーの関数を直接呼べるのはCOMだけなのでは?
22デフォルトの名無しさん:04/06/27 13:12
こんにちは
初歩的な質問ですが、

VisualC++で新しいMFCプロジェクトとしてMDIを作るとき、
初期状態のコードで下記の部分がありますが、

>myappli.cpp
BEGIN_MESSAGE_MAP(CmyappliApp, CWinApp)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
// 標準のファイル基本ドキュメント コマンド
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
// 標準の印刷セットアップ コマンド
ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()

ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)のコマンド(メニュー)を選ぶと自動的にMDIウィンドウが作成されますが、
このMDIウィンドウを作成するコード(ソース)がどこにも記述されてないのに、どうしてMDIウィンドウが作成されるのでしょうか?
また、ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)も同じく、ファイルを開くDialogが出てきますが、
このコモンダイアログを表示するという記述がされている部分がありません。

これらのコード(ソース)は、どこに記述されてるのでしょうか?
>>22
VCをインストールしたディレクトリ下のMFCってとこにソースがある。
その中をgrepしてみれば?
24デフォルトの名無しさん:04/06/27 14:03
Attachってどういうものなんでしょう?
>>22
CWinAppの初期化コードの中

cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;

とするとでてこない。この辺が関係してる。
26デフォルトの名無しさん:04/06/27 15:29
質問:

プロジェクトの新規作成でMFCのMDIを作ったのですが、
そのMDIをSDIに変更したいと思いして、
部分部分を修正したんですが、
どうしてもエラーダイアログ「空のドキュメント作成に失敗しました。」と表示されて、
MainFrameが作成されず、アプリケーションが終了してしまいます。
何故でしょうか?

修正箇所は、
CMDIFrameWnd → CFrameWnd

MultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(IDR_system_mfcTYPE,
RUNTIME_CLASS(Csystem_mfcDoc),
RUNTIME_CLASS(CChildFrame), // カスタム MDI 子フレーム
RUNTIME_CLASS(Csystem_mfcView));
      ↓
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(Csystem_mfcDoc),
RUNTIME_CLASS(CMainFrame), // メイン SDI フレーム ウィンドウ
RUNTIME_CLASS(Csystem_mfcView));

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
       ↓
       if (CFrameWnd::OnCreate(lpCreateStruct) == -1)

819 名前:デフォルトの名無しさん[sage] 投稿日:04/06/27(日) 14:46
MFCを使ったダイアログを
スタティックライブラリで実現できるんでしょうか?

DLLで出来るのはわかってるんですが。

820 名前:デフォルトの名無しさん[sage] 投稿日:04/06/27(日) 14:50
>>819
Prof 以上ならできる。

821 名前:デフォルトの名無しさん[sage] 投稿日:04/06/27(日) 15:21
>>820
リソースは
リンクするメイン側に置くのですか?
>>26
気になったのでちょっと調べてみたよ
Error: Trying to create object which is not DECLARE_DYNCREATE
アウトプットに以下のメッセージが出て失敗してたので
mainfrm.hのDECLARE_DYNAMICをDECLARE_DYNCREATEに
mainfrm.cppのIMPLEMENT_DYNAMICをIMPLEMENT_DYNCREATEに
それぞれ変えればOKだったよ
つーか、新規に作ったSDIと見比べればOKかと・・・・

29デフォルトの名無しさん:04/06/27 16:50
int argc, char *argv[]
のように、外部ファイルドロップで起動した時、
ドロップしたファイル名を取得するにはどうすれば良いですか?
>>29
Wizardが吐いたソースならCHogeApp::InitInsatance()の中に
 CCommandLineInfo cmdInfo;
 ParseCommandLine(cmdInfo);
ってコードあるでしょ。そのあたりで調べてみれば?
あと、__argcと__argvとか。
>>30
助かります!調べてみます!
>>29
文字列で受けるなら
CString cmdstr = GetCommandLine();

__argc変数を使うなら
for(int i = 1; i < __argc; i++){
 CString cmdstr = __argv[i];
}

どちらかというと後者の方が扱いやすいね
33デフォルトの名無しさん:04/06/28 00:06
ツールバーを作ろうとしているのですが、

//Buttonの作成
m_wndToolBar.GetToolBarCtrl().SetButtonWidth(50, 150);
m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);

img.Create(IDB_HOTBUTTON, 22, 0, RGB(255, 0, 255));
m_wndToolBar.GetToolBarCtrl().SetHotImageList(&img);
img.Detach();
→img.Create(IDB_COLDBUTTON, 22, 0, RGB(255, 0, 255));
m_wndToolBar.GetToolBarCtrl().SetImageList(&img);
img.Detach();

矢印部分でデバッグエラーが出てしまいます。
なぜなのかがわかりません。
Createの戻り値を見ても、「1」と出てるのでエラーはないと思われますが。
Createの戻り値が見れると言うことは、
そこではエラーが出ていないのでは?
3533:04/06/28 00:33
>>34
すいません。
今、どうにか解決できました。
大変申し訳ございませんでした。
CEditでJaneDoeのDoe部分みたいに
文字に色つけたりフォント変えたりリンク踏めるようにするのはどうすればいいんですか?
今はリッチエディットでやってるけど98とXPだとdllのバージョンが違うし
微妙に重かったり、選択の文字色反転がイヤだったりで、改造したいんですよ。
無理
>>36
codeguruとかにヒントになるソースがあったはず
39デフォルトの名無しさん:04/06/28 17:07
CComboBoxでCBS_SORTを動的につけたり外したりって無理でしょうか?
SetWindowLongでできなかったんですが…
40デフォルトの名無しさん:04/06/28 17:09
MFCで作ったアプリは、MFCのDLLを添付しないと
実行することはできないのでしょうか?
自分が作ったExeのみで配布することはできないでしょうか?
>>39
1. ResetContent
2. スタイル付け替え
3. AddString
でもダメ?
すでにあるアイテムのソート/非ソートをスタイル変更で
切り替えてくれるような器用な造りにはなっていないと思う。
けど、これはAPIスレ用の話題だな。
>>40
MFCをスタティックリンクすれば。
>>40
VC6以前のVCでビルドしたものならDLLの心配はしなくていい
ほとんどのwin32環境でDLL持ってるのが当たり前になってるから

VC7以降なら注釈を付けてDLLのインストールが必要なことを書いておくか
同梱するかした方がいい
>>40
MFCのスタティックライブラリを使用にする
4439:04/06/28 18:39
>>41
駄目でしたorz
APIスレに移動してみようと思います。ありがとうございました。
>>40
スタティック ライブラリで MFC を使用する
46デフォルトの名無しさん:04/06/28 21:59
ダイアログベースでボタンをつくってそのボタンをクリックすると
メニューの開くと同じ動作させるにはどうすればいいでしょうか?
>>46
CMenu
>>46
「開く」のメニュー項目と同じIDのボタンを
49デフォルトの名無しさん:04/06/28 23:18
>>47 48
できました

ダイアログに開くからえたビットマップをダイアログのピクチャーボックス
に表示するにはどうすればいいのでしょう?
・ダイアログから得たのでないビットマップをピクチャーボックスに表示する方法を調べる
・それをダイアログから得たビットマップファイルの場合に応用する
51デフォルトの名無しさん:04/06/29 00:10
>>41
>>42
>>43
>>45
ありがとうございます。
スタティックは知っていたのですが、
結局Exe以外にも添付しなきゃならないとか何とか・・・・
ってどこかのHPで書いてあって、
結局駄目なのか?と思ってたので。。

一応、どのWindowsでも動かないとまずいって言うので、
(95は除外してもよさそうなのですが)
困ってたんです。
環境はVC6なので、大丈夫かと思うのですが。
ちなみにVC.NETスタティックリンクで
作ったexeを検証したところ
Win98 WinME Win2000 WinXP (by VirtualPC)
で動いてます
>>52
ついでにランタイムライブラリもスタティックリンクにしとけよ
54デフォルトの名無しさん:04/06/29 04:27
Formベースで作ったプログラムを作って、出来たクラスがCXXXView、CXXXDoc、(その他)とした時
CXXXView.h 内で CXXXDoc.h を
CXXXDoc.h 内で CXXXView.h を
それぞれインクルードするとコンパイル出来ないのですが、そう言うものなのでしょうか?
インクルードする順番も一応変えてみたりしたのですが、無理でした。
この方法が無理ならば、DocとViewで相互に呼び出したいときはどうしたらいいのでしょうか?
>>54
CView::GetDocument()
CDocument::GetFirstViewPosition()
CDocument::GetNextView()

DocからViewは普通はポインタを使って直接呼び出すのではなく
CDocument::UpdateAllViews()でドキュメントの変更を通知する。
あとはCView::OnUpdate()で。
ていうか、相互に呼び出したいだけなら.hでインクルードする必要ない
57デフォルトの名無しさん:04/06/29 11:21
ダイアログにラジオボタンを付けて
それにコントロール変数を追加したいんですが
VC6の時は、グループ先頭を「グループ」にチェック入れて
int変数を追加できたんだけど
VC7.1だと先頭のGroupをtrueに設定して
コントロール変数を追加しようとすると
BOOLしか追加できないみたいなんです
intで追加できないんでしょうか?
>>54
ちょい工夫すれば容易にできる話だが・・・
だが、そーゆーPGはやめておけ。
59デフォルトの名無しさん:04/06/29 23:38
予め決められたハングル文字を表示したいのですが、
ソースにハードコーディングしたら駄目らしく、
かといってストリングテーブルにいれたら???となってしまいます・・・
文字セットはUnicode文字セットを使用しているので、
エディットボックス間のコピー等は上手く行くのですが・・・

どなたかお知恵を貸して下さい
つかおまいの環境、ハングル入ってるのか?
>>60
WinXPなんで、言語のあたりをいじると、ハングルIMEが使えます。
けど、OCNの翻訳サイトで単語訳してコピペする予定です
最新のでも開発環境そのものはUNICODE対応していないんだっけ?
6359:04/06/29 23:55
>>62
やっぱVC++じゃ駄目ですかね・・・・orz
何故かVBとVC#はすんなり出来てくれたんですが、
どーしてもネイティブじゃないと嫌なもんで・・・
>>59
今AppWizard見てみたのだが、リソースに使用する
言語ってコンボがあるが、それには日本語、英語しか
ないからOSもVCもハングル版買わないといかんのでは?
wchar_t a[] = L"\uac00\uac01\uac02\uac03";
MessageBox(NULL, a, L"韓国語", MB_OK);

少なくともこういうのは通るし動くんで、
・ソースはUTF-8とかでハングルで直接書く
・プリプロセッサとして、UTF-8なソースをShift_JISなソースに書き換える
(リテラルのユニバーサルキャラクタへの置き換え)物を作る
でなんとかなるんじゃ。リソースはどうにもなんないかもだけど。
6659:04/06/30 00:20
>>64
そこには「韓国語」っていうのもあるんですが、
コード生成時に何やらエラーが出て止まります。
やはり環境が揃ってないと無理なんでしょうかね・・・
レスくれた方、どうもありがとです。
もうちっとVC++で粘ってみます。

と、リロードしてみたら!
>>65
これは、素晴しい!
なんとかなりそうです。感激!

6859:04/06/30 15:05
>>67
サンクス!
国際化対応のサンプルがいろいろ参考になりました!
一度リソースファイルを外部エディタでUnicode保存すると、
VC.NETのリソースエディタから編集がきかなくなる事が分かりました。
(VC.NETのリソースエディタがUnicode未対応の為)

#define KOREAN_1 L"\uD55C\uAD6D\uC5B4"     //韓国語
#define JAPANEASE_1 L"\u65E5\u672C\u8A9E"   //日本語
#define ENGLISH_1 "ENGLISH"

CString ss;
ss = KOREAN_1;

の様に使う事で、多言語対応する事ができました。
MessageBoxを使うとプログラムが停止します。原因がわかりません、、、
どなたか教えてください。
//App.cpp
#include <afxwin.h>
#include "App.h"

CMainWin::CMainWin()
{
Create(NULL, "sample");
}
afx_msg void CMainWin::OnPaint()
{
//CPaintDC dc(this);
}

afx_msg void CMainWin::OnLButtonDown(UINT nFlags, CPoint point)
{
MessageBox("abcde");//ここで停止(応答なし)
}
BEGIN_MESSAGE_MAP(CMainWin, CFrameWnd)
ON_WM_LBUTTONDOWN()
ON_WM_PAINT()
END_MESSAGE_MAP()

BOOL CApp::InitInstance()
{
m_pMainWnd = new CMainWin;
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return (TRUE);
}
CApp App;
続き
//App.h
class CMainWin :public CFrameWnd {
public:
CMainWin();
afx_msg void OnPaint();
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
DECLARE_MESSAGE_MAP()
};

class CApp :public CWinApp {
public:
BOOL InitInstance();
};
//EOF
OnPaintメッセージハンドラにCPaintDC dc(this)を記述すると問題なく動作
します。理由がどうしてもわかりません。
7169:04/06/30 22:49
書き忘れました、環境はVC++6.0です。
実は全然別のところが問題とか。
>>69
メンバ関数版じゃなければ表示されるんでない?<MessageBox()
AfxMessageBox()だっけ?
.NET 2003はユニコードに対応しているよ。
ファイルの保存でユニコードで保存してやると
ちゃんと保存される。
>>69
ほんとだね
これはなかなか興味深い
ちょっと調べてみるか
7675:04/07/01 12:05
まず、OnPaintメッセージがきたときに、ディフォルトの動作を行わないせいで
何時までたってもウインドウが無効領域のままになる
なのでOnPaintの無限ループのような状態が起きている
これのせいで、MessageBoxがメッセージを受け取れないみたいだね
WM_PAINTのディフォルト処理を入れなきゃウインドウズプログラムはだめだってことで
7775:04/07/01 13:13
飯行くので急いで書いたのでむちゃくちゃな文章になってるな・・・
ちゃんと書くと
WM_PAINTメッセージってシステムがこの領域は無効な領域(描画が必要な領域)
だと判断したから発生させるメッセージ(よく再描画するのにInvalidateを呼び出すが
これは、アプリ側で無理やり無効な領域にしているってこと)
このメッセージを受け取ったアプリ側は、適切な描画処理をするもしくは
ウインドウズディフォルトの処理に任せる
このとき使用されるAPIがBeginPaint EndPaint、MFCならCPaintDC
このAPIもしくはクラスを使用した場合、無効領域がクリアされるため
再び無効領域が出来るまでになるまでWM_PAINTが発生されることは無い

69の作ったプログラムでは、WM_PAINTメッセージのハンドラで何も処理をしない為
何時までたってもその領域が無効であるとシステム判断するのでWM_PAINTを繰り返す
WM_PAINTは優先度の高いメッセージなので、この処理が完了しないと他のメッセージは
受け取れない、メッセージボックスはWM_INITDIALOGなど一連のメッセージを受け取って
処理をしない限り動けないので何時までたってもそのメッセージを受け取れない
つまりプログラムが停止しているわけではなく、OnPaintメッセージでループしている

説明下手ですまんが、大体のニュアンスは分かっていただけたかな?
>>68
多言語リソースは.rc2の方に書いておけば、リソースエディタは影響受けない。
もちろん、逆にそこの部分はリソースエディタの支援をまったく受けられなく
なるんだけど、C(++)ソース中にユニバーサルキャラクタで書き込むよりは
可読性があっていいんじゃないかと。
ちなみにユニコードで保存したrc2ファイルは、テキストファイルとして
VisualStudioで編集できる。
7969:04/07/01 20:05
75さんとても丁寧な説明ありがとうございます。
WM_PAINTメッセージが送られ続けているということですね。

Windowsプログラムはまだやり始めたばかりでわからないことが多いですが
とても楽しいです。
これからもがんばっていこうと思います。
本当にありがとうございました。
ダイアログボックスにCAD図形みたいなものを描画するときって、
何かいいコントロールとかってありますか?
ピクチャーコントロールって、こういうときに使うのでしょうか?
>>80
俺はこういう時に使ってる
>>80
ダイアログボックスに貼り付けると、IDがIDC_STATICとなって、
普通のスタティックテキストと扱いが同じなんだよね。
で、どうやって使わせようとしているのかの意図が読み取れなくて???
藻前が何を言おうとしているのか読み取れねーよ!!!
自分でIDを変えるんだよ
85デフォルトの名無しさん:04/07/02 21:55
教えてください。いまあるアプリケーションで縦のスクロールバーを他のアプリケーションから
スライドさせてそのアプリケーションの表示をスクロールさせたいのですが、
スクロールバーそのものの位置は更新できるんですけど表示はスクロールしません。
どうやればよいのでしょうか?ちなみに今は
void CXXX::foo()
{
    SCROLLINFO si;
    si.cbSize = sizeof(SCROLLINFO);
    si.fMask = SIF_ALL;
    ::GetScrollInfo(m_hScroll, SB_CTL, &si);//m_hScrollはスクロールバーのHWND

    SCROLLINFO tmpsi = si;
    tmpsi.fMask = SIF_POS;
    int pos = si.nPos;
    while(pos < si.nMax)
    {
        tmpsi.nPos = pos;
        ::SetScrollInfo(m_hScroll, SB_CTL, &tmpsi, TRUE);

        //キャプチャ処理

        pos += si.nPage;
    }
}
という感じです。
>>85
InvalidateRect()してみるとか?
アクティブなアプリが他のアプリだから画面更新されんってことか?
プロセス間通信はイベントオブジェクト以外苦手じゃ
SetScrollPosは「スクロールバーの情報を書き換えるだけ」なので、
それじゃアプリにスクロール要求は出ない。
他アプリをスクロールさせるってのはやったことないけど、
単純にWM_xSCROLLを送ればいいんじゃなかろうか。
AfxBeginThreadで作ったスレッドの中からAfxMessageBoxを呼ぶと
MessageBoxがダイアログの中央ではなく、画面の中央に表示されて
しますのですが、ダイアログの中央に出す方法はありませんか?
環境はVC++.NET 2003です。

/* スレッド作成 */
m_Thread = AfxBeginThread(func, (LPVOID)this, THREAD_PRIORITY_NORMAL);
/* スレッド関数 */
static UINT func( LPVOID pParam )
{
CHogeDlg *pHogeDlg;

pHogeDlg = (CHogeDlg*)pParam;
pHogeDlg->Hogehoge();

return 0;
}
/* 実行部分 */
int CHogeDlg::Hogehoge( void )
{
AfxMessageBox("Hoge",(MB_OK | MB_SETFOREGROUND | MB_ICONEXCLAMATION | MB_TASKMODAL),0);
}
9085です。:04/07/02 23:12
みなさんありがとうございます。>>88さんのおっしゃるとおり、
親にWM_VSCROLLを送ることで実現できました。
>>89
普通はどっちなんだっけ?
ともかく、ダイアログ関係を中央に出そうとするのはCenterWindowの仕業だから、
そこにブレークポイントをかけて、しかるのちに対策を考えればいいかと。
>>89
そのスレッドでダイアログの情報を持ってないのが原因だろうから、
何らかの方法でCWnd*を渡してメンバ関数版を使えばいいんでないかな。
>>89
試していないけど、CHogeDlgがCDialogを継承
しているならのメンバ関数のメッセージボックスを
呼び出せばいいんじゃないの?
94デフォルトの名無しさん:04/07/03 16:44
>>89
>ダイアログの中央に出す方法はありませんか?
方法はある。 WM_INITDIALOG
もっと簡単な方法が知りたいってことか?
どんくらいまでわかるのかを書かないと
それこそ基本中の基本から説明せにゃならん。
もちろん、それは万単位が相場で只ではできない。
MDIでフォームビューを選んだとき、フォームのダイアログのサイズを
MoveWindow()とかSetWindowPos()でサイズを変えようとすると
必ず落ちますが(DEBUGビルド時)、これって許されないのでしょうか。
CChildFrameのサイズに合わせて大きさを変えたいのですけど。
9695:04/07/03 19:54
>>95
簡単にいいますと、フォーム内のダイアログテンプレートのサイズを
変更するにはどうしたら良いのか、ということです。
単純にGetDlgItem()ではダメですよね。NULLが返ってきてしまいます。
9789:04/07/03 22:47
>>91,92,93,94
回答ありがとうございます。
とりあえずスレッド作成元のCWnd*をグローバル変数に設定して、
スレッド内からMessageBoxを呼び出す方法と、直接メンバ関数の
MessageBoxを呼び出す方法を試しましたが、結果は同様でした。
なお作成元のスレッドでAfxMessageBoxを呼び出した場合には、ダイアログの
中央に表示されます。
>>94
当方組み込み向けのCが本職で、Windowsプログラムはほとんど経験がありません。
スレッド内でメッセージボックスを表示させることはWindowsプログラムではほとんどしな
いことなんでしょうか?
>>97
俺もあまり詳しくはないが、そこまでMessageBoxにこだわる必要はないのでは?
メッセージ出力用のダイアログクラスを作成して、そのクラスに親の位置を渡せば良いのでは
ないのかな
ダイアログクラスなら、OnInitDialog()で表示位置やサイズを変更すると簡単なんだけど。
意図していたことと違うかもしれないが、暫定的にしておいて、他のもっと重要なところに
パワーをかけた方が良いと思うよ
99デフォルトの名無しさん:04/07/03 23:47
>>97
スレッドにはメッセージループを持つスレッドと、持たないスレッドがある。
WM_INITDIALOGはメッセージなわけだが・・・
>>97
Windowsでは、ウインドウはどれかのスレッドに属している、
つまりスレッドがウインドウを保持しているといっていい。
そして1つのウインドウは複数のスレッドに共有されることは無い。
ウインドウには親子関係があるがこれは同一スレッド内においてのみ有効
スレッドがウインドウを作った場合親ウインドウに別のスレッドのウインドウを
指定しても無効になる
メッセージボックスの場合、内部的にCenterWindowが呼ばれるわけだが、
親ウインドウがいないもしくは無効な為、ど真ん中に表示されてしまう
どうしてもと言うなら、試したこと無いので出来るかどうかわからないが
見えない親ウインドウをスレッド元のウインドウサイズにあわせて作って
おいてメッセージボックスを呼び出すとか
>>96
つまり、スクロールバーを表示させたくないってこと?
>>96
一応調べてみたらこういうのあったけど
ttp://www.codeproject.com/docview/resizableformview.asp
103デフォルトの名無しさん:04/07/04 17:52
CStringArrayのサンプルプログラムが欲しいです。
参考ページでもいいのでお願いします。
>>103
別スレだけど
http://pc5.2ch.net/test/read.cgi/tech/1087929711/969
でCの宿題の回答にCStringArray使ってるね
105デフォルトの名無しさん:04/07/04 18:09
>>104
コンパイルすらできない俺って・・・_| ̄|○
VC7ですが、助けてくださらんか?
1061/2:04/07/04 18:30
>>105
長くなって申し訳ないが、969さんのコード全部転載させてもらいますた。
あくまで例として載せてくれたみたいなので、宣言が抜けてたりしたのを
追加しただけです。

#include <afxwin.h>
#include <io.h>
#include <iostream>
using namespace std;

CStringArray arDstFileList;
CStringArray arSrcFileList;

void Read(CString& csFile)
{
CStdioFile readFile;;
CString csRead;
readFile.Open(csFile,CFile::modeRead);
CString csDstFile;
CString csSrcFile;
while (readFile.ReadString(csRead)){
csDstFile = csRead.Mid(0,csRead.Find(":"));
csSrcFile = csRead.Mid(csRead.Find(":") + 1,csRead.GetLength());
arDstFileList.Add(csDstFile);
arSrcFileList.Add(csSrcFile);
}
readFile.Close();
}
1072/2:04/07/04 18:31
void Move()
{
// ファイル有無(書き込み権チェック)
for (int i = 0;i < arSrcFileList.GetSize();i++){
if (0 != _access(arSrcFileList.GetAt(i),6)){
throw new CFileException();
}
}
// ファイルの移動
for (i = 0;i < arSrcFileList.GetSize();i++){
if (0 == ::MoveFile(arSrcFileList.GetAt(i),_T("C:\\temp\\") + arDstFileList.GetAt(i))){
throw new CFileException();
}
}
}

main()
{
try{
Read(CString("C:\\list.dat"));
Move();
}
catch(CException* pE){
pE->Delete();
cerr << _T("ERROR") << endl;
}
}
108105:04/07/04 18:48
>>106
VCを初めて3日目なんで、こういうコードを載せてもらった場合、
どうやってスケルトン?(でしたっけ)を作るかわかりません。
MFCアプリケーションで作ればいいのでしょうか?
109105:04/07/04 18:49
>>106
サンプルコードありがとうございました。
お礼が遅れて、すみません。
>>105
上のコードだとMFCとは言ってもMFCの中の
CStringArrayを使うだけで、中身はコンソールプログラム
だから(簡単に書くとコンソールプログラムはmainから
始まり、ウィンドウズプログラムはWinMainから始まる)
とりあえず、Win32コンソールプロジェクトで作成する。
で、CStringArrayを利用するにはMFCをリンクする必要が
あるのでプロジェクトのプロパティで「MFCの使用」を
「共有DLLでMFCを使用する」または「スタティックライブラリ
でMFCを使用する」に設定する。
始めて3日だと、リンクとかDLLとかスタティックとか言われても
わけわからないだろうけど、MSDNにも情報があるのでこつこつ
やってちょ。
111105:04/07/04 21:29
>>110
がんばってコンパイルはとおりましたが、エラーが出て実行できませんでした。
もっと勉強します。
スプラッシュウインドウとしてメッセージを表示させるだけの
ダイアログにスタティックウインドウを貼り付けただけのウインドウを作りました
CWinApp::InitInstance中で作成、表示させようとするとウインドウ自体は
表示されるのですがスタティックコントロールのメッセージが表示されません。
メッセージはInitInstanceの関数を抜けたあとなら表示されるので
ただ単純に再描画の為のメッセージを受け取れていないだけだと思うのですが
InitInstance中にメッセージポンプ入れるなど色々試してみましたが思うように
表示されません。

今は、別スレッド化してメッセージの表示は出来ていますが
出来たら単一スレッドで動かしたいです。何かよい方法をご存知の方いらっしゃったら
教えてください

質問なのでage
114デフォルトの名無しさん:04/07/04 21:37
>>113
これはダメかもわからんな
>>105
そっかぁ。もっと簡単な例だせばよかたーYO。
ごめん。
MFCの配列クラスはCStringArrayとかCUIntArrayとか
いっぱいあるけど、テンプレートというのを覚えると、
CArray<CString>、CArray<UINT> とCArrayクラステンプレート
だけ覚えると何でも作れるようになるYO。
その場合でもよく使うのは、Add、GetAt、GetSizeとかで
その他のも使ってるうちに覚えてくる。

#include <afxwin.h>
#include <stdio.h>

int main(void)
{
CStringArray ar;
ar.Add("あ");
ar.Add("い");
ar.Add("う");

printf("配列の要素数は %d コです。\n", ar.GetSize());

for (int i = 0; i < ar.GetSize(); ++i) {
printf("配列の %d 番目の 要素は %s です。\n", i, ar.GetAt(i));
}

return 0;
}
つーか始めて三日でなんでCStringArrayなのか分からない。
まずCString、そのうちCArrayって感じだと思うが。それぞれの
概念が理解できていれば、Arrayの仲間についても自然と分かる
はずだし。
117105:04/07/04 21:51
>>115
ありがとうございます。
なんとなく、わかりました。
何でも作れるようになる・・・素晴らしい言葉ですね。
頑張ってマスターします。
今後とも宜しくお願いします!
素直にvector使おうよ…
>>118
MFCで作っている限りにおいてはvectorを使用するよりも
CStringArrayのほうが利点が多い
漏れもMFC使ってる分にはSTL使わないなぁ
121105:04/07/04 22:30
>>118
vectorを使うとCStringArrayよりいいのでしょうか?
>>121
CString使うなら、CStringArrayで問題ない。
123151:04/07/04 23:16
>>122
逆にstringだとvectorですか?
MFCでコンテナとして使うだけならデバッグ性能やシリアライズが出来る
CStringArrayが良い
アルゴリズム使う場合はstlだけどね
該当するものがなければvectorなり使うしかない。
>>125
該当するものとはどういう意味ですか?
ちなみに、VCでstl使うならstlportの方が良いよ
128デフォルトの名無しさん:04/07/04 23:42
スレッドを使うプログラムを作ったのですが、
スレッドからダイアログにメッセージをセットしようとするとアサートします。
スレッドが怪しいのですが、
UINT thread(LPVOID pParam)で作って
CTestdlg;

として、dlg.GetDlgItem(IDC_EDIT1)->SetWindowText(msg);

では駄目なのでしょうか?
どうすればセットできますか?
>>127
だったらBoostでいい
>>129
俺も使ってるけどねboost
ただ敷居がちと高い
131112:04/07/04 23:46
もう少し詳しく書いてくれたら教えるよ
>>128だった
>>110
便乗で申し訳ありませんが、
1.「共有DLLでMFCを使用する」
2.「スタティックライブラリでMFCを使用する」

1.2はどうちがうのでしょうか?
>>129
boostはstl実装じゃないじゃん。
libをリンクするか、dllを使うかの違い。
>>132
ダイアログベースでスレッドをコールするようにしているのですが、
そのクラスへ Cクラス dlg
として、dlg.GetDlgItem(IDC_EDIT1)->SetWindowText(msg)とすると
アサートします。
コンパイルは通るのですが。
>>136
ワーカスレッドで作ってるから。
>>137
他にどんな方法があるのでしょうか?
139112:04/07/05 00:12
>>136
う〜ん、わからんw
まずスレッドを生成している場所はどこ?
生成方法は?
140112:04/07/05 00:13
ついでにそのダイアログクラスは、元のダイアログなの
関係が上手くつかめない
>>138
ユーザーインターフェイススレッド
>>139
生成場所はダイアログで実行される関数内です。
CWinThread *p_thread = ::AfxBeginThread(Thread, this);
こんな感じでThread関数を呼び出します。
UNIT Thread(LPVOID pParam)
ワーカスレッドを真似てみたのですが。。怪しいです
>>140
ダイアログは一つです。クラスも一つです。(スレッドはクラスの宣言をしてません)

>>141
聞いたことはありますが、使ったことはありませんでした。
ちょっと調べてみます。
あーなるほど
スレッドに元のダイアログのポインタを引数として渡して
そこからダイアログの子ウインドウに何かやっているってことか
アサートしているのはどこ、GetDlgItemのウインドウハンドルがNULLとかかな?
>>144
そんな感じでしようとしてましたができませんでした。
生成場所のダイアログで実行される関数って何?
使用で
「マルチスレッドに対応すること」
と書かれていた場合、どんな風に実装すればいいのでしょうか?
またすごい質問がきたな。w
>>145
多分そうです。ウィンドウハンドラがNULLです。
151138:04/07/05 00:26
>>147
OnOK()です。
>>148
同時に同じリソースにアクセスされても整合性が取れる実装ってことだね
ライブラリなんかを作る場合、その部分をしっかり作っておかないと不味い
153138:04/07/05 00:30
ユーザインタフェーススレッドはこのコール方法で合っていますか?

CSubThread *pThread = (CSubThread*)AfxBeginThread(RUNTIME_CLASS(CSubThread),THREAD_PRIORITY_NORMAL, 0, 0);
pThread->m_bAutoDelete=FALSE;
pThread->ResumeThread();

これでCWinThreadの派生クラスを作成しましたが、これでよいのでしょうか?
複数のスレッドにするにはその数分クラスを作成しないといけないのですか?
OnOkか・・・ちなみに、そのコントロールは存在しているよね
155138:04/07/05 00:33
>>154
はい。デフォルトのまま置いてあります。
>>153
言っておくけどユーザインターフェーススレッドはそのスレッドでウインドウを
マネージしたい場合(メッセージキューを作って云々ってことね)に
作るスレッドなので138の今回の目的のためには使えないんじゃないかと思う

なぜならユーザスレッドとワーカスレッドなんてのはMFCの上だけで存在するものだし
多分もっと根本的な問題だと思うけど
まさかとは思うけど
OnOKの実装ってそのままにしていない?
CDialog::OnOKのディフォルトって内部でEndDialogを呼び出すけど。。。
>>155
たぶんソース張ってもらったほうが早いんで、ソース張ってくれます?
スレッドの部分だけでいいんで。
ちなみに今ダイアログでこんなの作ってみたが問題なく動いたよ
UINT ThreadFunc( LPVOID lpVal )
{
CThreadTEstDlg *pDlg = (CThreadTEstDlg *)lpVal;
pDlg->GetDlgItem( IDC_EDIT1 )->SetWindowText( "テスト" );
return 0;
}

void CThreadTEstDlg::OnOK()
{
// TODO: この位置にその他の検証用のコードを追加してください
CWinThread *pThread = AfxBeginThread( ThreadFunc, this );
//CDialog::OnOK();
}
160158:04/07/05 00:46
>>159
漏れも試したら普通に動いたんで、なにか根本的に間違えてると思う。
161138:04/07/05 00:46
こんな感じです。

void CTestDlg::OnOK()
{
threadflag = 1;

CWinThread *p_thread = ::AfxBeginThread(Thread, this);
//CDialog::OnOK();
}

UNIT thread(LPVOID pParam)
{
CTest dlg;
CString msg;

while(threadflag){
// 処理
//msgにメッセージを格納
}

dlg.GetDlgItem(IDC_EDIT1)->SetWindowText(msg);
}

threadflagがグローバル変数のフラグで
こいつは本当はMutexLockとかしてもう少し複雑に処理してますが、
流れはこんな感じです。
あぁ、やっぱり。。。。
>CTest dlg;
ここ
いやな予感はしていたが・・・
じゃ、後はよろしく
俺は寝ます・・・
166138:04/07/05 00:52
>>162-163
直りました。。
ありがとうございました。
167デフォルトの名無しさん:04/07/05 01:19
>>106
これをstl使って書いたコードが見たいのですが、誰か書いてくれませんか?
>>167
>115のでもいいなら...

#include <vector>
#include <string>
#include <stdio.h>
using namespace std;

int main(void)
{
vector<string> vec;
vec.push_back("あ");
vec.push_back("い");
vec.push_back("う");

printf("配列の要素数は %d コです。\n", vec.size());

for (int i = 0; i < vec.size(); ++i) {
printf("配列の %d 番目の 要素は %s です。\n", i, vec[i].c_str());
}

return 0;
}
169つづき:04/07/05 01:48
string、vectorがSTLで定義されているクラスです。
for文のところは
int i;
vector<string>::const_iterator iter;
for (i = 0, iter = vec.begin(); iter != vec.end(); ++iter, ++i) {
printf("配列の %d 番目の 要素は %s です。\n", i, iter->c_str());
}
でもOK。これはSTLのイテレータという機能を使った方法。(イテレータは自分で勉強してちょ)

>>168
深夜にありがとう。
がんがりまっす
>>106
これさー、datのSTARTとENDそのまま読み込むからエラーになるんだよ。
そりゃ、コンパイル通っても実行はできんさw
172デフォルトの名無しさん:04/07/05 22:28
質問です
CDialogBar上に、スピンボタンを配置しました
CDialogBarは、派生クラスを作らないとMSDNにあったのでコントロールのハンドリングは
すべてCMainFrame上に持ってきています。
このようにすると、スピンコントロールがどうしてもEnableになりません
これはどういうことでしょうか
環境はVC6sp6です
17397:04/07/05 23:06
メッセージボックスっぽいものを自作することで
解決しました。
回答をくれた皆さんありがとうございました。
>>172
CDialogBar::OnUpdateCmdUIをオーバーロードしないとあかんらしいです。
うちはVS.NETだけど、たぶん同じだと思います。
175デフォルトの名無しさん:04/07/06 00:51
MFCでコマンドライン引数を渡したいです。

m_lpCmdLineを使うのはわかったのですが、サンプル欲しいです。

渡したいコマンドライン引数は
「xxx.exe -a:c:\hoge.txt -b:c:\poko.txt」
MFCのダイアログベースで制作しているアプリです。
引数を他のcppファイルで受け取って、変数に入れて使用したいです。

宜しくお願い致します。

>>174
回答ありがとうございます
つまり、CDialogBarを派生させないといけないと言うことですね

問題のおきているソースは、かなりでかいプロジェクトでCDialogBarのほとんどの
コマンドハンドラーはCMainFrameに記述されています。
そのためCDialogBarの派生クラスに持っていくのは結構手間がかかってしまいます。

ためしに新規にダイアログバーを持つSDIアプリを作ってみたところスピンコントロールは
問題なくEnableになっていました。
MFCのソースを解析してみたところ、通常ボタンコントロール以外はGet(DLGC_BUTTON以外)
Enableになるように見受けられるのでもう一度どういう原因でDisableになるか調べてみようと思っています
途中で送信してしましました

・・・・
問題なくEnableになっていました。
MFCのソースを解析してみたところ、ジェネリックボタンコントロール以外は
(WM_GETDLGCODEの戻り値がDLGC_BUTTON以外)
Enableになるように見受けられるのでもう一度どういう原因でDisableになるか
調べてみようと思っています

ついでだから回答w
>>175
MFCの場合引数はCCommandLineInfoを継承したクラスを生成して
ParseParam関数をオーバーライドして引数を解析するというのが一般的です。
(といいつつあまり一般に利用されていないけど)
今回の引数は形式がウインドウズの標準と違うため、独自に文字列の
切り離しなどを入れるしかありません-をオプションの識別子としているのであれば
-を取ってコロンを境に前後に文字列を分ける等の処理を入れれば良いでしょう

さてそれを他のcpp(多分他のクラスということでしょうか)に渡すのであれば
ab切り出したそれぞれの文字列変数(CStringなど)を別のクラスに渡せばいいと思います
すいません。
ちょっと質問です。

今、巷の普通の本屋さんで売っているWindowsプログラムの本は大体Visual C++の
本です。
それでそういう本には、「ウイザードで勝手に作られるんで、カスタマイズしたいときは
ここをいじってください」としか書いてなくて、なぜそこをいじればいいのか、プログラムが
どういう流れになっているのか全く分かりません。

結局、SDKの方が分かりやすいと思い、まずはそっちをやることにしました。
みなさんはどうやってMFCを勉強されたのでしょうか?
もっと良い入門書があるのでしょうか?
>>180
どの関数がどのクラスのメンバか意識するようにしたら理解できた。
関数名しか書いてなくても、クラス名::関数名 っていうようにして憶える。
>>180
> それでそういう本には、「ウイザードで勝手に作られるんで、カスタマイズしたいときは
> ここをいじってください」としか書いてなくて、

まずはそこから始めて、具体的な成果物を作らないことにはモチベーションが
持続しないと思うが。体系なんてものは大きすぎてなかなか理解できるもので
ないし、とにかく何か動くものを作れるようになることが先。手段は後で良いんだ
よ。まず「何を作りたいか」、「どういう動きをさせたいか」が大切。それに沿って
どうすれば良いかを調べていく。経験を重ねれば、下層にあるものがだんだん
見えてくるし、それからシステムの学習に入ればいい。

もちろん、CやC++の基礎がないようなレベルだったら話は別。そういった
言語レベルの基礎知識は身に付いてないとVCプログラミングは難しい。
>>180
そんなあなたに
翔泳社の標準講座MFC ハーバートシルト著
>>180
MFC→ウィザードが生成したものをいじる
SDK→猫からソースパクっていじる

結局同じ
>>180
食わず嫌いせずとりあえず一番高いものに食いついて、消化できなくて吐き出して、
高い金払って食って吐いて、高い金払って食って吐いて、
食って吐いて、食って吐いて、食って吐いて……と繰り返しあがき続けていたら、
いつの間にかMFCでもSDKでも問題なく使えるようになり、物も食えるようになっていた。

しかし、そこに行き着くまでに消費した書籍代は…… _| ̄|○
本来、クラスライブラリはその中の構造に関する知識を必要としな
いものだ。したがって
>なぜそこをいじればいいのか
>プログラムがどういう流れになっているのか
なんて気にするな。
と考える俺は少数派だと自覚しております。
187デフォルトの名無しさん:04/07/07 20:47
>>185
途中で降りたらベット丸損だぞ
本と同じ重さの札束を狙う大博打ってとこを忘れんな
188デフォルトの名無しさん:04/07/07 23:13
void hoge(void)
{
  CPen myPen;


  myPen.DeleteObject(); ←これいるんですか?
  Delete myPen;      ←これもいるんですか?
}

CPenってスコープ外れる時に、この辺やってくれないの?
>  Delete myPen;      ←これもいるんですか?

こんなのいれたらコンパイルとおらねぇよ。
>>189
myPen.DeleteObject();
これ、必須ですか?
msdnより、

1.スタック フレーム上にグラフィック オブジェクトを定義します。CreatePen など、それぞれの型固有の作成関数を使って、オブジェクトを初期化します。コンストラクタでオブジェクトを初期化することもできます。
 1 段階で作成する方法と、2 段階で作成する方法については以下に説明します。
2.オブジェクトを現在のデバイス コンテキストに選択し、前に選択した古いグラフィック オブジェクトを保存します。
3.現在のグラフィック オブジェクトを使い終わったら、古いグラフィック オブジェクトをデバイス コンテキストに選択し直して、状態を復元します。
4.フレームに割り当てられたグラフィック オブジェクトは、スコープからはずれたときに自動的に削除されます。

これ見て意味わからんかったら再度質問しろ。
>>188
その変数がスコープ内で使い切りになっていて、デストラクタによる削除で
間に合う場合は、DeleteObject()が不要。ただしDeleteObject()を書いても
悪くはない。

デストラクタに任せるか、明示するかの違い。あるいはそれぞれその必要が
あるかどうか場合によって選択する。

>Delete myPen;
は?
>>191
>>192
ありがとう、謎が解けました。
これで熱帯夜も眠れそうです。

Delete myPenは立ち読みした時に載っていて、
「え?そんなんまで書くんだ・・・」
と記憶していたもんで・・・
194本田:04/07/08 09:07
>復刊リクエスト投票
>MFCインターナル
>著者名 G. シェパード/S. ウィンゴ=著、玉井 浩=訳
>出版社 アジソン・ウェスレイ・パブリッシャーズ・ジャパン
ttp://www.fukkan.com/vote.php3?no=24811

興味のある方は投票お願いします。
>>188
MFCってよりC++の根本的な理解が足りないだけじゃないんですか?
>>193
deleteはnewしたときだけ
>>195
CDCとCClientDCのデストラクタの違いについて
C++の根本的な理解で説明してくれ
CDC::~CDC()
{
    if (m_hDC != NULL)
        ::DeleteDC(Detach());
}

CClientDC::~CClientDC()
{
    ASSERT(m_hDC != NULL);
    ::ReleaseDC(m_hWnd, Detach());
}
CPenから話が飛んでますよ
>>198
それがMFCのお話だ
っていうか、C++理解していれば、
わざわざここに質問するようなことではないのだが。
単なる仕様だろ。
そのMFCの仕様が分からないから、ここに質問したのだと思われ・・・
仕様ならヘルプに書いてあるよ。
>構築時に Windows の GetDC 関数を呼び出し、
>破棄時に ReleaseDC 関数を呼び出します。
>>202
ヘルプも見ないで質問する人、どう思います?
>>204
ヘルプを見れない環境ですが、何か?
206デフォルトの名無しさん:04/07/08 22:54
207デフォルトの名無しさん:04/07/08 22:58
これから先は、

ヘルプに書いてある事質問禁止

でお送りします
ム板ってヘルプみたいなもんだろ。違うか?
>>208
C++の根本的な理解が足りない人
210デフォルトの名無しさん:04/07/08 23:27
>>209
C++ と何の関係が?
>>210
>>195に聞いてくれ
もうさ、BCBにしとけって
マジおすすめ
213デフォルトの名無しさん:04/07/08 23:59
BCBの何がいいのかマジわからんぞ
つか、WindowsアプリではVC最強!
そんな恥ずかしい事、ageて言わないでくれ・・・
>>214
>>213は事実ですが・・・
216デフォルトの名無しさん:04/07/09 00:35
MASMは?
217デフォルトの名無しさん:04/07/09 00:46
名刀のような名前ですね。
218デフォルトの名無しさん:04/07/09 01:00
>>213
はげ同
BCBは使えるが、VC++は使えないなんて香具師は
まず、仕事回してもらえないだろうね
仕事は回ってこないが、意固地な友達が増えるという利点がある。
スレ違いな話はそろそろやめれくれや
ヘルプが見れない環境って、
その時点で仕事放棄してるのと同じだ...orz
>>221
少なくても、本人の仕事環境に対する意識はゼロといえるだろう。
ヘルプが見れない環境のくせに、ここで得意になって質問されてもね。
車でガス欠しちゃうくらい恥と思わなきゃ。
え?VC++ってヘルプ無いの?!!!
最弱〜 orz
>>222
まともに答えられないくせに上級者気取りか。
おめでてーな。
2chできる環境ならオンライン版の
MSDNライブラリが見られるはず。
レスればレスるほどに恥ずかしさが増してくるよ。
VC++ぐらい1人でインストールしなさいって。
そうすりゃヘルプぐらい見れるから。
釣られまくりだな
228デフォルトの名無しさん:04/07/09 07:59
趣味でやっていますが…
全部自演ですよ?
ところで226みたいな奴はこのスレに何を期待してるんだ?
231レスる:04/07/09 15:05
レスる
ヘルプは読み方が分からないってのもあるからねぇ。
日本語かどうかじゃなくて、書いてある言葉そのものが読みきれないっていうか。

その辺をうまく要約してくれる神を求めて、ここに書いてることもあるでしょ。
233デフォルトの名無しさん:04/07/10 01:47
MFCを使ったOOPのやり方について解説している本あるいはサイトがあったら教えてくれませんか?
234デフォルトの名無しさん:04/07/10 01:54
235233:04/07/10 02:09
すいません、まとはずれな質問しましたか??各クラスの役割がいまいち
よく分からないんですが・・・。
>>235
まとははずして無いと思います、
まともな回答者を待ちましょう
>>235
ところでヘルプは読んだか?ヘルプは?
238233:04/07/10 02:21
>>237
一応読みました。OOPの勉強はしたのですが、いざMFCで実現しようとすると、どのように
したらよいか、ってのが分かりません。例えば、CWinAppっていうのはコントローラなのか、
とか、ドキュメントクラスはなんなのかってことです。ほかには、画面を次々と切り替えて
行くとき、それぞれの画面のクラスを作成するのか?とかよく分かりません。作成すると
したら、それを切り替えるたり、生成したりするのはどのクラスでするべきなのか、とかです。
つまり、まだC++使う時期じゃないと思うのですよ。
自分で試行錯誤、いろいろやりながら覚えていく手間を惜しむのなら、
はじめからやめたほうがいいと思います。
でたな。上級者気取りのオッサン
>>240
さぞ悔しかったんだろう
ほっといてやれ
お前ら、まだやってんの?寝たら?
243233:04/07/10 03:26
>>239
いや、ある程度実践的なプログラムの作成はこなしたんですが。いまだにどうすべきか、
ってのが分からずだましだましプログラミングしてる状況です。

あと240ではないです。
>>243
>>239みたいな変な奴に気を使う必要はないよ。
>>233
実践的なプログラムの作成をこなせてるのなら
今のままでも問題ないのでは?
なんだ。趣味のプログラムか。
247デフォルトの名無しさん:04/07/10 03:36
まさか仕事中に、「ドキュメントクラスってどうやって使うのですか?」
なんて聞いてまわったりしてないよね... orz
>>246
また上級者気取りのレス。いい加減にしろ。
249本田:04/07/10 07:51
>これから先は、
>ヘルプに書いてある事質問禁止
>でお送りします

BCBはMFCが付いていてもヘルプがない、冷たいこと、言わんといて。


250デフォルトの名無しさん:04/07/10 07:55
225 :デフォルトの名無しさん :04/07/09 04:06
2chできる環境ならオンライン版の
MSDNライブラリが見られるはず。
251中級者気取り:04/07/10 09:04
ドキュメントクラスなんて、あれよ。ただのクラス。
ちょっと規模がでかくなりそうなんで、
描画用(ビュークラス)とデータ処理用(ドキュメントクラス)
に分けてみっか!てな感じ
252デフォルトの名無しさん:04/07/10 09:24
>>251
そういうことじゃないんですが・・・、なんていったらいいんでしょうか?それ、
曖昧なんですよね・・・。その説明じゃ役に立たなかったというか・・・。
>>252
どうわからないのか説明できないのなら教えようが無いな。
254デフォルトの名無しさん:04/07/10 11:18
>>253
例えば、商品注文システムを考えると、商品注文クラス(商品の1回での注文を表すクラス)というのが
ありますよね?それをドキュメントクラスの子クラスとするのか、それとも、そのクラスのオブジェクトを
保持するのがドキュメントクラスなのか、とかです。
>>254
分離独立です。
関連性もたせちゃダメ
256デフォルトの名無しさん:04/07/10 11:29
>>255
ということは、そのクラスのオブジェクトを保持するのがドキュメントクラスってことですか??
>>238
OOPなんて言葉に縛られず、ひとつひとつのクラスの使い方を確実にマスターしてくことでしょうな。
100個も覚えられれば、そのうちピーンと何かがひらめいてくるだろう。
一度ひらめいてしまえば、クラスなんて覚えなくてもヘルプ片手にプログラムできるようになる。

その辺の話は、知るより感じなければならない部分なので、他人に聞いても解決しないよ。

仮想リストコントロール内でのアイテム選択変更に
SetItemState(nIndex, LVIS_SELECTED, LVIS_SELECTED | LVIS_FOCUSED);
とやっても選択が変わってくれないんですけど、これは使えませんか?
仮想LCだと選択についてもやり方が別になってますか?
>>254>>256も全部不正解
260デフォルトの名無しさん:04/07/10 12:23
>>250
ケータイから2chにアクセスしていますが、何か?
ドキュメントクラスってのはMVCでいうModel部分。
データ管理部分のクラス。

で、データをドキュメントクラスに持たせるか、派生クラスに持たせるかなんてのは
自分の好きにすればいい。
>>260
何か?
じゃねーよ。ばか。
263デフォルトの名無しさん:04/07/10 12:31
>>262
ケータイから2chにアクセスしています。
ケータイで使えるヘルプのURLを教えて下さい。
ここで釣られまくってる香具師はプロとして失格だね。
265デフォルトの名無しさん:04/07/10 12:36
どいつもこいつもC++の根本的な理解が足りないだけだな
よく釣れるな・・・この釣堀は
267デフォルトの名無しさん:04/07/10 12:45
>>264
プロって、2chのプロか?
それなら失格で大いに結構!!
>>267
おまえはプログラマとして失格だな
ただのグラマ
プロのグラマーって、ゲームセンターあらしであったネタだな。
釣られてる香具師ってコンプレックスのかたまりなんだと思う。
もっと冷静になって、自分をもっと知るべきなんだろうね。
まあ、オチケツ、と言っておこう。
厨房の行動

  ・負けそうになると「釣れた!」という

--某所より転載
273デフォルトの名無しさん:04/07/10 15:08
>>272
FOMAで見てみましたが、どうやらケータイには対応していないようです。
見れない人はMSDNサブスクリプションの年間契約をしてください。
FOMAをモデム代わりにして、PCのブラウザでアクセスすればいんじゃないの?
>>275
ケーブル持ってないです。
それにパケット代で死んでしまいます。
つまり見る資格無しってことですよ。
そんな心がけでプログラマーは笑ってしまいます。
いや、私じゃなくて世間一般的に言ってです。
>>277
自称上級者たちに笑われても
痛くも痒くもありません。
>>276
プログラマってそういう仕事だよ。そのくらい金出してやれ。
将来得るに違いない能力が、つまらん制限のおかげで身に付くのが遅れるのは哀しいだろ?
今頃わかった!・・・
わざとやってんだろ?おまえら!
そうやって、暇だったら、プログラムの一つでも
作れってこった
もちろんわざとです。
ヘルプをどうしても見れない事にしたい奴を
からかってるだけです。
>>281
と、いうことにしたいのですね :-P
>>281-282
ホント、仲いいのな。
CStdioFileの派生クラスで、ファイルをオープンしたあとGetLength()実行すると
そこでAssertionがかかるんだけど何ででしょうか。GetPosition()でもかかってしまします
その質問で答えられたら超能力者
>>284
ファイルのオープンに失敗してるから
ASSERT出たときに、ファイル名と行数が出てこない?
そこを読めば?
288284:04/07/10 23:52
>>285-287
原因が判明しますた
オープンしたのは基底クラス型の面罵変数だったのに、派生クラスのGetLength()を
直接呼んだのが間違いでした。オーバーライドしておくべきでした_| ̄|○
ヘルプを読んでもわからないはずだ...orz
290本田:04/07/11 10:42
>どいつもこいつもC++の根本的な理解が足りないだけだな

C++は仕様が複雑すぎるので、だれも根本的には理解できそうに無い。
291名無しさん@そうだ選挙に行こう:04/07/11 11:24
>>265
どいつもこいつもに、あんたも含まれるのか?
含まれない人なら当然、「根本的な理解」とは何かが言えるよな。
まあ、100%理解してて記憶にもあってありとあらゆる記述ができるという人間は、
世界でも片手ぐらいしかいないんじゃないか?
実際使うときは、そんな必要はまったく無いのだが。
100%知ってると……あれだよ、TVチャンピオンC++選手権に出られる。
とりあえず何の疑問も持たずに
>>188 見たいなソース貼っちゃうようではまずい。
>>294
CPenがデストラクタ処理あるはずなのに
この記述には意味があるのか?
と疑問を持ったから貼った・・・とは解釈できんのか?
>>294
そーとーしつこいな
質問したい者だけが質問し
答えたい者だけが答える
これで好かろう
あとはガタガタ言うな
>>295
まずいのはそこではなく
new してないのに delete してるところだろ
しかも Delete になってるし。
C++の基本が全然理解できてない。
>>296
>>291 が聞きたがってるんでしょうがない
300名無しさん@そうだ選挙に行こう:04/07/11 17:24
>>298
#define かも知れんぞ
301名無しさん@そうだ選挙に行こう:04/07/11 17:26
僅かでもMFCを外れると興奮する人がいるスレはここですか?
いえ根本的な理解が足りないと言われて
粘着になってしまった人がいるスレです。
303名無しさん@そうだ選挙に行こう:04/07/11 17:46
>>302
と、いうことにしたいのですね :-P
>>301-302
おまえらガキだな・・・いつまでやってんだよ
いい加減、よそでやろうね
>>298
そうそう、MFCとかCPenとかの理解じゃなくて、
先ず、自動変数に関して理解していないってところから
議論を始めなきゃならんということでしょ。
つまり、C++わかっちゃいねーなと...orz
306名無しさん@そうだ選挙に行こう:04/07/11 18:41
まさか、スタックとかヒープとか知らないでプログラムとか組んでるとか?
末恐ろしいな…ガクブル
>>304
こんなのスルーできないようでは
アンタもガキですから!残念!
308名無しさん@そうだ選挙に行こう:04/07/11 18:55
ここ見てる暇あったら選挙行って来い。
まだ1時間はあるぞ。
309名無しさん@そうだ選挙に行こう:04/07/11 19:06
投票したらその場で.NET2003とか当たるようにすれば
もっと投票率上がるんじゃないか。
一度に10回ぐらい投票してやってもいいぜ。
ここ最近ageてるやつ妙にバカっぽいな。
というか、自己顕示欲が強いんだろ。

みんな、俺に注目してくれぇぇぇぇぇ!!!!!!
>>298
>>193の書き込みによると「Delete myPen;」は本に書いてあったらしいね。
本当に書いてあったのならその本も晒し者だな。
>>307
おまえも(r
314デフォルトの名無しさん:04/07/11 23:23
>>305
まったくだよ、C++を全然理解してない奴が
MFCに手を出すもんじゃないよな...orz
>>314
そのうちnewってコンストラクタで勝手にやってくれないの?
とか言い出すよ。きっと
>>314
また上級者気取りのレス。キモすぎ。
MFCを使える程度にC++を理解してることがそんなに上級者なのか?
本当にそう思ってるなら本気でC++の入門書読んでからここに参加した方がいいよ。
318デフォルトの名無しさん:04/07/12 00:27
>>317
んだ
と言うわけで、次のご相談どうぞ
320デフォルトの名無しさん:04/07/12 00:41
自称上級者がウザイのですが、どうすればいいですか?
次の方どうぞ

だからMFC使える程度の理解なら上級者じゃなくていいっつの。
入門書でいいっつってんだろ。とにかく読んでから来いや。
自称上級者と、自称初心者は仲良く入門書を読んでくること
喧嘩しちゃだめですよ
相手を上級者と言うことが至高の煽りだと思っている人がいるようです。
325258:04/07/12 10:21
悪い流れの中に落としちゃったみたいなので引っ越すよ・・・
326デフォルトの名無しさん:04/07/12 11:33
>>324
だよな・・・煽りまでも幼稚だよな・・・アホとしか言い様ないよな..orz

あと、「自称上級者」って何だよw
上級者自称してる奴なんていつでてきたよ?w
>>326
あんたみたいなのがいると、燃料の落とし甲斐があるよ
今日はC++の本、何ページまで読んだの?
ここに来るのは本を全部読んで、
MFCのヘルプも見れる環境にしてからにしたほうが良いと思うよ。
でないと、話にならないですから。
取り敢えず、new delete の章はじっくり見た方が良さそうだ
自分の恥ずかしさに気が付くと思うよ
っていうか、質問するときの最低限のマナーとして、
最低条件とか決めてテンプレにでも載せたらいいんじゃないでしょうか。
たとえば、
・C++の基礎は勉強済み。
・MFCのヘルプを見れる環境を持っている。
は必要ではないでしょうか。
何でもかんでも教えて君は、本人の怠慢だと思いますので。
>>329
コンストラクタ、デストラクタ、クラスの関数への参照渡しと
そうでないときの引数の違いとか、最初に勉強したとき理解できなくて
そのままってこともありますものね。
ある程度経ってまた勉強しなおすと、目からうろこってことも多いです。
いまだにMFCは使ってるけどCStringを使わず、
char*ばかり多用している人もいるんですよね。
LPCSTRの存在の本質を本当にわかっている人は
いったいどれだけいるのだろうかと思います。
STL使ってない人って結構多いよね。
初めて使ったときは、こんな便利なもの!!って感動したけど。
CObList使う以前に<list>で間に合っちゃうなんてことも
結構あるんですけどね。
334デフォルトの名無しさん:04/07/12 18:35
>>330

>・C++の基礎は勉強済み。

初歩ではなく基礎ならば
これを守れる香具師は皆無と思われ

基礎: ISO/IEC14882:2003
応用: MFC


>・MFCのヘルプを見れる環境を持っている。

ここにアクセスできる以上、
全員がクリアしていることが自明
(MSDNオンライン)
>>334
携帯でアクセスしてるなんてつわものもいるみたいですよw
ヘルプ見れないぞゴルァって切れてたしw
まあ、CやC++の質問はそれぞれの専用スレがある訳だし
最低限MSDNを調べ、それでも解決できない様であれば、
このスレに質問しに来なさい。
その時は、快く面倒見ようじゃないか。
>>335
それは明らかに釣りだろ?
338デフォルトの名無しさん:04/07/12 18:50
>>335
死ね自称上級者
339デフォルトの名無しさん:04/07/12 18:56
>>333
そりゃ、STL も RTTI も MFC より後でできたやつだからね
>>338
あなたでしたかw
こんなに簡単に釣(ry
まぁ俺が学習した順番は
MFC → API → C++ → C
な訳だが。
自らの不勉強さを恥にも思わず、ただ切れるだけの人って、
ものすごく人生で損しているように感じます。
考え方をちょっと方向転換すれば、
とても幸せになれるのになって思います。
ぶちギレたら誰も教えてくれなくなりますものね。
世渡り上手も自分を向上させるコツのひとつです。
多分>>338はまだまだ人生経験、社会勉強が足りないんだと思われる。
サラリーマンなら参考書ぐらい言えば買ってくれるものです。
会社があなたを認めているのならですけど...orz
>>342
おまえの中では不勉強の奴=切れてる奴
という図式が成り立ってるのか?
それはちょっと短絡すぎるぞ。
面白半分で煽り入れている奴の方が多いんじゃないかな?
おまえ以外の人はとっくに気がついている訳だが・・・
345デフォルトの名無しさん:04/07/12 19:39
>>342
一日の長ってやつを定量的に認識できない香具師はまだまだ青いね
346デフォルトの名無しさん:04/07/12 20:05
>>342
俺には両方切れている様に見えたんだが、
何故勉強不足の者だけが切れているかの様な
結論に至ったのかお聞かせ願いたい
>>346
そのくらい自分でぐぐって調べろ
>>347
おいおい、なんだそりゃ?
>>348
上級者なら他人に聞くな。自分で調べろ。
不勉強=問答無用でアホ(C++不適合)
他称上級者=煽りに乗せられて荒らしに油を注ぎ、アホ(2ch不適合)
荒らし=なんと言うか、うんこ
静観者=正解
俺=まあ、アホ

と言うわけで、MFCの相談の方どうぞ



351デフォルトの名無しさん:04/07/12 21:26
静観者=アホ
見ない人 or 見るのをやめた人 = 正解
352デフォルトの名無しさん:04/07/12 21:28
>>350
これ、どうやって使うんですか?
http://www.family.co.jp/rel/r_010614.html
353デフォルトの名無しさん:04/07/12 21:29
>>352
塗る
自らの努力をまったくせず、ただの教えて君質問は
わかる人にはわかるよ。それってスルー。
不幸にも釣られちゃう人が多いのも事実みたいだけど。
>>354
なんだ?まだ興奮冷めやらないのか?
>>342
俺には両方切れている様に見えたんだが、
何故勉強不足の者だけが切れているかの様な
結論に至ったのかお聞かせ願いたい


>>354
不幸な人ですね
スルーできない香具師、大杉...orz
>>356
いい質問だが、それはあなたの国語力に依存するので
なんと言っていいのやら。
MFC・C++云々じゃなくて、スルーを覚えてから2chに来よう
>>358
>>360
お前もスルー覚えてこいよ。
不勉強=荒らし= >>188 =アホ
そこでBCBですよ奥さん
うんこ
>>363
BCB=うんこ

>>364
うんこ
>>363
BCBでMFC使おうとしてヘルプ見れないとか
言い出す奴いるからうんこ。
367質問です:04/07/13 01:45
void hoge(void)
{
  CPen myPen;


  myPen.DeleteObject(); ←これいるんですか?
  Delete myPen;      ←これもいるんですか?
}

CPenってスコープ外れる時に、この辺やってくれないの?
おまえら早く寝なさいっ!
オレモナー
だからもう、何もかも自分でググれよ、脳無し
>>367
だからコンパイルが通らない(ry
>>370
(ry の意味がねーだろ!!w
ここは本当によく釣れるインターネットですね
暇人ばっかり
374デフォルトの名無しさん:04/07/13 07:42
見苦しいぞオッサン
こんな事してばっかりいるから
いつまでたってもBCBに追いつけないんだよ…
とマジレスしてみる
なんで急に釣りが増えたんだ
だって入れ食いなんだもん
厨房丸出しだね。どっちも。
暑さで逝っちゃいそうだからね...orz
っていうか、クーラー無しでがんばってる香具師いる?
自分の部屋にはクーラーありませんが。
ちょっと意味が違うorz
>>332
やっぱりCString便利だよね?
CString::LoadString()は重宝しています。
自作関数の引数にchar*となっているところをLPCSTRに書き換えてみろ。
CStringも渡せるぞ。すごいだろ。
char*とLPCSTRは違うけどな。
違うから意味がある。
LPCTSTR
389デフォルトの名無しさん:04/07/14 09:13
ピクチャーボックスにファイルから選らんだビットマップを貼り付けたいのですが
どのようにすればいいのでしょうか?
えららんだ
>>390
糞レスはいりません。
(LPCSTR)(LPCTSTR)cstring; ってできるんだよね
>>392
出来るけど、UNICODEビルドではどうなっても知らないよ。
キャストは万能とか思ってる人多いなぁ
395デフォルトの名無しさん:04/07/14 22:12
ヘ_ヘ
ミ・・ ミ ということにしたいのですね?
( ° )〜
396デフォルトの名無しさん:04/07/14 23:37
質問です。

MFCを使わない標準DLLがあります。で、その中で機能追加のためスタティックライブラリを使おうとしてるんだが、
そのスタティックライブラリがMFCを使っています。
とりあえずヘッダはやりくりしてどうにかコンパイルはできましたが、リンク時に「DllMainは既に・・・」というエラーがでます。

MFC自体が持ってるDllMain?と標準DLLが持っているDllMainが衝突したりといった問題などあるように見えますが、
そもそもこういうことって出来ないんでしょうか?

1行目あたりから意味がわからん
>>397 それは君の読解力に問題ありかと
>>397
しつもんです。
400282:04/07/15 00:25
>>395
ここんとこ急にフェミ猫のコピペが各スレで増殖し出したな。
俺に触発されたのか? :-P
>>396
そのスタティックライブラリをDLL化してそれを呼び出す
という逃げ方もあります。
>>396
スタティックライブラリの出来が悪くて、なぜかその中にDllMain()という関数があるんじゃないの (w
403デフォルトの名無しさん:04/07/15 02:12
Document/View スタイルじゃないやり方(CFrameWnd + CWinApp)で、CWinAppにOnKeyDown等を加えてもメッセージが来ないんですが何故でしょうか?
Document/View スタイルだと動くんですが・・・。
コマンドルーティング
405396:04/07/15 03:02
>>401
まぁそれが妥当かとは思うんですが、とりあえずファイル増やしたくないなぁと。

>>402
ん、、てことは普通はできるってことですかね?
まぁDllMain以外にもスレッドとかソケットあたりが変に混ざりそうでいやなんだけど、もうちょいもがいてみます。
406403:04/07/15 08:24
>>404
サンクス。コマンドールーティング参考になりました。
しかし、間抜けでした。てっきりフレームワークで生成されるCChildViewクラスってAbout dialogのことだと思い込んでいて無視していたんですが、実はこれが入力メッセージを受け取る肝心なクラスだったんですね。
あーやだなこんな調子で今更MFCを覚えるの鬱。.NETって、あくまでも中間言語インタープリタだから、x86ネイティブコードという観点からいくとMFCの代替になりませんよね?
407デフォルトの名無しさん:04/07/15 10:41
呼び出したメニューのIDを引数で渡してくれるメニュー用COMMAND関数を
作るにはどうしたらいいんでしょうか?
ON_COMMAND_RANGE
>>408
うぉー!ありがとう。解決しました。
410デフォルトの名無しさん:04/07/15 19:26
最近やっとMDIの勉強始めたばっかで初心者的質問なのだが、、

今MDIの画像ビューア作ってるけど画像を選択して子ウィンドウが表示されたときに
クライアントの大きさを画像サイズといっしょにしたい。
で自分なりに調べたが
CMyDocument::OnNewDocument

CMyView::OnInitialUpdate

CChildFrame::ActivateFrame
画像データはOnNewDocumentで取得。
最後のフレームのところでSetWindowPlacementか使ってフレームの大きさを
決めたいわけだ。

で、、どうやったらフレームからドキュメントみえるんだ? ビューにも画像データのポインタ
渡してるからビューでもいいけど、、。

誰か助けて_| ̄|○
411410:04/07/15 19:28
間違えた、、、
×CMyDocument::OnNewDocument

○CMyDocument::OnOpenDocument
412410:04/07/15 21:17
連書きすまん、、自己解決
CFrameWnd::GetActiveDocumentなるまんまの関数があった、、、。
もっとヘルプみます_| ̄|○
ヘルプを見ないで質問しちゃう奴は
C++を理解してないも同然
また出たよ。自称上級者が・・・ (;´Д`)
解答できない質問されるのがよほど悔しいのかね
じしょう 【自称】

(名)
(1)実体はどうあれ、自らこうだと称すこと。
>>416
まさに、ピッタシデナイノ
で、誰か自称したのか?
>>418
明言しなくても、言外に表れている。
それくらい解れよ。
>>419
自称知ったか君
荒らそうと必死だな
.aviをフォームの背景として再生するために
 CAnimateCtrl m_animate;
 //...
 m_animate.SetWindowPos(HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
 m_ctrl.BringWindowToTop();
という風にCAnimateCtrlのオブジェクトを一番下に、その他のコントロールを上の方に
持っていこうとしてるんだけど、直ぐにアニメーションが最前面になってしまいます。

何かうまい解決策はないもんでしょうか?
>>419
だからそれ、自分が上級者だと勘違いしているだけなんだから自称って言わないってば。
424731:04/07/16 08:16
(Win32スレに誤爆したのでこちらに書き込みます。)
MFCフレームワークで、CWinApp, CMainFrm, CChildView という派生クラスを使う事を強要されますけど、どこにどういう機能を置けばいいのかいまいちピントきません。
リアルタイムでレンダリングするスクリーン、キー入力、パラメータ入力用のダイアログがあるので,
CWinApp -> OnIdle() レンダラーアップデート, CChildViewへの描画。
CChildView -> OnKeyUp(), OnMouseMove()等
CDialog -> CMainFrm::hoge->SendMessage(...) で入力パラメータを送る。
CMainFrm -> SendMessage(...)でクラス間のデータ受け渡し。
っていう感じでやっているんですが、クラスが保持している別クラスインスタンスへのポインタがprotectedになっていたりするので、SendMessage()のバケツリレーみたいになったりして、2度手間3度手間が多くて疲れます。
「プロはこうやる」っていうのがあったら教えてください。
>>424
CDocumentが出てきてないようだが、使ってないの?
>>424
プロはめんどくさいのでウィザードの吐いたコードいじって使います
プロはめんどくさいのでそもそもMFCを使いません
プロはSDKだけでプログラミングするなんて
非効率なことはしません。特別な事情がない限り。
ネタにマジレスすんな
430本田:04/07/17 16:25
>「プロはこうやる」っていうのがあったら教えてください。

図書館で、
「MFCによるWindows95プログラミング」か「MFCによるWindowsプログラミング」
を借りて読んでください。
431デフォルトの名無しさん:04/07/17 17:52
SDKだけでも、
こういうのを使えば素早く開発できます。


APPのコードをライブラリ化。
長文ソース簡略化で作業時間、効率を削減。

基本的なWin32システムを支援します。

最強のACライブラリー
ttp://www.geocities.jp/osoftjp
ネタなので放置な。
こういうことをMSがやったものがMFC
>>433
こういうこと、って?
435デフォルトの名無しさん:04/07/17 18:36
MFCでお勧めの本ってある?
効率って削減したらダメじゃないか?
using namespace std; ・・・(1)

なんてことをすると、MFCのテンプレートのCArrayなどを使うときに問題がでますが、
using namespace std; する前の状態に戻すときは std の部分になんと書けばいいですか?
439デフォルトの名無しさん:04/07/17 20:30
CTabCtrlについて教えてください。

VisualStudioにあるような平らなタブを作成したくて、CTabCtrlを継承してクラスを作成
SubClass化してDrawItemをオーバライドしたのですが、
DrawItem内では、TabCtrlの枠の描画はOS?依存らしく自前で描画が出来きないようです。

このようなタブをMFCを利用して作りたいときはどの様にすれば、よろしいのでしょうか?
ご教授いただきたく思います。

>>439
codeguruやcodeprojectに行けばあったと思う。
探してみて。
441デフォルトの名無しさん:04/07/18 00:08
>>440
codeprojectにありました。
会員登録? して試してみたいとおもいます。
どうもありがとうございました。
>>436
この本初めてみたけどいいの?
USサイトではいいみたいだけど。。。
MFCはもうだめぽ
444デフォルトの名無しさん:04/07/22 16:29
質問です
MFCを使用して、MSCommで通信を行っているのですがどうにも
解決できない問題に遭遇しました
当初Windows2000を使用していたのですが、WindowsXPに
もってきて動かすと受信がうまく出来ません。
受信部にイベントOnCommを使用しているのですが、2000だと問題なく受け
とれる受信イベントがXPでは受け取れません
RThreshなどはソフトで設定していて、値も正常に入っています
ポートオープンで失敗していることもありません
どなたか、同様の現象がでて、対応された方いらっしゃいますか?
開発環境は VC6+SP6です
日本人の書籍とアメリカ人の書籍を読み比べた結果、導き出された結論。

Windowsプログラミングを知り尽くしているのがアメリカ人。
Windowsプログラミングを知ったかしているのが日本人。

マイクロソフトの仕様変更を先読みしたプログラムを書くのがアメリカ人。
マイクロソフトが仕様変更したときに「仕様変えんな ゲイツ氏ね!」と泣くのが日本人。

MFCの不具合に文句を言い、不具合を修正して使うのがアメリカ人。
MFCの不具合に文句を言うだけで何も出来ないのが日本人。

MFCを一から教える書籍を売るのがアメリカ人。
Appウィザードで作成したテンプレートにコントロールを追加するだけの子供騙し書籍を売るのが日本人。

オリジナリティに溢れたMFCの書籍を売るのがアメリカ人。
他人からパクったネタを適当に並べただけの書籍を売るのが日本人。


やっぱ 日本人の書籍だけでは不十分。
どれもこれも同じようなものばっかりなんだもん(藁
↑みたいなこと必死に書くから日本人は馬鹿にされるんだな
447デフォルトの名無しさん:04/07/22 18:17
>>445
著者の一人だが褒められて嬉しい
>>445
> MFCを一から教える書籍を売るのがアメリカ人。
> Appウィザードで作成したテンプレートにコントロールを追加するだけの子供騙し書籍を売るのが日本人。

入門用としてはやったことがすぐカタチになる後者の方がおすすめ
449デフォルトの名無しさん:04/07/22 18:51
>>448
神頼み的な思想を植えつけない細心の注意が必要
450デフォルトの名無しさん:04/07/22 18:54
CFrameWnd すら使うかどうか
習得パス設計との緊密なマッチングで決めること
TABオーダーでバグられた位でグラつく知識はダメ
MFCはダメなライブラリの見本
452デフォルトの名無しさん:04/07/22 19:26
>MFCの不具合に文句を言い、不具合を修正して使うのがアメリカ人。

文句言うより他あたるのがアメ公
>>444
素直にAPIでやって下さい。
アメリカ人はコレ使うと決めたら他の選択肢捨てるよね
俺アメリカ人だけど、MFC自体捨てたよ
今はBCBで、バリバリ快調っす
456デフォルトの名無しさん:04/07/22 21:41
面接で渋られたときのゴネ方が内容的にまるで違う
>>456
どんなの?
日本人:イオナズン
アメリカ人:ダディクール
>>445
アメリカ人向けの糞本は翻訳されないだけだろ
そんなのに著作料と翻訳料払うぐらいなら日本人に直接書かせる罠
原書読めば笑えるのも呆れかえるのも、いっぱいある。
461デフォルトの名無しさん:04/07/25 21:38
VC.NET2003(MFC)の質問です。
ダイアログを作る時にエディットボックスなどと関連付けするメンバ変数を作ろうとしているのですが、
うちの環境ではなぜかメンバ変数追加ウィザードが動作しません。
手動でメンバ変数を書いた場合にエディットボックスどうやって関連付けすればいいのでしょうか?
>>461
アイテムをダブルクリックして駄目なら駄目なんだろ。
>>461
ダブルクリックするとエディタが開いてチェンジイベントの記述になります。
VCがおかしい→再インスコ
ウィザードがおかしい→テスト用プロジェクト作ってみる
手動がいい→サンプルをまねる
CList の入れ子ってできないでしょうか.
CList< CList< int, int >, CList< int, int > > みたいな.
VS.NET2003で新しいプロジェクト作成でMFCアプリケーションを作成したら、
ダイアログバーも生成されたので、リソースエディタでエディットコントロールを2つ
追加してコンパイルすると、ダイアログバー上にエディットコントロールが2つあって、
文字の入力等は問題なく出来るのですが、TABキーでフォーカスの移動をしようと
しても、1つ目のエディットコントロールにしか移動しません。

リソースのタブストップには両方ともチェックが入っているのですが、どうすれば
フォーカス移動が出来るようになるのでしょう?
>>466
タブオーダーは設定したのか?
468466:04/07/28 17:17
>>467
設定してもだめ。

というか、設定してなくても、普通のダイアログならリソースエディタで貼り付けた
順に初期設定されてるから、意図したとおりにならずとも何がしかの順で移動して
くれると思うのですが、TABキーでは頑なに1つめのエディットコントロールから
離れようとしません。

クリックしてやるとちゃんと2つ目のエディットコントロールにフォーカス移動するん
ですが。

なんか、追加のコードがいるんでしょうか?
>なんか、追加のコードがいるんでしょうか?

普通はいらない。

というか、普通にウィザードでMFCアプリ作ってもダイアログバーなんか付いてこないと思うんだが。
470466:04/07/28 19:31
>>469
プロジェクト作成時にReBarを使う設定にすると付いてくるようです。

んで、解決しました。ダイアログバーに割り当てられてるダイアログリソースの
ControlプロパティがデフォルトではFalseになっていたのでした。

プロジェクト生成時にこれくらいはTrueにしておいてほしかった・・・orz
あー、そういうのがあるのか。2003はインストールしただけでほとんど使っていないので気付かなかった。
それにしても、2003のリソースエディタのプロパティは使いにくいなあ。
無理矢理ダイアログバー作ろうといじってて、なかなかダイアログスタイル設定できずに苦労した。
何だよ「子」って
472デフォルトの名無しさん:04/07/29 00:00
スレが汚れるので.NETの話題はお控えください。
473デフォルトの名無しさん:04/07/29 01:29
>>472
スレのレベルが下がるので、VisualStudio.NETと.NET Frameworkを
混同している人はカキコを控えて下さい。
VC++.NETはMFC的には機能ダウンしてるしな
475デフォルトの名無しさん:04/07/29 08:33
>>474
ウッソー?
機能アップしてるだろ。
例えばCStringはstd::basic_stringのようにテンプレートクラス化されて
使いやすくなってると思う。
476474:04/07/29 08:52
>>475
書き方が悪かった。ライブラリじゃなくてIDEまわりね。
MFCライブラリはもろもろ良くなってるね
CStringはウニとS-JIS混在できるしね
IDEは.NETと共通化したから非共通部分が落とされたね
478デフォルトの名無しさん:04/07/30 17:48
先輩にMFCをするより、SDKでガイガリやったほうがいいのができるっていわれたんだが、本当?
いいのができるかどうかは関係ない。
APIだけで作っても駄目な物は駄目
その先輩はMFC使えない、C++わからないだけってパターンが多い。
481デフォルトの名無しさん:04/07/30 19:39
MFCって何から勉強すればいいんだ?
自分が必要とするところから。
習うより慣れろ。
484デフォルトの名無しさん:04/07/31 18:25
CListView でレボートビューにした場合、ラベルを改行して
複数行で表示したいのですが、可能でしょうか。
Owner Drawでやるしかないんじゃない?
マルチします。すみません。
C++BuilderXでGUIアプリを作成する場合には
MFCは使えるのでしょうか?
また、フォームエディタは使用できるのでしょうか?
487デフォルトの名無しさん:04/07/31 22:30
CListView で Owner Draw を使うのにはどうすればいいのでしょうか。
教えて君で申し訳ないです。
調べても調べがつかなかったもので。。
>>487
CodeGuruに行くとそういうサンプルが少なくとも二つは見つかるよ。
#つーか、見つけた。
OwnerDrawじゃなくてCustomDrawの手法ならGoogleで国内サイトを探すだけでいろいろ出てくると思う。
今から始めるならMFCはやめて.NETにしたほうがいい?
490デフォルトの名無しさん:04/07/31 23:35
>>488
ありがとうございます。
とりあえず、CodeGuruから調べてみたいと思います。
俺はCodeProjectの方が好きだな・・・
CodeGuruはリニューアルしてから見づらいな・・・
>>489
「今から始める」という意味が「学習を始める」だったらMFCで良い。
「長大なプロジェクトを起こす」という意味なら.netを考慮する価値はあるかも。

つまりちょこちょこ作って今すぐ広い環境で動かすならMFCだな。
>>493
あー。まだ厨房なんで将来的なことも考えていただければ幸いです。
>>494
んじゃまず、ハードの基礎やってから、アセンブラ逝け。1年たったらまた恋。
漏れは、SDK だけでアプリ作れない香具師の MFC アプリは信用しないなあ。

……「アセンブリが解らない香具師のアプリは信用しない」と同じレベルかゴメンorz
何でもそうだが、知ってるやつ見えてるやつから見ると、知らないやつ見えてないやつは、危なっかしく感じる。
知らないやつ見ててないやつ自身は、なんの恐れも不安もない。
えーと、分裂症の方でしょうか?
499デフォルトの名無しさん:04/08/01 04:01
SDKやってMFCすれば〜
MFCだかVBだか知らないんだけど、例えば某USB機器に付属してるソフト。
起動してすかさず他アプリケーションを前面に持って来て、
そのソフトが完全に起動し終わったのを確認してウィンドウをアクティブにすると
フッと、ウィンドウ上のボタンのフォーカスが切り替わる。
細かい事だけど、何やってんだよ (;´Д`) 怖いよ
レベルが低くて本当にこれから始めるっていうならなおさら、あんまり先のことは
考えずに、今できることをやって経験を積んでおくことを薦める。先々どうするかは
自分で経験して判断できるようになってから決めればよい。何もできないうちに
後のことを言っても始まらないからね。

現在一般に出回ってるシステム環境や、ツール、学習面での文書のこと考えたら
いきなり.netはやりづらいと思う。どうせ最初は小さいものしか作れないんだし、
何かしら使える機能のあるものを気軽に作って、プログラムすることの手順に慣れ
るのが先だろう。
502489:04/08/01 16:59
一応Delphiとかはいろんなページ見ながらやってたんだけど
他の言語に移行したくなったんで、.NETかMFCがいいかなーと思ったたけです。
別にJavaやSDKでもいいんですが、アセンブラは必要なんでしょうか?
そんな「なんとなく」が理由なら自分で好きなのやれ。
504デフォルトの名無しさん:04/08/01 18:29
>>502
必要って何のために?

仕事で必要かどうかは内容次第で、
具体的な就職先と配属先が決まらないと何とも言いようがない
けど、そんな理由に引きずられるだけな若手は「うちへ欲しい」タイプじゃない
泥縄方式のおんぶに抱っこで何ができるか甚だ疑問だからだ

言語であろうとデバイスあろうと、
特定のブツに対するマニュアル的な知識は泥縄でも徹底的ならそれでいい
もっと根本的なことで、こういう分野を切り開いていくことに対して
自発的な意思で行動しているか否かが肝心要の核心だ

で、アセンブラの話に戻ろう
アセンブラやってみたいか? 意味ねえと思うか?

おまえが答えるしかないことだ
505489:04/08/01 20:17
>>504
アセンブラはやってみたくないけど、意味はあるとおもう。
既存の高級言語を使う場面とアセンブラを使う場面はどう違うのか説明してくれ。
506デフォルトの名無しさん:04/08/01 20:46
>>505
特定のCPUの、特有の機能を使うとき
例: 特権命令

コードサイズまたは実行速度に定量的な条件があるとき
例: PIC
507デフォルトの名無しさん:04/08/01 20:48
>>505
続き

既にアセンブラベースで進行中のプロジェクト
例: (軍機のため言えません)
最初にDelphiやると他のものが使えなくなってしまう。
そういう意味では最初に学ぶのはDelphi以外が良いと言うことになるのかも知れない。
>>502
> 一応Delphiとかは

「とか」ってなんだよ・・・
なんかこういう書きぶり続くとどうでも好きにすればとしか言いようないな
普通にCかC++から初め野菜って事で
511デフォルトの名無しさん:04/08/01 22:05
>>508は典型的なマニュアル頭な人に多い症例
ここMFCのスレなのにDelphiの話題ばっかりで大丈夫?
他のスレで同じことするとスレ違いとかうるさく言われるのにね。
513デフォルトの名無しさん:04/08/01 22:17
>>512
代理発言はしてやらない
今更言語談義が始まって呆れてる最中。
515デフォルトの名無しさん:04/08/01 22:24
>>505
>アセンブラはやってみたくないけど

賛成も反対もする筋合いにないからどっちとも言わないが、
はっきりした意思があるなら邪念は捨てろ
516デフォルトの名無しさん:04/08/01 22:26
卒業年次生にもなって何屋に【なる】のか決まってないなら
それはそれですることがあるはずだ
MFCなひとは、なんでDelphierや初心者言語話に、普通に答えてんの?
そこはスレが荒れるとこでしょ。やっぱMFCに愛着無いからかね。
単に楽をするためのライブラリィ程度しか考えていないよ、俺は
それと、暇つぶしにレスしているだけ
暇つぶしでスレ違いレスすんなタコ
Cスレで聞こうと思ったのでつが荒れてたので
こちらでおながいします。
MFCを使っているとoperator newをオーバーロード
して、デバッグのときにはメモリリークを検出してくれるので
助かっているのですが、MFCを使用しない場合は
みなさんどうしてますか?
自力でnewをオーバーロードしてるのでつか??
つーか、スレ違いな話題はスールしろよ!
522489:04/08/02 00:06
>>508
父親にCから始めろと言われ、本を買ってくれたのでCから始めました。

他スレとか見てるとMFCの雲行き怪しげなので.NETにしときます。
スレ違いな質問してすみませんでした。
523デフォルトの名無しさん:04/08/02 00:08
>>520
そんなギミックに頼るハメになる前に単体テストしとく
>>520
メモリリークを検出するソフトを使う
VC6とVC7の違いについて解説しているページはありませんか?
例えば、VC6のメモリウィンドウは、 VC7ではココにある…etc

最近学習を始めたのですが、VC6のMFC関連のHPを見ていると
どうもVC7と操作性?が違っていて、勉強が進みません。

大変お手数ですが、ご教授をお願いします。

>>524
どんなんあるんか教えろや
527デフォルトの名無しさん:04/08/02 02:27
>>525
これ俺も欲しい
BoundChecker
Purify
>>520
ここのことでつか?
ttp://mikata.curiocube.com/progtips/ch24_newhandler.html
MFC使わなくても…
530デフォルトの名無しさん:04/08/02 07:32
MFCのクラス(というかメソッド?)がスレッドセーフか否かはどこで調べれば良いでしょうか。
MSDNには特に記述が無いようですが…
>>530
LIBもDLLもシングルとマルチがある
(つまりマルチならクラス全てマルチ)
532デフォルトの名無しさん:04/08/02 11:16
MFCで作ったプログラムってMFCランタイムがないと
動かないんですか?
(つりではないです。お願いします)
>>532
スタティックリンクすれ
534532:04/08/02 11:40
>>533
ありがとうございました!
>スタティックリンクすれ

この一言でわかっちゃうってことは、釣りだろw
536デフォルトの名無しさん:04/08/02 17:53
VC++のコンパイルエラーなど出す「出力ウィンドウ」のように単純に
1行づつメッセージを出力するためにはどのような手法を使うのが一般的なのでしょうか?
>>536
リストコントロールとか
書き込み禁止のエディットコントロールとか
スクロールビューとか
538520:04/08/03 00:25
遅れますたm(__)m

>>523
単体テストでリークバグを検出したいのでつよw

>>524-528
やっぱ市販製品でつか...(マニーが...orz

>>529
うーんちょっと違いまつ。メモリ確保失敗というより
リークの検出をしたいでつ。。。


みなさんどうもありがとうございますた。
とりあえず慎重にPGして、ひと山あててBoundsChecker
買うですw
539デフォルトの名無しさん:04/08/03 01:09
COleDataSource::DoDragDrop() を呼ぶ前に CacheGlobalData() を
2種類のデータ形式で呼び出すと、最初はうまく動作するんですが
一定時間後に E_OUTOFMEMORY で COleDataObject::GetGlobalData() に
失敗するようになります。GetGlobalData() を2度呼び出すのは
間違ってるでしょうか?
540530:04/08/03 01:21
>>531
ありがとうございます。マルチスレッド版DLLならばスレッドセーフ、ということですね。
http://66.102.7.104/search?q=cache:UuuMyILAJXsJ:www.sabamiso.net/yoggy/tdiary/%3Fdate%3D20030822+cstring+%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E3%82%BB%E3%83%BC%E3%83%95&hl=ja&lr=lang_ja
など、少し調べた限りではMFCってスレッドセーフじゃない、みたいに書かれているページがいくつかありましたので…

(ちなみに使用したかったのはCFileでした。)
ありがとうございました。
>>520
んなもん買わないでも_CrtSetDbgFlag使えばいいんじゃねーの?
ちょっとよろしいですか?
あるディレクトリ以下のファイル名一覧を取得したいんですが、サンプルをコピーしてみて、できたのですが。
日本語のファイル名だけ取得できませんでした・・・。
CFileFindって日本語は駄目なんでしょうか?
>>542
shiftJISのダメ文字が混じってるだけでは?
ttp://www.kent-web.com/pubc/jcode/
>>543
どうやらそのようでした。ありがとうございました!
545デフォルトの名無しさん:04/08/03 21:26
すみません。>>530-531あたりを見て思ったのですが、
マルチスレッドのDLLを使えばMFCだろうとCのstrtok関数だろうと全てスレッドセーフになり、
シングルのDLLを使う場合は、スレッドセーフであることが保証されていないので自分で同期取らないといけない、
という理解で良いのでしょうか?

私はてっきりマルチスレッドにするときは何が何でもマルチスレッドDLLを使って、
その上で、スレッドアンセーフなものは自分で同期をとるプログラミングをしなさい、
ということかと思っていました…
スレッドセーフなライブラリは、ちゃんと使えば、スレッドセーフになる。
どんな使い方でもスレッドセーフになるって、魔法のライブラリかよ。
「バグのないライブラリを使うと、バグのないプログラムになる」が否なのに同じ。
当然、スレッドセーフでないライブラリは、マルチスレッドで使うと危険。
ちゃんと同期をとって使っているつもりでも、内部処理や内部エリアで同期がとれていない。
>>545
MFCは同期クラス(CMutexとか)以外はスレッドセーフじゃなかった気がする。
心配ならソース見てみれば?
>>548 はスレッドセーフの言葉の意味自体すら知らない
For size and performance reasons, MFC objects are not thread-safe at the object level, only at the class level.
まとめ

シングルスレッド用ライブラリ スレッドセーフではない(マルチスレッドでは使用不可)
マルチスレッド用ライブラリ クラスレベルでスレッドセーフ(マルチスレッドで使用可)

同一オブジェクトに対する別スレッドからのアクセスの同期は
同期オブジェクトを使ってプログラマがとる
553デフォルトの名無しさん:04/08/04 12:21
CAsyncSocketを使用して書いていますが
どーやって接続先、自分のIPアドレスとポート番号を取得できますか?
>>552
同期クラスは例外で、オブジェクトレベルでスレッドセーフ。
>>552
MFCにシングルスレッド用ライブラリなど存在しない。
シングルスレッド用とマルチスレッド用(スレッドセーフ)があるのはCランタイムライブラリ。
>>553
IPだけでなくネームアドレスも使えるだろ?
ポートは使用するサービスによって決まるもんなんだからあらかじめ決めて動作
させるのがネットワーク・アプリ書くときの前提になると思うが。

何がしたいのか、キミのネットワークの仕組みについての理解度がどれくらいか
よく分からないね。
557デフォルトの名無しさん:04/08/04 19:39
>どーやって接続先、自分のIPアドレスとポート番号を取得できますか?

自分の方は GetSockName(), 先方は GetPeerName で取れます。
IPv6 対応はそれぞれ GetSockNameEx, GetPrrtNameEx。
指がずれたな(w
>>558
接骨院へ
MFC version 6.0 (still mfc42.dll) Visual C++ version 6.0 シングルスレッド用DLLあり
MFC version 7.0 (mfc70.dll) Visual C++ .NET なし
> 同期クラスは例外で、オブジェクトレベルでスレッドセーフ。
そりゃそうだろ(藁)
>>561
CEvent::SetEventの呼び出しを
Win32の生のクリティカルセクションで同期するバカが実在したりするから
世の中は面白い。
てか、同期クラスはただのラッパーだし
564デフォルトの名無しさん:04/08/06 15:12
質問です
CDialogBar上にボタンを配置して、それを条件に合わせて、
有効無効の変更を行いたいのですが、何処で行えば良いでしょうか?

MFCのソースを追っている限りでは、コマンドハンドラが存在すると常に有効に
なってしまうように見受けられますが・・・

>>564
コマンドマップに EnableCommandUI だかなんだかを追加するんじゃなかったかな。
>>564
CDialogBar m_wndDlgBar;
....
CButton *pBtn=(CButton *)SubclassDlgItem(IDC_BUTTON1, &m_wndDlgBar);
pBtn->EnableWindow(FALSE/TRUE);

では、だめかな?
567564:04/08/06 18:02
>>565
>>566
返答有難う御座います
CMainFrameのコマンドマップに
ON_UPDATE_COMMAND_UP( IDC_BTN_XXX, OnUpdateBtnXXX )
を手動で入れてそこで処理させることで実現できました
568デフォルトの名無しさん:04/08/06 22:54
>>562
すみません、解説お願いします。
(理解できてません…)
>>568
1.「MFCで提供されているクラス、同一のインスタンスへのアクセスはスレッドセーフではない」という話をどこかから聞きつける。
2.そうかそうか、と言って、以下のようなコードを書く

とあるスレッド
EnterCriticalSection( &csEvent1 );
event1.SetEvent(); // スレッドセーフじゃないのでクリティカルセクションで保護
LeaveCriticalSection( &csEvent1 );

別のスレッド
EnterCriticalSection( &csEvent1 );
HANDLE hEvent = (HANDLE)event1; // スレッドセーフじゃないのでクリティカルセクションで保護
LeaveCriticalSection( &csEvent1 );
WaitForSingleObject(, INFINITE);

実際にはもちろんこんな必要はない。
570デフォルトの名無しさん:04/08/07 01:09
MFCで全角スペースをトリミングしたいのですが
自分でロジック組む以外ないですかね?
ロジックとか言うほどのもんかよ
>>571
君の言うロジックの定義は?
定義とか言うほどのもんかよ
>>573 説明出来ないのか ( ´,_ゝ`)プッ・・
説明とか言うほどのもんかよ
説明とか言うほどのもんかよとか言えるほどもんかよ
ほどもんかよ
ぼぉくほどもん。ターケコープタァー!
579デフォルトの名無しさん:04/08/07 03:59
CWebBrowserクラスのNavigateで、自前のウィンドウに埋め込みウェブを表示させているのですが
そこのユーザーエージェントを制御したいのですがどうすればよいでしょうか?
教えてください
580579:04/08/07 04:43
Navigateに与える引数を工夫すれば実現できそうなのですが・・・
どなたかヒントください
581デフォルトの名無しさん:04/08/07 07:02
夏ですね
582570:04/08/07 11:51
夏厨が沢山、湧いてますなぁ〜。
無理っぽいので自分で作ります。
>>582
応援してます(はぁと
584570:04/08/07 14:18
>>583
応援されたので作って見ました。一応、動いてるけど、これでええのかな?

CString s = "うあ ああああ     ";
int c;
int last_pos = -1;
int pos;
int i = 0;

while (i < s.GetLength()) {
   pos = i;
   if (IsDBCSLeadByte(s[i])) {
      if (i == s.GetLength() - 1) {
         c = ' '; // DBCSの先頭バイトだけが最後に残っている場合
         i++;
      } else {
         c = ((BYTE)s[i] << 8) + (BYTE)s[i+1];
         i+=2;
      }
   } else {
      c = s[i];    
      i++;
   }
   if (_istspace(c) || c == 0x8140) { // ホワイトスペースか全角ブランク?
      if (last_pos == -1)
         last_pos = pos;
   } else {
      last_pos = -1;
   }
}
if (last_pos != -1)
   s = s.Left(last_pos);
585570:04/08/07 15:44
VBやC#もTrimは全角スペースをちゃんと処理してるのね。MFCだめぽ。 orz
日本語が変だ。orz
587デフォルトの名無しさん:04/08/08 00:16
ちょっとこのスレ元気ないし、とりあえず誰か579の問いに答えてやったらどうよ?
オレはわからないんから答えられないけどさ
579さんこんばんは。
出来ません
CWebBrowserではIEのコンポーネントを使っているので、
どうしても変更したければSDKベースで作り直して下さい。
答えろと言われても、これ見ろとしか言えないんだが。。。
http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/WebBrowser/WebBrowser.asp
591579:04/08/08 03:40
>>590
NavigateのPostDataで送るデータを工夫すれば
なんとかなりそうなのですが・・・
どこかに参考資料ないですかね?(できる限りは調べたのですが)

よろしくおねがいします


それくらい自分でなんとかしろ
> VBやC#もTrimは全角スペースをちゃんと処理してるのね。MFCだめぽ。 orz
VBやC#がどんな文字を扱っているか調べた後、CString::TrimXXXX 使いなさい。
>>593
先生! 海栗は嫌いでつ。
596579:04/08/08 14:41
>>594
いろいろ系統の似たサンプルはあるんですが、
User-Agentを制御するサンプルはありませんね
>>596
UrlMkSetSessionOption()
URLMON_OPTION_USERAGENT
今までありがとう、MFC
これからもよろしく、MFC
ATLのことも忘れないでください。
海栗って何?
海栗=うに=unix
603デフォルトの名無しさん:04/08/11 16:30
MFCのサンプルなどでCodeGuru等が有名ですが、
CodeGuruのソースのライセンスはどのようになっていますでしょうか?
サイトの方をみたのですが、それらしき文章がないように思い受けます。

スレ違いかもしれませんが、ご教授いただければとおもっております。
>>603
あれは作者がそれぞれいるだろ
雲丹
>>601
海栗=うに=海栗コード
607デフォルトの名無しさん:04/08/12 23:59
タスクバーに常駐するタイプのプログラム作ってます。
で質問なんですけど、xpのタスクバーは非アクティブのとき非表示に出来ますが
どうやって制御すればいいんでしょう?教えてください
少なくともMFCにはそんな機能は無いな
>>607
タスクバーに常駐させるだけで良いのでは?

タスクバーが非アクティブのとき非表示になっても何も困らないのでは?
610デフォルトの名無しさん:04/08/13 07:09
「アクティブでないインジケータを隠す」機能に対応できず、常に表示されてしまっている状態で困っています
>>610
つまり「アクティブのまま」なんじゃないの?
612271:04/08/16 02:11
MFC最高。MFCあったらC++なんかイラネ
>>612
保守乙
KFC最高。KFCあったらMacなんかイラネ
>>614
スレ違い乙
sage乙!
MFC乙!
lps乙CmdLine
X1-turbo乙
or乙
初心者なんですが、今MFCからC言語始めてるんですが、
APIを直接使わずにMFCだけでAPIでできることのすべてを代用することができますか?
>>621
寡聞にして「すべて」を代用できるかどうかは知らんが、
少なくともAPIの知識が必要になるメンバ関数は少なくない。
MFCを使いつつ、その先にはAPIがあることを念頭に入れておくのがいいと思う。
>>621
> 初心者なんですが、今MFCからC言語始めてるんですが、

「初心者」って言っても色々あるだろうが、そんなことできるんだろうか?
と素朴な疑問。

Cの基礎的な書式とC++のクラス概念くらい学んでからWindowsプログラミング
に移行した方が良いっていうか、そうじゃないと普通無理だろっていうか・・・。
とりあえず普通に質問に答えるなら、出来るか出来ないか。だろ?
なんで君たちはそこには言及しないんだい?

という訳でAPIでMFCの代わりは出来ますが、MFCでAPIの代わりは出来ません。
625621:04/08/18 11:06
>>622
全部自分でやるAPIのほうがわかりやすくて魅力的に見えてきました・・・。
この関数できたらAPIやってみようと思います。

>>623
プログラムの勉強を始めて今2週間くらいです。
C言語の文法はなんとなくわかったのですが、コードでCaptionを変える方法で躓きました。
MFCはAPIをラップしたものだから同じ機能があると思ってMFCメインにしようと思ったのですがVCが自動的にやってくれすぎて一向に構造がクリアにみえてきません・・・。
MessageBox関数と同じ機能をもつ関数を自分で作るにはどうすればいいんでしょうか。
と思っていたらなにやらできたようです。
MSDNわかりにくっ(;´Д`)

>>624
なるほど。
APIのほうが優れもののようなのでキリがついたらそっち勉強しようと思います。
つうか、「C言語」じゃねえよ。
APIの方が優れてるってのはどうかと思う。MFCはどっちかというとプログラマの手間を
省くための便利ライブラリなんだし、技術がないならむしろMFCを積極的に利用した方
が楽ができるし良い物を作れる。大抵のことはMFCでできてしまうんだし。
C -> API -> C++ > MFC でいいよ。
そしてMFCに嫌気が差して、APIに戻るか他のライブラリを探すようになる。
>>629
たしかにかなりの人がMFCに挫折するね
631デフォルトの名無しさん:04/08/18 23:18
なんで、MFCで挫折するんだろうね?
へんなマクロが嫌だ。
なんで、そんな動きするのか、わけがわからん。
ソースおっても、膨大すぎて意味分からん。
ウィザードでつくったものを、どう変更すりゃいいのか、意味不明。
C++とAPI知ってんのに、意味分からんマクロとか大杉。
すでにJavaに移行しました。Java分かりやすくてサイコー!!
MFCがいやで、C++ Builderに逝った人は多そうだな。
漏れは、WTLにいったよ。
2005ではMFCはどうなるんだろう〜?
それなりに枯れてて出来たソフトの質はいいんだけどね
覚えるのにWin32API以上に労力が必要なのは痛いね
俺MFCに依存しまくり・・・・・・・orz
全然 Foundation じゃないよね。
MFCに挫折して、Delphiに逝った趣味グラマです。Delphiだと、VCLのソースを見る事は少ないです。MFCのフレームワークは、いくつものクラスを連動して使う事を強いられます。VCLだと、あるコンポーネントだけ使うということが容易なのがいいです。
MFC の限界っていうより、C++ の限界にかなり制約を受けてると思う。
C++がもっとまともな仕様なら
MFCも使いやすいライブラリになっていただろうに。
最近Java厨がいろんなスレを荒らしてるね
MFCが肌に合わないならWTLでも試しては伺か?
ってか、厨房の言語の宣伝とかいらねぇ。

Del厨もJava厨も巣に帰れと(ry
そもそもMFCが肌に合わないとかいう話がスレ違いなんだが。
愚痴はマ板へ。
言語厨は厨用スレへ。
ここはどんな理由にせよMFCを使う人のためのスレ。
644デフォルトの名無しさん:04/08/19 06:02
亀ですがクラスレベルでスレッドセーフとは何を意味してますか?
オブジェクトレベルでスレッドセーフでないということは分ります。
同一インスタンスのものを複数のスレッドから触るときは排他がいるということですね。

クラスレベルでもスレッドセーフでないと言ったらどうなるのでしょう?
たとえばそれはあるクラスがstaticなメンバなどを使ってそのクラスの共有の
情報をもっていてそれが複数のスレッドから触られるとおかしくなるような設計である。
といったことですか?
dejavu?
>>644
そういうことだと思う
>>646
ありがとう!
648デフォルトの名無しさん:04/08/21 12:57
.NETにはあるようですが、MFCにてurlencodeをする方法がみつかりません。
良き方法があればご教授いただきたい。
やはり、コーディングするしかないのでしょうか?
649デフォルトの名無しさん:04/08/21 14:35
>>640
時間軸として逆じゃね?
ARM以前のC++の貧弱な表現力で作ったらあーなったのがMFCで、
ある意味、今のC++に至る過程でMFCは反面教師として機能していた。
今MFC作ったらCStringもstd::stringの派生だったかもしれないね。
CObArrayなんかもなかっただろうし。
>>650
無知登場
文句は受け付けません
ググレ
652650:04/08/21 18:17
>>651
文句は言わんが、あんたの言いたいことが判らん。
#だからこそ無知と言われているのだろうが。
>>651
ない爪を隠そうとしなくてもw
ほんとに無知なのに勘違い自信家だと調べもしないで偉そうにするのな(しかも自作自演)
655デフォルトの名無しさん:04/08/22 00:50
質問です。
MFCでアクセスのDBから検索するプログラムつくりました。
一緒にアクセス(のフォーマット)のDBを配布したいんですけど
ライセンスは大丈夫ですかね?
ダイアログバーの追加がうまくいきません

テンプレートを作って
CMainFrameでCDialogBarのオブジェクトを用意
コンストラクタでCreateを呼ぶ

でコンパイルは通りますが実行しようとすると
"0x77f5284"の命令が"0x00000000"のメモリを参照しました。
メモリが"written"になることはできませんでした。
と出て実効できません。

とりあえずダイアログバーを表示するだけの場合でも他に何かやらなければならないことがありますか?
>>656
CMainFrameのコンストラクタで、CMainFrameを親としてCDialogBarをCreateしてる
というオチだろうか?
658デフォルトの名無しさん:04/08/22 11:51
>>656
コンストラクタ内の auto 変数として CDialogBar オブジェクトを定義している
というオチだろうか?
660656:04/08/22 13:07
なんか勘違いしていました
コンストラクタではなくMainFrameのOnCreateでCreateを呼んでいます
CDialogBar オブジェクトはちゃんとCMainFrameクラスのメンバとして宣言していますし

>>659のサイトの通りにやっても同じエラーが出て実効できません
>>660
まず落ちている個所を特定しる。
>>650
UNICODEビルドの場合、std::stringの派生じゃ困ると思う。
>>662
std::basic_string<TCHAR>
>>663
そんなことみんな知ってるよ
665デフォルトの名無しさん:04/08/22 16:29
>>664
ちゃんと話がかみ合ってると俺は見ているが・・・
この後の展開次第かもな
いまのCStringってテンプレートだよね
VC++6.0はちがったとおもったけど
>>666
そそ、C6とC7で互換性がなくて怪しげなソースが引っ掛かり捲くり。
C6は兎も角、C4の頃はまともにテンプレートが使えない状態だったし。
VC++.NETつかえねー
>>668 ( ´,_ゝ`)プッ・・
670デフォルトの名無しさん:04/08/22 18:44
>>667
爆弾? 新型でてるのか??
C6とかC7って首都高みたいだな。
タイトルバーの文字列ってどう変更するんでしょうか?
実行途中で変えるとか起動時に変える
というのではなく、デフォルトを変えたいと言うか…
>>672
リソースストリングテーブルのIDR_MAINFRAMEに
・SDIなら先頭から\nまでの文字列
・MDIなら文字列そのもの
がタイトルバーに表示されるような気がした。
674672:04/08/23 00:26
>>673
変更できました
ソースを必死で検索してました…

ありがとうございました
>>674
大サービスついでに言っとく。
ttp://www.ne.jp/asahi/hishidama/home/tech/vcpp/caption.html
>>675
リンク先のページで、動的に変える場合は SetWindowText とか使えとなっているけど、
CFrameWnd::SetTitle で変えるか、GetTitle をオーバーライドして変えておかないと
不意に元に戻されて「MFCは陰で何やってるかわかんない・・・APIだけの方がラクぽ」
ってことになるので注意。
677デフォルトの名無しさん:04/08/25 03:02
TCHARと_TCHARのちがいってなんですか?
>>677
_TCHAR
 tchar.hが_UNICODE/_MBCSが定義されているかで切り替える。
TCHAR
 windows.h(の中のwinnt.h)がUNICODEが定義されているかで切り替える。LPCTSTRなどの仲間がいる。
質問させてください。

MFCでSDIのプログラムを作っています。
ビューの基本クラスをCTreeViewにしています。

フレームのメンバ関数から、ビューのメンバ関数を使えずにいます。

ビューの基本クラスがCViewの場合、ポインタをGetActiveViewで取得でき、
そこからメンバ関数を使えると思うのですが、
自分のプログラムの場合、CTreeViewなので、GetActiveViewの戻り値を
CTreeViewにキャストして関数を使ったところ、コンパイルは通るのですが、
アドレスがおかしいなどのエラーがでました。

どなたか知恵をかしてください。

>>679
まずはデバッガで GetAvtiveView が返してきたものを見てみたら?
>>679
そりゃCTreeViewにキャストしたらCTreeViewまでのメンバしか使えないでしょ。
682679:04/08/25 18:18
>>680
ぬるっす。
わかりました。OnCreateでやってたからだめなんですね。
Activeじゃないですものね。

ありがとうございました。
質問です。
エクスプローラの超簡易版みたいなものを作っています。
ツリービューでの表示と展開はできるようになったのですが、
たとえば展開しているフォルダに別アプリなどで新しいフォルダ
を作成した時、すぐにエクスプローラの表示に反映させるには
どうすれば良いでしょうか?

MFC6.0です、よろしくお願いします。
>>683
FindFirstChangeNotification
>>684
ありがとうございます!
>>678
回答ありがとうございます。MFCだと_TCHARがよさそうなので_TCHAR使います。
687デフォルトの名無しさん:04/08/26 12:12
MFCアプリのGUIスレッドでメッセージだけでなくCEvent等の
監視も行いたいと考えています。とりあえず考え付くのは
CWinThread::PumpMessage内のGetMessageの前、又は
OnIdleにてMsgWaitForMultipleObjectsを呼ぶ方法です。
CWinThread::RunのoverrideにしてもOnIdleのブロックに
しても余り一般的とは思えず躊躇してます。

似たような事をやったことある人がいれば意見をお願いします。
>>687
AfxBeginThread()でスレッドを作り、その中でシグナルイベント待ち。
ユーザーインターフェーススレッドに対して通知をしたい場合は、
WM_USER以上のユーザー定義メッセージを送信する。
受け取る側でもメッセージをユーザー定義メッセージ受信できるようにしておく。
689デフォルトの名無しさん:04/08/26 13:52
MFCベースアプリで実装されている機能についてプラグインにすることになったのですが
プラグインとはどうやって作ればいいのでしょうか?
>>689
susieプラグインで練習してみれば?
>>688
WM_USERじゃ拙いって。WM_APPを越える値がお勧め。

>>687
私のアプリでは、タイマーでイベント監視をした。
イベントの場合は落とし穴がいろいろあるから気をつけてや〜
692687:04/08/27 01:18
>>688
別スレッドだとスレッドスイッチが多くなるのが少し
気になります。

>>691
タイマーだと処理周期が頭打ちとなってしまいそうです。

基本的には688の方法でもパフォーマンス的にはOK
だと思いますが、MsgWaitForMultipleObjectsを使えば
監視するだけのスレッドを立ち上げずにすむかなぁと思い
質問しました。
693デフォルトの名無しさん:04/08/27 04:16
ActiveXをDllに組み込み、プラグインにしたいです。
メニューのプロジェクトへ追加、コンポーネントとコントロール・・を使って追加すると
ラッパクラスが出来ると思うのですがこれを使うことは出来るのでしょうか?

このクラスのインスタンスをDll側のグローバルに用意してもいざメソッドを呼ぶと
void AFX_CDECL CWnd::SetProperty(DISPID dwDispID, VARTYPE vtProp, ...)
{
  ASSERT(m_pCtrlSite != NULL); // not an OLE control (not yet, at least)

で引っかかってしまいます。
このクラスは使わずに自分でCreateInstanceするのですか?
>>692
処理速度が問題になるなら、イベントでの同期は検討しなおした方がよくない?
イベントはそれ自体早くないと思うし、発行側は処理側が処理したことを知りえないから
何らかの方法で返信しないといけなくなるしね。
>>687,692
質問者の分際で、評論家・審査員を気取ってんじゃねーよ、クソが
MFC使っときながらスレッド生成のコストを気にする人には困ったものだ。
単にスキル不足なだけちゃうんかと。
>>696
お前が偉そうに言うな
CStringのoperator=の戻り値にconsが付いてるのはなぜですか?
何故こんなこと思ったかというと

CString& func(CString& str)
{
CString tmp;
// 処理
return str = tmp;
}

returnのところで
error C2440: 'return' : 'const class CString' から 'class CString &' に変換することはできません。(新しい動作 ; ヘルプを参照)
変換で修飾子が失われます。
と出たからです。

std::string::operator=の戻り値にはconst付いてないのに、CStringに付いてる意図はなんでしょうか?
>>698
CStringが作られた頃のC++は代入演算子の結果がCと同じく右辺値だったからじゃない?
それでCStringもそれに合わせてoperator =()の戻り値を値渡しに……するとオーバーヘッドがかかるんでconst参照にした、って具合。
>>698
WTLって知ってる?マイクロソフトのサイトからダウソできるよ。
WTLのCStringだと、constじゃないよ。
WTL::CStringで解決。終了。
>>700
>意図はなんでしょうか?
って聞いてるんだから、その答えじゃ解決になってませんよっと。

ちなみに、手元にあるVer7.1(build 3340)ではconstで
最新のWTL7.5.4196.0 では付いてませんね。
702700:04/08/27 13:33
>>701
マジですか?よく調べずに書いてしまった。
当方、WTL7.5です。
>>698さん、そんなわけでスマソ。忘れて下さい。
703700:04/08/28 03:39
>>702
なりすましはやめてください。
早く夏休みが終わりますように…(ナムナム
705yara ◆SSLypP3Luo :04/08/29 18:06
VC2005か.NET Framework SDKにMFCある?
706デフォルトの名無しさん:04/08/29 19:01
CSplitterWndを用いて分割しCListView、CHtmlView等を貼り付けてブラウザを作っております。
http://www.codeproject.com/miscctrl/simplebrowserformfc.aspを参考にして
メモリ上のHTMLを書き込むと言うプログラムを作成いたしました。

このプログラムはCListView上のキーダウンのタイミングでCHtmlViewを書き換えるものです。
これは上手くいったのですが、問題が出てきてしまいました。

CHtmlViewをクリックしたあとに、CListView上にクリック等で戻りキーダウンすると
FocusがCHtmlViewに移動してしまうのです。
このときにメモリ上のHTMLファイルを書き込んでおりまます。

どうやら、HtmlViewをクリアする所あたりで問題が起きているようなのですが。
また、CHtmlViewをクリックを一度もしない場合においては問題なく動いております。

SetFocusでCListViewにセットし直しても、上手く動かないようです。

何か良い案、参考情報へのリンクなどお知りでございましたらご教授ください。
>>706
SetActiveViewとかどうよ?(試してないが)
ついでに
>お尻でございましたら
「ご存知でしたら」じゃね?
708706:04/08/29 22:35
>>707
お恥ずかしい(涙

SetActiveViewを試してみたのですが、上手くいきませんでした。
起動と同時にタブコントロールを生成しようと、
C○○ViewのOnInitialUpdateで
CTabCtrl.Create(WS_CHILD | WS_VISIBLE, CRect(0, 0, 200, 80), this, 100);
を呼び出すと、SDIだと上手くいったんですがMDIでは何故かタブが生成されません。
エラーが出る訳でもなく、thisをGetWindow(GW_CHILD)に変更するとMDI子ウィンドウに生成されるので、
指定するウィンドウか生成するタイミングが間違っていると思うのですが色々試しても分かりません。
原因の分かる方、教えて下さい。
すでに(VIEWの)ウィンドウがあるかどうかくらいは確認したんだろうな?
711デフォルトの名無しさん:04/09/07 17:51
コンボボックスについて質問です。

コンボボックスのエディットコントロールでテキストを変更した場合、OnCbnEditchangeXXXXが呼ばれますが、
このエディットコントロールのテキストの内容を取得する方法を教えてください。
>>711
「テキストの内容」ってなんだ?
GetLBText()じゃないの?

つーかリファレンスでメンバ関数のチェックぐらいしたんだろうな?
>>712
失礼しました。
誤)テキストの内容
正)エディットボックスの内容

その関数だとリストボックス内のテキストです。
エディットボックス内のテキストを取得する方法が見つかりません。
GetWindowText
715711:04/09/07 19:14
>>714
ありがとうございました。
716デフォルトの名無しさん:04/09/08 01:10
VC6.0で開発しています。

IEコンポーネントを使ってネット上からhtmlファイルを取得し、
解析して保存したいのですが、
ブラウザ画面を表示させたくはありません。

IEコンポーネントのうちURLからコンテンツを取得する機能と
htmlコンテンツを解析する機能を使いたいのですが
どのようにすればよいのでしょうか?
>>716
「解析」というのが何を指しているのか分からないね。
IEコンポーネントを使うって書いてあるけど、ブラウザ・エンジンを使うってのは
普通レンダリングさせるためであって、ファイル内容をHTMLコードとして見る
だけなら必要ないことのはずだが?
718716:04/09/08 01:23
>>717
レスありがとうございます。

> 「解析」というのが何を指しているのか分からないね。

テーブルで表示されてる表などを整形してリスト表示したり
したいです。

> IEコンポーネントを使うって書いてあるけど、ブラウザ・エンジンを使うってのは
> 普通レンダリングさせるためであって、ファイル内容をHTMLコードとして見る
> だけなら必要ないことのはずだが?

ごもっともです。
・URLからhtmlコードを簡単に取得できそう。
・IE対応のページを確実に解析できそう
というのが理由です。

htmlの解析という視点に立つと他の手段はあるのでしょうか?

DOMオブジェクトとかのドキュメント構造を取得したいってことじゃないの?
720デフォルトの名無しさん:04/09/08 01:37
>>719

そうです。
でもXMLパーサーでは解析できませんよね?
一応試して見ましたができなかったので
IEコンポーネント使えば確実だろうと思いました。
CHtmlViewってのはあくまでViewであって表示させるためのものだと思うが?
中身をデータとして扱いたいならCHttpXXX系やCAsyncSocketなんかを使って
ファイル・データをもってきて自分で使いたいように加工するもんだと思う。
軽いHTMLパーサならCodeProjectとかSourceForgeとかにありそうだけどな。
>>722
自分でparseしたくないって話だっただろ。
GetHtmlDocumentでドキュメントインターフェイスの取得できるし。
>>720
IEコンポっていうか MSHTML っていうのが MS の html エンジン。
IE も WebBrowser Control もコレ使ってる。
使い方のサンプルは以下にあるよ。
データを持ってくるところは自分でやることになるような気がするけど。

http://msdn.microsoft.com/archive/en-us/samples/internet/browser/walkall/default.asp?frame=true
726720:04/09/08 23:05
みなさまありがとう

>> 721,725を見ましたが
この二つの組み合わせでうまくいきそうです。

感謝しています。
727初心者D:04/09/09 19:59
今、メニューの項目からダイアログを開いて値を入れて
OKを押したら、その値を元にCPenの絵が動くっていう
ソフトを作ってます。
ダイアログを表示するのはクラスCxxxAppに、
CPenで書かれた絵はOnDrawじゃなくCxxxViewクラスの中にpublic:として
HogeDraw()(OnDrawじゃないっす)を作ってあります。
ダイアログの関数に
if( Hoge.DoModal() == IDOK ){
  クラスCxxxViewのメンバ関数HogeDraw(ダイアログの値を引数にする)
}
としたいのですが、どう記述すれば良いのですか?
参考になりそうなサンプルとかあったら教えてください。
対処できずにはや3日ほど経ちました…
728& ◆RdmUjfVKqQ :04/09/09 20:03
簡単に言うとCxxxAppの中で
CxxxViewのHogeDraw(引数あり)を使いたいんですが、
どう変数を宣言すればいいのか、どうポインタを渡せば良いのか
分からないってことです。
すいません、お願いします。
名前が化けました。727=728です。
とりあえず、地道に勉強してくれ。
3日もあればかなり勉強できる(・∀・)!
732デフォルトの名無しさん:04/09/09 23:50
ネットワークスレから移動してきました。
再質問します。
677 名前:デフォルトの名無しさん :04/09/09 22:52
ライブラリに依存する質問になってしまいますが、MFCのCAsyncSocketのOnXXX()は、
どういう仕組みで呼び出されるのでしょうか?
もし、メッセージポンプを経て呼び出されるのなら、OnXXX()の中では長時間の処理が
出来なくなりますが、皆さんどう対処しているのでしょう?


678 名前:677 :04/09/09 23:38
ソース見てみました。
カレントスレッドのメッセージポンプを利用するみたいですが、あってますか?
もしかしてスレ違いでしょうか?
733732:04/09/10 00:31
CWinThreadはメッセージポンプが付いているそうですが、
これを利用すればいいのでしょうか?
734デフォルトの名無しさん:04/09/10 00:41
よく分らないけどメッセージハンドラ内でどうしても処理が長くなるのなら
処理をスレッドに配置してスレッド起動をして、そのままメッセージハンドラを抜けてしまえばいいんじゃない?
ってか何をするのかによる。本当に長い計算をするのならスレッドにすればいいと思う。
何かを待つのなら・・・何を待つのか聞きたい。

735732:04/09/10 00:50
>>734
例えば子プロセスの終了を待つとか。
736732:04/09/10 00:53
Microsoftのサンプルでは、大抵子プロセスを待つ部分にワーカスレッドを使っているみたいですが、
ソケット側のちょっとした挙動の変化でGUIを止めたくないのです。
こういう要求って変ですか?
737デフォルトの名無しさん:04/09/10 01:15
その場合、そのイベントハンドラからやっぱりスレッドを起動し、
そのスレッド内部でWaitFor系APIで子プロセスの終了イベントを待つ。
(たぶんその子プロセスのハンドルかなんかがそのままイベントとしてWaitできると思った。)
そんで、WaitForSingleObjectを抜けたらメインスレッドにメッセージをポストしてスレッドはそのまま終了。
というのはどう?
738デフォルトの名無しさん:04/09/10 01:22
>>737
おそらくそれが正当な方法なんでしょうね。
Microsoftのサンプルもそういう形が多いです。

ところで、複数のサーバが合わさった形のプログラムはどうインプリメントするべきなんでしょうか?
たとえば、HTTP、FTPなどが組み合わさっているようなものです。
もし、あるサーバで異常が起こった場合、タイムアウトなどによって回復されるまでの期間
GUIが重くなる事態は避けたいと思います。
各サーバごとにUIスレッドを分けるといいのかな?などと妄想しましたが、
普通はどうするものなのでしょうか?

HTTP、FTPというのはあくまでもたとえです。
別プロセスにして、サーバー同士はプロセス間通信しとけよ。
740ディフォルトの名無しさん:04/09/10 01:26
VCでMFCを使用してアプリを作成したのですが、OSや環境によって正常に
動作しないなんてあるのでしょうか?
 日本語版や英語版のWINDOWS環境では問題なく動作していたんですが
ドイツ版のWINDOWSでは動くPCと動かないPCが出てきました
動かないPCは、コンストラクション後にInitdialogに入らずにそのまま、
そのダイアログが終了してしまうという現象でした。
このようなことってあるんでしょうか?
741デフォルトの名無しさん:04/09/10 01:27
>>739
プロセス間通信にもソケットを使おうとしています。
俺は異常でしょうか?
742デフォルトの名無しさん:04/09/10 01:29
自分はCAsyncSocketを使ったことが無いのでなんともいえないですが
ワーカスレッドでバークレーソケットを使うなら
UIのスレッドとは別にサーバAとサーバBを別々のワーカスレッドにして
おのおのでソケットを作ってlistenしたりすると思う。
そしておのおののサーバスレッドはイベントをUIに通知するためにPostMessageして
メインスレッドと交信する。もしどっちかが死んだり固まったりした場合でリスタートしたいなら
仕切りなおしの同期の処理を設計する必要があるでしょう。

743デフォルトの名無しさん:04/09/10 01:36
>>742
実は、そういう形で作っていたのですが、非同期に切り替えることにしました。
以前は、各ソケットにスレッドを割り当ててブロッキングしていたのですが、
非同期にするに当たってATLあたりからメッセージポンプをいただいて
自前のソケットクラスを拡張するか、MFCを使うか考えました。
そして簡単そうなMFCを使うことにしたわけです。

一つのプロセスでUIスレッドを複数使うのはあまり一般的ではないのでしょうか?
744デフォルトの名無しさん:04/09/10 01:38
>>740
CWinApp派生::InitInstanceでDoModal呼ぶ前に抜けるコードパスも存在する場合がある。
ソケットを使うための初期化処理(Wizが自動インプリメント)に失敗したとか。
>>741
別に普通だけど?
746デフォルトの名無しさん:04/09/10 01:39
実は、先ほどMFCソース(CAsyncSocket)を読んでみて余りのシンプルさと、
素直とは言えない作りに驚きました。
これだったら、自分で作り直したほうがいいのではないかとさえ思うのです。
皆さんはどう思いますか?
747742:04/09/10 01:40
>>743
自分はUIスレッド複数はやったことが無いので、一般的かどうかについては
他の回答者の方の回答をお待ちくださいです。
既存のものを作り変える必要性が本当にあるかというのも気になる
既存のものの問題がもしブロッキングとかだったら正しくselectを使うなど
すれば回避できると思う。しかしそのブロッキングの解決策としてCAsyncSocketを使うのは
結局同じ問題に到達するかもしれない上に変なアーキテクチャのために振り回されるかも。
一般論として、技術があるなら自分でできるところまでやれば良いけど、自分で
やった分には責任を持たなくちゃいけないことになる。それを踏まえてどこまで
自分で「できる」のか判断して決めるしかないのでは?
>>732
OnXXX で(自らなにか)時間のかかる処理をするなら、
非同期でソケットを使う利点はまるでないと思うけど。

>ソケット側のちょっとした挙動の変化でGUIを止めたくないのです。
ちょっと状況が想定できないけど、どんなときにそういう問題がおきますか?
>>728
DDXでぐぐれ
DDXなんか関係ないじゃん
>>728
CxxxViewクラスのポインタをグローバル変数かどっかに保存しておけばよろしいかと。
754デフォルトの名無しさん:04/09/10 15:24:28
>>727
ビュークラス内からダイアログを起動すればいいだけの話でしょ?
755デフォルトの名無しさん:04/09/10 16:46:36
>>727
ビュークラスにメッセージ飛ばして、その先でHogeDraw()を実行する。
WM_APPなどでググってみれ。
ダイアログの値を渡す方法はいくらでもある。
グローバル変数でもCxxxAppのメンバ変数でも良し。
そのときはHogeDraw()はpublicじゃなくてもオッケ。
756初心者D:04/09/10 17:27:01
>>727-729です。
皆さんありがとうございます。
結局、>>754さんのやり方でやりました。
CxxxViewクラスの中でメニューの項目からダイアログを出すっていう
関数を作ったのがなんか「?」って感じになってますが…。

>>755さんの
>ビュークラスにメッセージ飛ばして
をもうちょっと勉強してからやってみます。

勉強し直してきます…。
757デフォルトの名無しさん:04/09/10 18:46:21
>>750
IEでもFFFTPでも挙動がおかしいときがありますよね?
操作を受け付けない時間が有りますよね?

自分の作るプログラムがそういう挙動を示さないとは思えないのです。
758デフォルトの名無しさん:04/09/10 21:20:06
>>757
>操作を受け付けない時間が有りますよね?

…ないと思われ。OSがWin9xとか。
759デフォルトの名無しさん:04/09/10 22:07:25
>>758
NT系でも同様だよ。
「操作」の定義があまりにもシェル寄りだね、その見方だと。
760デフォルトの名無しさん:04/09/10 22:11:16
>>756
>>>755さんの
>>ビュークラスにメッセージ飛ばして
>をもうちょっと勉強してからやってみます。

せっかくMFC使ってるのに、そんな面倒なことしなくてもよし!
単に View にそのメニューのコマンドハンドラを追加すればいいだけだよ〜。
761デフォルトの名無しさん:04/09/10 22:20:14
>>757
それは非同期ソケットの問題じゃないと思うけど。

漏れの経験ではそれなりに非同期っぽく作ったネットワークアプリが無反応になるのは、
gethostbyname を不用意に呼んでブロックしているケース、socket が connect / shutdown中で、
他スレッドから close しても停止できないケースが大半なんじゃないかな。
762デフォルトの名無しさん:04/09/10 22:29:46
>>761
closeで停止できなかった場合に無反応になるのだとしたら、
何故無反応になるのですか?
763デフォルトの名無しさん:04/09/10 23:29:34
>>762
>>761が正しいかどうか知らんが、デッドロックが起きてるとかでは?
764デフォルトの名無しさん:04/09/11 00:41:25
非同期ソケットが便利なのは他のイベントと一緒に待てる点?
765デフォルトの名無しさん:04/09/12 02:54:30
KFC最高。KFCあったらMacなんかイラネ
766デフォルトの名無しさん:04/09/12 08:20:46
ウィザードでCWinThreadを継承してクラスを作るとコンストラクタとデストラクタが
protectedになるのは何故ですか?
特にデストラクタがそうなる理由がわかりません。
Microsoftのサンプルは全てpublicになっていました。
よろしくお願いします。
767デフォルトの名無しさん:04/09/12 08:47:00
>>764
スレッドを少なく出来る部分に魅力を感じます。
Windowsでもpoll出来ますか?
出来るならそっちを使いたいです。
よろしくお願いします。
768デフォルトの名無しさん:04/09/12 09:49:02
>>756
暮らすウィザードを一日中眺めていれば活路が見出せるはず。
ヒントは>>760
769デフォルトの名無しさん:04/09/12 09:49:14
>>766
「何故」について考えることに意味があるかどうかだ。
しょせん同じ人間が用意したウィザードだぞ。
答えをいうなら、ウィザード作成者が徹夜明けだったからとしか答えようがない。
770デフォルトの名無しさん:04/09/12 10:31:24
>>769
バグですかね?
たぶん意味があると思うのですが。
は!
わかったかもしれない!
もしかして、CWinThreadを継承したクラスは自分をマネージしないといけないんですか?
だとすると納得いく。
ちょっと実験してみます。
771デフォルトの名無しさん:04/09/12 10:38:10
マネージってなんだよ。
専門用語?それともカッコイイっぽいから使ってるだけ?
772デフォルトの名無しさん:04/09/12 10:41:57
>>771
カッコイイから使ってみました。
773デフォルトの名無しさん:04/09/12 13:04:35
>>770
動的生成されることを前提にしてるからprotectedにしたほうが安全だと想ったんじゃない。
IMPLEMENT_DYNCREATEとかCRuntimeClassあたりで。
774デフォルトの名無しさん:04/09/12 13:20:13
ビットマップリソースをスタティックテキストに表示する方法を教えてください
775 ◆HsptrkZmYk :04/09/12 13:54:15
>774
vrubyでググろう
776デフォルトの名無しさん:04/09/12 13:59:51
カッコイイだけでカタカナ語使うのは馬鹿だと思われるよ。
「コイツ、話を誤魔化してる。もしくは何も判ってない。」と思われるだけ。
777デフォルトの名無しさん:04/09/12 14:31:42
>>776
はい。誤魔化していました。
素直にわかりませんって書けばよかったです。

>>773
そうみたいです。
でも、デストラクタはどうしてなんですかね?
破棄するときどうなるのだろう?
778デフォルトの名無しさん:04/09/12 14:57:20
おい、CWinThreadの質問してるヤシ、ドキュメントちゃんと読んでるのか?
new/deleteで生成すると書いてあったか?
779デフォルトの名無しさん:04/09/12 15:00:05
ピクチャコントロールでビットマップを透過したいのですがどうすればいいですか?
780デフォルトの名無しさん:04/09/12 15:00:12
動的生成=newじゃねーよ、そもそもデストラクタがprivateならユーザーが明示的にインスタンスを作成できない。
781デフォルトの名無しさん:04/09/12 15:00:56
もちろん内部じゃnewとかしてるけど、そういうどうでもいいところに突っ込むなよ。
782デフォルトの名無しさん:04/09/12 15:02:58
>>779
マスクパターン
783デフォルトの名無しさん:04/09/12 17:14:29
>>778
スレッドを自殺させたあとにメモリーをチェックするとリークしていると報告されるのですが、
これは何故なんでしょう?
784デフォルトの名無しさん:04/09/12 17:27:23
自殺のさせ方が悪かったのだろう。
TerminateThreadを使ったのか?
785デフォルトの名無しさん:04/09/12 17:37:57
>>784
PostQuitMessageしてみました。
786デフォルトの名無しさん:04/09/12 18:51:32
>>785
だれがどのタイミングで?
787デフォルトの名無しさん:04/09/12 20:07:26
ナンーカ
根本的に間違っているような母艦
788デフォルトの名無しさん:04/09/12 20:40:02
ボタン1とボタン2で同じハンドラ関数を呼び出してるんですが、どちらが呼び出したか判定する方法ありませんか?
789デフォルトの名無しさん:04/09/12 21:06:05
GetCurrentMessage
790デフォルトの名無しさん:04/09/12 22:20:32
>788
MFCよくわかんないけど (じゃあなぜこのスレにいるんだつーツッコミは禁止だ)
Win32APIレベルで考えると、ボタンを押されたら親ウィンドウに
WM_COMMAND をポストされるよな。BN_CLICKED と コントロールID と
ご丁寧にボタンのウィンドウハンドルまでつけて。
コントロールID やウィンドウハンドルで選別すればヨロシけれ。

もれ普段MFC使わずにナマで書いてるけど、いちいちコントロールID設定するの面倒なんで
ウィンドウハンドルで選別してるw
究極のDQNグラマとはもれのことよw
791デフォルトの名無しさん:04/09/12 22:30:12
じゃあなぜこのスレにいるんだ
792デフォルトの名無しさん:04/09/12 22:33:00
SDKでプログラムしていてもWindowsアプリっぽくするためには
MFCのトリックをパクったりするのが有効だからだろ。
793デフォルトの名無しさん:04/09/12 23:15:16
まぁDQNは放置しておいて、ON_COMMAND_RANGE使え。
794デフォルトの名無しさん:04/09/13 00:48:10
>>788
っていうか、マウス操作している人が一番良く知っているはずだが。
795デフォルトの名無しさん:04/09/13 01:18:31
ダイアログベースでメニューを追加しました
あるメニューの項目で、UPDATE_COMMAND_UIメッセージの
イベントハンドラを(CxxxDlgクラスへ)追加し、その関数内で、
   pCmdUI->SetCheck(1);
と記述したのですが、チェックが付いてくれません
同じ事をシングルドキュメントでやると、上手くいくのですが・・・

ダイアログベースでメニューのチェックを制御するには
なにかコツがあるのでしょうか?




796デフォルトの名無しさん:04/09/13 01:27:28
FAQキタ━━━(゚∀゚)━━━ !!
797デフォルトの名無しさん:04/09/13 06:07:24
>>786
スレッド自身が任意のタイミングで。
798740:04/09/13 13:36:30
原因の方は判明しました
FLEXGRIDを使用していたのですが、OCXファイルはあったのですがClassIDの方に登録
されて居なかったので、その段階でダイアログが開かずに落ちていました。
このClassIDってどのようにして登録すればよいのでしょうか

>>742
ありがとうございます
799デフォルトの名無しさん:04/09/13 16:18:18
regsvr32
800デフォルトの名無しさん:04/09/14 13:11:05
エディットコントロールで'\n'が適用されないのですがどうすればいいですか?
801デフォルトの名無しさん:04/09/14 13:14:03
>>800
"\r\n"
802795:04/09/14 22:26:08
環境はVC.NET 2003です
803デフォルトの名無しさん:04/09/14 23:36:50
FAQマタキタ━━━(゚∀゚)━━━ !!
804デフォルトの名無しさん:04/09/14 23:40:13
>>803
fuck you 股来た 目がビーチクでターンエーがオメコで括弧が足
805795:04/09/14 23:42:14
>>803
私のことでしょうか?FAQとは?
806デフォルトの名無しさん:04/09/14 23:53:45
ターンエーと呼ぶ馬鹿ハケン
807デフォルトの名無しさん:04/09/15 18:19:26
ユーザ定義のメッセージを処理するのはCWnd::WindowProcとCWnd::DefWindowProcと
どちらでやったらより良いですか?またなぜ、そのほうがより良いといえるのですか?
808デフォルトの名無しさん:04/09/15 18:22:00
どっちでもない
ON_REGISTERED_MESSAGE
もしくは
ON_MESSAGE
ハンドラで
809デフォルトの名無しさん:04/09/15 19:18:15
>>800
ソフトラインブレーク で調べてみんさい
810デフォルトの名無しさん:04/09/15 22:03:16
MFC三日目の初心者です、
いくらでもたたいてくれて結構です
画像を加工して保存がしたいのですが
HDCで保持するのとDIBデータを扱う2つがあるのですが
この2つについての、違いをご教授願いたいのです。
よろしくお願いします
811デフォルトの名無しさん:04/09/15 22:11:19
>>810
推奨スレ
http://pc5.2ch.net/test/read.cgi/tech/1092524669/

・・・とは言っても、おそらく API と MFC の境もわからんだろうな。
こっちとあっちで、ちゃんと同じ自己紹介しとくといい。
812デフォルトの名無しさん:04/09/16 19:03:05
モードレスダイアログ上にテキストボックスを配置して、
テキストに変更がある度に処理を行いたいのです。

ClassWizard(VisualC++ 6.0)を使用して、
CEdit型の変数、m_EditXをエディットボックスに対応させ、
EN_CHANGEメッセージのハンドラを作成しました。

void CSelectDlg::OnChangeEditbox()
{
  char buffer[5];

  m_EditX.GetLine(0, buffer, 4);

  ・
  ・
}

実行してみると、ダイアログがオープンした途端、
CEdit::GetLine内部でAssertionが発生して止まってしまいます。
どうやらエディットボックスが有効になる前(?)に
EN_CHANGEメッセージが送られてくるようです。

http://www.flounder.com/getdlgitem.htm#Uninitialized%20Controls
これを避けるために、OnInitDialogが実行済みかどうかを
格納しておくBOOL変数を持たせる方法というのがあるそうです。

ただ、こういった処理をしたい場合、これが定番な書き方なのでしょうか?
もうちょっとスマートなやり方がありそうな気がするのですが。。
813812:04/09/16 19:06:17
あ、テキストボックスにメッセージが送られるのは、
スピンボックスから自動関連付けしているのが原因っぽいです。
関連付けを外したらダイアログは普通に表示されました。
814デフォルトの名無しさん:04/09/16 19:13:25
>>812
スマートかどうかは知らないけど、とりあえずピンポイントその状況だけ避けるなら
if (::IsWindow(m_EditX..m_hWnd)) とかで判定する手もあると思う。
815812:04/09/16 19:28:14
>>814
正直、それを考えてましたw
Assertionがその条件で発生してるんですが、
IsWindowの意味自体があやふやで自信がありませんでした。

メンバ変数を増やすよりはマシってことで、それでやらせていただきます。
816デフォルトの名無しさん:04/09/16 21:48:22
どなたか795お願いします
817デフォルトの名無しさん:04/09/16 22:00:19
>>795>>816
wndfrm.cpp にあるように、メニューの UPDATE_COMMAND_UI を処理するのは CFrameWnd クラス。
( CFrameWnd::OnInitMenuPopup を参照 )
よってダイアログベースの場合自分で似たような処理を書くか、単純に自力でメニューアイテムをSetCheck すること。

あるいは単に SDI で FormView 使うって手もある。たぶんこっちのほうが簡単。
818デフォルトの名無しさん:04/09/16 22:03:40
OnInitMenuPopupでチェックするのがFAQ。
819デフォルトの名無しさん:04/09/16 22:23:00
>>814
MFC的には if (m_EditX.GetSafeHwnd()) だな。
820デフォルトの名無しさん:04/09/16 22:31:46
>>819
GetSafeHwndはポインタ経由で this が 0 のときにもアクセス違反にならないというだけの関数。
(要は return this ? this->m_hWnd : 0 ってな実装)。
ポインタでもないメンバ変数に使うのは無意味。

m_hWnd って直中身見るのは行儀悪くてイヤーンっていう非MFC人なら常時使ってもいいかもね。
821デフォルトの名無しさん:04/09/16 22:53:32
operator HWND
ってあまり使ってませんかそうですか
822795:04/09/16 23:16:53
>>816
えっと、どなたか存じませんが、ありがとう。

>>817
FormView使った方が、早そうですね。
参考になりました。
ありがとうございます。
823デフォルトの名無しさん:04/09/17 01:52:26
MFCが無くなっちゃうって本当ですか?
824デフォルトの名無しさん:04/09/17 02:57:05
>>823
なくなりません。
MFCがテンプレートになる可能性があるだけでしょう。
その場合、ClassWizardなどのIDE機能の変更があると思います。
825デフォルトの名無しさん:04/09/17 09:40:34
いや、すぐにとは言わんがMFCもATLもなくなるだろ。
826デフォルトの名無しさん:04/09/17 10:08:31
そりゃタイムスパンのレベルと何をもって「なくなる」とするかによるだろうけど
少なくとも現行OS(winXP以下)が現役で動いているうちは確実に使えるだろ
827デフォルトの名無しさん:04/09/17 11:28:04
Longhornでも確実に使えると思うね。
MSがOSを出し続ける限り使えると思う。

それ以前に、MSにとってMFC/ATLをなくすメリットは何かあるの?
828デフォルトの名無しさん:04/09/17 23:09:37
新しいライブラリを売る。
829デフォルトの名無しさん:04/09/17 23:18:10
>>828
こんどこそ驚きのプゲラ仕様がないライブラリを求む
830デフォルトの名無しさん:04/09/17 23:28:31
プゲラですめばいいけどね。大抵真っ青。
831デフォルトの名無しさん:04/09/18 01:01:11
リストビューの表示を高速化する方法について教えてください。

大量(最大1万件)のデータをリストビューに表示させるのですが、一番下のアイテムを選択表示させデータの流れる様子を、画面に表示させたいのです。

SetRedrawを用いてInsertItemを行っています。1万件を超えるとDeleteItemを用いて先頭のアイテムを削除しています。現在表示速度が遅いのかデータが溜まっています。さらに画面がちらついてしまいます。

画面のちらつきはOnEraseBkgndを用いて、描画を省いているのですが上手く画面のちらつきがおさまりません。

良い方があれば教えてください。
832デフォルトの名無しさん:04/09/18 01:16:53
>>831
リストビューで表示が間に合わないような頻度で書き換わるデータを本当にリストビューで
1万件もためて表示する意味があるのかという疑問が・・・。
833デフォルトの名無しさん:04/09/18 02:13:10
>>831
仮想リストビューを使いなさい。
834デフォルトの名無しさん:04/09/18 09:55:13
>>831
大量データを扱う場合は仮想リストコントロールを使うというのが定石だけど、
「流れる様子」とか言ってあんまり頻繁に更新する場合は頻度によって多少
のちらつきが出るかも。
835デフォルトの名無しさん:04/09/18 10:15:12
仮想リストビューなんて要るの?
コモンのリストコントロールなら必要ないと思うけど。
描画に必要なインデックス情報しか処理要求してこないようにできたはず。
MFCの場合は知らないけど。
836835:04/09/18 10:19:59
>>835で書いたヤツだと、自分で能動的にリストを更新したい場合は、
WM_PAINTを送るだけでいいから楽だよ。

LVN_GETDISPINFOとか、LPSTR_TEXTCALLBACKでググって見れば?
MFCでも逝けるはず。試してないけど。
837835:04/09/18 10:22:34
修正します。

WM_PAINT送信での更新だと、InvalidateRect()もあらかじめ必要かも。
838デフォルトの名無しさん:04/09/18 10:42:49
普通に(仮想でなく)ListCtrlで1万行出してましたが。
尤も、ログ機能なんで更新は最高でも1秒に一回程度。
有り得ない上限として1万行の仕様になり、ランテストした次第。
839デフォルトの名無しさん:04/09/18 11:00:24
リストコントロールは、表示よりもむしろアイテムの挿入・削除に時間がかかるので、
あらかじめ上限数のアイテムを作っておいて、無効アイテムに空文字を返せば、
動的にアイテム数が増減しても高速処理できる。
ただし、見た目は件数が数件でもスクロールバーが出てしまうけど。
840デフォルトの名無しさん:04/09/18 15:47:44
つーかなぜそこまで泥臭いことをして仮想リストコントロールを避けるのか分からない・・・
841デフォルトの名無しさん:04/09/18 16:15:13
842デフォルトの名無しさん:04/09/18 16:31:49
>>835
> 仮想リストビューなんて要るの?
> コモンのリストコントロールなら必要ないと思うけど。

コモンのリストコントロールを使わずに仮想リストビューを使うって、どういうこと?
843デフォルトの名無しさん:04/09/18 17:58:02
MFCのダイアログベースのプログラムを作ってみました。
プログラム自体は動くのですが、Enterを押すと勝手に終了してしまいます。
なぜがご存知の方、教えてください<m(__)m>
844デフォルトの名無しさん:04/09/18 18:02:36
>>843
ダイアログクラスのOnOk()をオーバーライドし
CDialog::OnOK();
をコメントアウトして下さい
845デフォルトの名無しさん:04/09/18 18:26:07
>>843
聞かれる前に追加。
Escキーでも終了してしまうので、
OnCancel()も>844同様に呼び出されないようにすべし。
846デフォルトの名無しさん:04/09/18 18:48:25
それは対処法の先回りであり、843の疑問に対する答えにはなっていないな。
847デフォルトの名無しさん:04/09/18 19:19:41
しかも終了手段がなくなる罠。
848デフォルトの名無しさん:04/09/18 19:55:44
CHtmlViewを利用しているプログラムを作成しております。
Proxyの動的な変更方法が判りません。

Sleipnirの様にプログラム中から変更を行いたいと思っております。
参考になる文献などでも良いのでご存じの方ご教授お願い致します。
849デフォルトの名無しさん:04/09/18 20:35:45
850デフォルトの名無しさん:04/09/18 20:57:01
>>847
なんで? いつでも EndDialog できるやん。
851デフォルトの名無しさん:04/09/18 21:06:06
何も知らない奴に>>844-855を教えただけじゃ終了できなくなるって意味だろ
852デフォルトの名無しさん:04/09/18 21:07:53
>>844-845を教えただけじゃ、だ
853デフォルトの名無しさん:04/09/18 21:14:52
>>852
844は終了できなくならんだろ。
854デフォルトの名無しさん:04/09/18 21:24:15
>>851
そんなん言い出すなら、タスクリストがあるやん
855デフォルトの名無しさん:04/09/18 21:25:17
>>853
だから>>844-845の二つともやらせたら、だってば。
856デフォルトの名無しさん:04/09/18 21:27:56
>>854
で、「タスクリストからしか終了できません。どうすればいいですか。」って質問が来そうだなって話だ
857デフォルトの名無しさん:04/09/18 21:29:16
>>856
そんなら来てからでええやん
来ないかも知れないし
858デフォルトの名無しさん:04/09/18 21:31:18
タスクリストってなんんですか?
859デフォルトの名無しさん:04/09/18 21:31:56
いや、そんなくだらない質問来て欲しくないから
予防線として>>845は同時にEndDialogも書いた方がいいという主張をしたかったんだろう。>>847は。
860デフォルトの名無しさん:04/09/18 21:32:23
で、>>843の質問には誰が答えるんですか?
861デフォルトの名無しさん:04/09/18 21:33:00
直後に答え出てますやん
862なぜが?:04/09/18 21:37:32
なぜがご存知の方、教えてください
なぜがご存知の方、教えてください
なぜがご存知の方、教えてください

 
863デフォルトの名無しさん:04/09/18 21:44:56
Q. ダイアログがEnterキーで終了してしまうんです。なぜですか?
A. OnOK()をコメントアウトで終了しなくなります。

すごい回答だ。つーか、こんな回答でWindowsのダイアログの作法を無視しまくる
変なアプリが増えないことを祈る。
864デフォルトの名無しさん:04/09/18 21:46:33
865デフォルトの名無しさん:04/09/18 21:56:33
>>863
模範回答よろしく
866デフォルトの名無しさん:04/09/18 22:13:21
863じゃないけど、ここにやり方書いてあったと思ったけど、サイトが壊れてるのか開けない。
ダイアログボックスをリターンキーやエスケープキーで閉じないようにするには?
http://web.archive.org/web/20030415014307/techtips.belution.com/ja/vc/
867デフォルトの名無しさん:04/09/18 22:16:48
エスケープキーでキャンセルできないダイアログボックスは 【 う ざ い 】
868デフォルトの名無しさん:04/09/18 22:31:31
OKで閉じないダイアログもうざいけどね。
869デフォルトの名無しさん:04/09/18 22:31:54
OKじゃないや、enterだ。
870デフォルトの名無しさん:04/09/18 23:08:41
いろいろやり方あるけど、MFCならこの辺じゃないか?
void CxxxDlg::OnOK()
void CxxxDlg::OnCancel()
void CxxxDlg::OnClose()
871デフォルトの名無しさん:04/09/18 23:37:59
頼むから話の流れを読んでから書き込んでくれ。
872デフォルトの名無しさん:04/09/18 23:39:06
しかも終了手段がなくなる罠。
873デフォルトの名無しさん:04/09/18 23:41:36
キャンセルを押してもこの話題が終わらないのですが、どうすればいいでしょうか。
874デフォルトの名無しさん:04/09/18 23:42:51
>>873
なんで? いつでも EndDialog できるやん。
875デフォルトの名無しさん:04/09/18 23:55:49
thisThread->EndDialog('終了');
876デフォルトの名無しさん:04/09/19 00:05:26
error(875) : no matching EndDialog(const char*) in CthisThread
877デフォルトの名無しさん:04/09/19 00:16:46
そんなエラーが出るわけねえだろうがクソ野郎
878デフォルトの名無しさん:04/09/19 00:20:00
843です。ご回答いただきありがとうございます<m(__)m>
私の理解では、
ESCやENTERでプログラムが終了するのはダイアログベースの仕様であり、
終了させるためには、OnCancel()、OnOK()をオーバーライドすればよい。

実際にやってみたところ、ESCやEnterでは終了せず、右上のバツでは終了できました。
ありがとうございました!!

しかしながらEnterでプログラムが終了する仕様は問題ありですね、、、
879デフォルトの名無しさん:04/09/19 00:29:26
>>しかしながらEnterでプログラムが終了する仕様は問題ありですね、、、

んなこたあない。
ダイアログがどうゆうものか、もちっと勉強してくれ。
880デフォルトの名無しさん:04/09/19 03:50:44
ところが世の中にはenterでダイアログが終わるとバグ扱いになる所も。。
881デフォルトの名無しさん:04/09/19 06:59:49
うちは「仕様です」で押し切るな。
882デフォルトの名無しさん:04/09/19 08:00:06
ダイアログクラスをベースにして、ダイアログではないプログラムを作る。
ダイアログクラスを使わないで、ダイアログを作る。
883デフォルトの名無しさん:04/09/19 08:02:45
ダイアログクラスをベースにして、ダイアログではないプログラムを作る。
→Enterでプログラムが終了するのは好ましくない。
ダイアログクラスを使わないで、ダイアログを作る。
→Enterでプログラムが終了しないのは好ましくない。
884デフォルトの名無しさん:04/09/19 11:10:34
OKボタンに相当するものがあってボタンがそれだけならEnterでOnOKを受けて
終了するのは自然な動作だが、ダイアログ・ベースでもそんな簡単なものばかり
じゃないからね。ものに合わせて変えるのは当然だろ。
885デフォルトの名無しさん:04/09/19 11:53:06
ダイアログが閉じた後、さらに別のGUI操作が続く場合は、Enterクローズは便利だけど、
ダイアログが閉じて、アプリ終了した場合やGUI操作がない場合は、Enterクローズは不安感に襲われる。
886デフォルトの名無しさん:04/09/19 12:16:50
>>863
ダイアログの作法?
ダイアログを作ってるんじゃなく、
ダイアログを"ベース"にアプリを作っています。
887デフォルトの名無しさん:04/09/19 12:18:04
質問させてください。
CSocketで通信するプログラムを作ってるのですが、Connectで止まってしまいます。
動作試験中なのでサーバ、クライアントともに同じマシンであり、
"127.0.0.1"にコネクトするようにしています。

サーバ:Create(1500) → Listen() → Accept(socket) ここで止まる
クライアント:Create() → Connect("127.0.0.1", 1500) ここで止まる
各CreateとListenが成功しているのは戻り値で確認しています。

不可思議なのは、別のマシンではちゃんと動くことです。
自分のマシン:Win XP Pro(SP2当ててない),
       ファイアウォール・アンチウィルス停止中
別のマシン:Win 2000 Pro

どんな原因が考えられるでしょうか。(ポート番号が良くないとか?)
888デフォルトの名無しさん:04/09/19 12:23:19
>>887
127.0.0.1がちゃんと解決されているか確認。
netstat /an でポート番号が重複してないか確認。
889デフォルトの名無しさん:04/09/19 12:53:50
ダイアログアプリケーションでAfxMessageBox()などのモーダルダイアログが表示されているときに
別のアプリケーションからPostMessage()されると、そのメッセージは破棄されてしまうのですか?

どうも拾えないメッセージがあってそれが原因かなと考えているのですが・・・
890デフォルトの名無しさん:04/09/19 13:09:33
XP自信もファイヤーウォール持ってるけど関係あるかね?
891デフォルトの名無しさん:04/09/19 14:16:13
>>887
どうでも良いけどテストで使うにしろ1500ってポートはあんまり使わないところ
とりあえず5000オーバーの空いてるところとか使っとけよ
892デフォルトの名無しさん:04/09/19 14:55:09
みなさんありがとうございます。

>>888
127.0.0.1が解決できているかどうかの確認ですが、
とりあえずpingは返ってくるようです(他に確認方法ってありますか?)。
またnetstat /anで確認したのですが、特にかぶっているポートはありませんでした。

>>890
OSのファイヤーウォールの項目もチェックしてみましたが、
どの接続にもファイヤーウォールのチェックは入っていませんでした。

>>891
そうします。Winがどのあたりのポートを使っているか
よく知らなかったもので。
893デフォルトの名無しさん:04/09/19 14:57:31
telnet 127.0.0.1 1500
894デフォルトの名無しさん:04/09/19 15:09:29
>>893
接続中: 127.0.0.1...ホストへ接続できませんでした。 ポート番号 1500: 接続に失敗し
ました

となりました。これは解決ができていないのでしょうか?
ためしにnetstat /anで出てきたLISTENING中のポートに
telnetしてみても同じ結果になりました。
895デフォルトの名無しさん:04/09/19 15:26:05
>>894
そのリスニング・ポートはちゃんと0.0.0.0か127.0.0.1にバインドされてるの?

システム・サービスの場合、リストに出てても接続を受けないものもあるから
ちゃんと動く何かの簡易サーバ-クライアント・ソフトを持ってきて実験して
みたら?

それでもダメなら接続をブロックするファイアウォールか何かが動いてる
そのシステム固有の問題ってはっきりするから。
896デフォルトの名無しさん:04/09/19 15:31:26
何故、1500?
もし他のポートで試せるのなら試すべき。
897デフォルトの名無しさん:04/09/19 15:32:32
XPならファイアーウォールの設定をしないとダメなのでは?
>>892を見るとテストするポートの設定をしてないように思える。
898デフォルトの名無しさん:04/09/19 15:32:36
>>889
破棄されない。
MessageBox APIの中でメッセージループが回ってるから。
899デフォルトの名無しさん:04/09/19 15:59:54
>>895-897
ご回答ありがとうございます。
>>895さんのおっしゃる通り、アンインストールしたと思っていた
ファイヤーウォール(Zone Alarm)が残っていたようです。
アンインストールしたら正常に接続できました。
言い訳をさせていただくと、以前はフィルタ状況のモニターがポップアップで
表示されており、現在は出現しないのでアンインストールしたと思い込んでいました。
(思い込みは良くない・・・)

休日にみなさんの貴重な時間を割いていただいてありがとうございます。
問題の特定の仕方や、問題になりそうな部分の勉強になりました。
今後も精進します。
900デフォルトの名無しさん:04/09/21 14:48:03
ドッキングツールバーという仕組みは、ReBarのようなものを自前で実装しているという理解でいいですか?
901デフォルトの名無しさん:04/09/21 18:43:56
良く分からん表現だな
902デフォルトの名無しさん:04/09/22 18:42:08
特に問題の無かったアプリのダイアログにボタンを追加したんですが、
そのボタンにクラスウィザードを使おうとしたところ、

 ソースファイル(C:\〜\TestDlg.h, C:\〜\TestDlg.cpp)の
 クラス"CTestDlg"は重複する挿入ブロックが存在します。

というメッセージが出てクラスウィザードが使えなくなってしまったのですが
どうやったら直りますか?環境はXP(SP1)、VC6SP6です。

いったんVCを終了してncb, opt, clw ファイルを削除した後にもう一度
試してみたんですがやはり同じ症状です。
903902:04/09/22 18:59:25
すんません。解決しますた。

ダイアログベースでデストラクタが無いので手動で追加したんですが
それを消してから上記の3ファイルを削除・再構築したところ直りました。
904デフォルトの名無しさん:04/09/22 21:51:01
宿題に困っています。
お分かりの方、いらっしゃいましたら、よろしくお願いします。

1.iniファイルで指定されたフォルダにあるファイル名(例:abbccc)を取得
2.ファイル名を分解(例:a bb ccc)
3.msdnの行にadoを使ってインサートする(例:a bb cccとフィールドを分けて)

905デフォルトの名無しさん:04/09/22 21:52:27
>>904
スレ治外。
906デフォルトの名無しさん:04/09/22 22:07:10
まあ、もしかしたらスレ違いじゃ無いのかもしれないけど、
msdnにadoでインサートするのはMFCじゃ無くても無理だろうなあと。
907デフォルトの名無しさん:04/09/24 01:32:09
ClassViewで右クリックを使ってクラスにメンバ関数を追加するとき、
デフォルトの引数を設定して、一番最後の引数の型をLPCTSTRにして
デフォルト値=NULL にすると宣言と定義が違うという旨のダイアログが
出て実際に定義の部分の引数部分が削られてしまうのですが、これって
どういうことなんでしょうか?

手動で直すとClassViewの該当関数をダブルクリックしても、ソースの
該当関数部分にジャンプしなくなって「インプリメンテーションが見つからない」
なんて警告されます。

class CTest{
  CTest();
  ~CTest();
  
  BOOL SetData(DWORD dwData=0, LPCTSTR pStrName=NULL);  ←コレ
protected:
  DWORD m_dwData;
  CString m_strName;
};

BOOL CTest::SetData(DWORD dwData)      ←宣言と異なる
{
  m_dwData=dwData;
  if(pStrName==NULL)
    m_strName="";
  else
    m_strName=pStrName;
  return TRUE;
}
908デフォルトの名無しさん:04/09/24 02:27:02
>>907
バージョンくらい書こうや。
909デフォルトの名無しさん:04/09/24 03:13:52
>>908
すみません。VCのですよね。
VisualC++Ver6、サービスパックもVer6です。

ちなみにconst char * に置き換えると直るには直るのですが
これ(宣言と定義で違うようにすること)は一体どういう意図なのかがわからないです
910デフォルトの名無しさん:04/09/24 03:31:14
バグかなぁ?
VC.NETじゃちゃんと同じになるんだけど・・・
911デフォルトの名無しさん:04/09/24 08:46:37
>>907
ウィザードで作った後、手作業でデフォルト引数書くとかするしかないんじゃないかなぁ。
デフォルト引数のある関数にジャンプしないのは俺もよくある。
近くの関数にジャンプしてからスクロール…っていつもしてる。
こういう仕様なんだとあきらめてるよ。
912デフォルトの名無しさん:04/09/24 11:24:37
>>909
同じ環境でやってみたけど、CLASS VIEWがおかしいみたい。
コンパイルは通る。
913デフォルトの名無しさん:04/09/24 13:57:50
クラスビューは、あくまで作業の参考・手助け。
見た目が破損しててもコンパイル・ビルド作業への影響は一切ない。
914907:04/09/24 14:27:26
>>910-913
意味は分かりませんがやっぱり仕様ですかねえ。
とりあえずUNICODEは使わないのでconst char *
でやっときます
915デフォルトの名無しさん:04/09/25 04:07:08
CStringの中のTabSpaceの見分け方を教えて下さい。
削除したくて、Trimで色々やってみたのですが、うまいこといきません、
教えてエロイ人。
916915:04/09/25 04:39:26
CString::Remove( '\t' );
で、解決しました・・・。
Trimに拘った、私が悪かったみたいです。
ご迷惑おかけしました〜。
917デフォルトの名無しさん:04/09/25 10:03:11
VC6だったら、CString::Remove はバグあるから気をつけてね
918デフォルトの名無しさん:04/09/25 15:18:11
どういうバグ?
919デフォルトの名無しさん:04/09/25 17:30:08
>>918
2バイト文字が考慮されないっていうやつだろ、多分。
920デフォルトの名無しさん:04/09/26 13:34:36
流れを壊すようですいません。
MFCはじめたばかりの初心者です。
質問ですが、ウインドウの背景を画像ファイルとして保存するにはどうすればいいのでしょうか。
いろいろ調べたのですが結局分かりませんでした。
環境はこのとおりです
OS:WindowsXP SP1
VC++.NET 2003

お願いします。どなたか教えてください。
921デフォルトの名無しさん:04/09/26 13:41:34
>>920
読み出しなら ::LoadImage でできるが
書き込みのサポートはないから、思いっきり自力で書くことになる。

http://pc5.2ch.net/test/read.cgi/tech/1092524669/883-
922デフォルトの名無しさん:04/09/26 13:52:39
>>920
CImageにアタッチすれば、CImage::Save()で保存出来るよ。
今ホットなGDI+を使うことになるけど。
923デフォルトの名無しさん:04/09/26 14:42:53
>>921-922
ありがとうございました m(_ _)m
924デフォルトの名無しさん:04/09/26 20:02:17
MFC ActiveX Controll WizardでActiveXコントロールを作っています.
作成したコントロールはVBでFormなどに貼り付けて使う予定です.
コントロールは実行時に他のDLLやファイルなどを読み込む必要があり,
ターゲットとなるexeのカレントパスを取得してファイルなどを読み込む処理を
コントロールのクラスのOnCreateメソッド(?)に書きました.
しかし,OnCreateではVBなどでコントロールをFormに貼り付けた時点で
実行されてしまうため,実行時のexeのパスを取得する部分を利用して
ファイルなどを読み込む処理でエラーが起きてしまいます.
プログラムが実行されるときに
一度だけ処理されるメソッドやイベントはあるば教えて頂きたいのですが.

環境 VC6.0 VB6.0 WinXP

925デフォルトの名無しさん:04/09/26 20:51:44
>>924
DllMain()でやればいいんじゃないの。
926924:04/09/26 22:32:34
>>925
なんか,あまり一般的では無さそうですね>DLLMain
「DLLmain OCX」でぐぐってみましたが,50件も出てきませんでした.
927デフォルトの名無しさん:04/09/26 23:23:15
>>926 (;´Д`)・・・
928デフォルトの名無しさん:04/09/27 02:29:48
mfc-mlで同じ質問・・・
929デフォルトの名無しさん:04/09/27 12:15:22
デバッグ版とリリース版ってメモリ領域の確保(解放)の仕方が違うんですかね?

new演算子で確保したメモリ領域を解放する処理は明示的に行っているんですが、
デバッグ版⇒CWinApp::Exitinstanceが実行される前に(明示的記述したタイミングで)、
      メモリ解放処理が完了する。
リリース版⇒CWinApp::Exitinstanceが実行された後に、メモリ解放処理が完了する。
上記のような動きをしているみたいなんです。

メモリ解放処理後に、終了コードを各プロセスを管理しているプロセスに通知しているため
リリース版では管理プロセスが終了コードを受信した時にも、
対象のプロセスが動き続けていることになってしまいます。

こんな現象に関してご存知の方いらっしゃいましたらぜひご教授をお願いします。
930デフォルトの名無しさん:04/09/27 16:09:46
パス
931デフォルトの名無しさん:04/09/27 18:32:14
>>929
ソース読んでみれば?
932デフォルトの名無しさん:04/09/28 04:02:27
>>929
デバッグ版 DEBUG_NEW を定義せず
リリース版 最適化全てオフ
でテストしてみそ
933デフォルトの名無しさん:04/09/28 20:40:03
PostMessage()でメッセージを順番に送るとき、受け取る側で順番が入れ替わったり
する事はありますか?
934デフォルトの名無しさん:04/09/28 21:54:50
キューなんだからそんなことないはず。
935デフォルトの名無しさん:04/09/28 22:05:56
>>933
あるらしい

>>934
メッセージにも優先順位があるらしく、マウスイベントが
他のイベントより優先される場合もあるらしいよ
936デフォルトの名無しさん:04/09/28 22:09:01
>>935
マウスイベントはメッセージキューを通らないで直接ウィンドウプロシージャへ行くメッセージじゃないか?
937デフォルトの名無しさん:04/09/28 22:16:27
>>936
そうかも
「PostMessageでは試したことないけど」って言うの忘れた
938933:04/09/28 22:41:17
どもです。
同じ系統のメッセージの順番のみが問題ですんで、他のメッセージの割り込みは問題にならないです。
とりあえず大丈夫なものとしてやってみます
939デフォルトの名無しさん:04/09/29 00:24:05
>>936
へ?
940デフォルトの名無しさん:04/09/29 19:53:29
BITMAPINFOに256カラーのビットマップ、256色のグレースケールのパレットを用意しました。
このBITMAPINFOとビットマップの高さが増すにつれパレット番号を増加させるデータをもちいて
CreateDIBitmapにセットしてグラデーションのビットマップを作りました。(作ったつもり。)

これをメモリデバイスコンテキストでSelectObjectしてからディスプレイ(24bit)のDCにBitBltしたのですが、
この場合256カラー(パレットあり)を変換して24bitカラーのビットマップになってくれるとおもったのですが
どうもパレットデータはシステム内部のものをつかって描画してるっぽいんですがなぜですか?
そういうものですか?
941デフォルトの名無しさん:04/09/29 19:59:52
「つもり」の部分が間違っていると思われ。
942デフォルトの名無しさん:04/09/30 02:06:58
ビットマップの中のDLLを呼び出したいんですが、

HINSTANCE hInst;
hInst = LoadLibrary("Graphics.dll");

HBITMAP hBitmap;
hBitmap = LoadBitmap(hInst, "IDB_BITMAP1");

とやっても、hBitmap == NULLになってしまってビットマップを読み込めません。
僕のどこが間違ってるんでしょうか。
943デフォルトの名無しさん:04/09/30 02:12:47
dllはMFC用のやつですハイ
944デフォルトの名無しさん:04/09/30 02:13:36
>>942
全体的に間違ってると思います。1行目とか。
その DLL には本当に "IDB_BITMAP1" というビットマップが入ってますか?
MAKEINTRESOURCE(IDB_BITMAP)の間違いではないのですか?
945デフォルトの名無しさん:04/09/30 02:32:28
>>944
1行目書きなおしたら変になってしまいました
自分で作ったDLLなんで IDB_BITMAP1 が入ってるのは間違いないはずなんですが、どうもそれだと読みこめなかったみたいで、
MAKEINTRESOURCE(1000);
と直接リソースIDで指定してもう一度やってみたら読み込めました。
なんでこれだとできるのか分かりませんが、とりあえず解決したみたいです。ありがとうございました。
946デフォルトの名無しさん:04/09/30 03:05:28
>なんでこれだとできるのか分かりませんが

それがわかるまで先に進むな
一歩たりとも
947デフォルトの名無しさん:04/09/30 03:16:40
>>9
MFCなんか嫌いだぁ

>>933
キューの中では順序通りでも PeekMessage で優先して取り出せるでしょ
DispatchMessageが中で何してるかは知るか。

>>940
パレットは別に CreatePaletteとSelectObjectでセットするんだったような
GDI+への対応はいつになるんだ?

>>945
まず無理だろうが、Graphics.dllのソースの中にある resource.h をインクルードしてみるといい。
これがMFCというやつだ。
948デフォルトの名無しさん:04/09/30 08:39:36
>>947 初心者のかたは、回答はお控え下さい。
949デフォルトの名無しさん:04/09/30 10:12:01
>>945
断言していい。
入ってない。
そういうあいまいな認識でコード書くと周りに甚大な被害を及ぼすからやめてくれ。

>>947
引っ込め。
950デフォルトの名無しさん:04/09/30 12:29:16
>>947
これほど的外れな回答も珍しいな。
951デフォルトの名無しさん:04/09/30 20:41:04
ピクチャーボックスに表示されている画像を取り込んで保存しているのですが
どうも一回目は保存されなく2回目から保存されます。
いろいろと設定しているですがうまくいきません
どなたか教えてくださいませ
ソフト visualstadio 6.0
OS  win xp

ビットマップインフォを作成する
DDBを作成してウィンドウからビットマップをコピー
メモリ割り当ててビットマップからデータを取得
ビットマップファイルヘッダーを作成
データをファイルへセーブ の手順でやっています
hfile = CreateFile(fn,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,0,NULL);
WriteFile(hfile ,&bmfh,sizeof(bmfh),&tmp,NULL);
WriteFile(hfile,&pbmi->bmiHeader,sizeof(pbmi->bmiHeader),&tmp,NULL);
if(pbmi->bmiHeader.biBitCount <= 8)
{
WriteFile(hfile,pbmi->bmiColors,sizeof(COLORREF)*(1<<pbmi->bmiHeader.biBitCount),&tmp,NULL);
}
SetFilePointer(hfile,bmfh.bfOffBits,NULL,FILE_BEGIN);
WriteFile(hfile,pbits,pbmi->bmiHeader.biSizeImage,&tmp,NULL);
CloseHandle(hfile);
952デフォルトの名無しさん:04/09/30 20:43:55
MFCをこれから勉強しようと思っていますが
オススメの書籍等あれば教えていただけませんでしょうか?
953デフォルトの名無しさん:04/09/30 20:52:37
>>951
・1回目に保存処理が走っているのか確認
・各APIの戻り値を確認
954デフォルトの名無しさん:04/09/30 21:00:54
>SetFilePointer(hfile,bmfh.bfOffBits,NULL,FILE_BEGIN);
これ?
955デフォルトの名無しさん:04/09/30 22:23:05
>>952
VCそのものを全く知らん状態で始めるならとりあえず入門書として
林晴比古の本なんかを薦めてみるが、取っ掛かりだけ掴めれば
後は余程専門的な事をやらない限りはネットで調べた方が早いし
詳しい情報が載ってる。
MFCアプリウィザードで作ったダイアログについて。
CDialgを継承したクラスに
WaitForSingleObject()を使って
常に特定のイベントがシグナルか監視する
独立した関数を作りたいのですが
良い方法はありませんか?
良かったら教えてください。
957デフォルトの名無しさん:04/09/30 22:59:47
スレッド。
958デフォルトの名無しさん:04/09/30 23:34:27
>>951
関係ないけどFILE_SHARE_WRITEはやめといた方が・・・
959デフォルトの名無しさん:04/10/01 07:54:32
>>952

>>955に同意。
ただし、MFC入門書は良書が多いので問題ないけど、
その後をどう進むかだね。
C++の専門書(入門書でなくSTLに触れていて、テンプレート関連が充実)
を読むのが良いかも。
960デフォルトの名無しさん:04/10/01 16:00:11
質問

環境:WinNT、VC6.0
でMFC使ってる者です
BOCのFlexGrid使ってるんですが
これのツリービューを作っているんですが
状態の保持が上手く出来ません
ツリーのオブジェクトを削除したり置換したりすると
縮めたオブジェクトが展開されてしまいます
961デフォルトの名無しさん:04/10/02 00:15:01
>>960
BOC(現GrapeCity)ならサポートが丁寧だから向こうに聞いたら?
Gridでなんでツリーなのかよく判らんが。
962デフォルトの名無しさん:04/10/02 01:38:26
>>960
で、質問は何なの?
963デフォルトの名無しさん:04/10/02 10:55:29
MFC用のDLLはVisual Basicからも呼び出せます
964デフォルトの名無しさん:04/10/02 11:01:17
か?
965デフォルトの名無しさん:04/10/02 17:16:29
どうも951です
現在2chブラウザ使えないの状況下なのでこうなってます
>>958さん
FILE_SHARE_WRITEはやめといたほうがいいといいますがそれはどういうこと
ですか?
>>954さん
一応命令は削除してみましたが変化は見られませんでした
>>953さん
APIはすべて確認したところすべて正常でした
自分の考えでは再描画系に問題があったのではないかと判断しております

みなさま、ご意見ありがとうございました。
966デフォルトの名無しさん:04/10/02 17:19:53
タイヘン恐縮なのですがみなさまご教授ねがいと思います

ピクチャーボックスの枠を消去したいのですがネットで方法を
探しているのですが見つかりません
どなたかおしえてくださいませ
967デフォルトの名無しさん:04/10/02 17:24:35
>>966
ビットマップスタイル
968sage:04/10/02 17:37:10
ビットマップスタイル?
969デフォルトの名無しさん:04/10/02 17:41:26
ビットマップTypeか
970デフォルトの名無しさん:04/10/02 17:58:32
>>965
>FILE_SHARE_WRITEはやめといたほうがいいといいますがそれはどういうこと

denyじゃなくてshareだぞ。
複数の書き込みオープンを許すんだぞ。
971デフォルトの名無しさん:04/10/02 18:07:24
WS_EX_CLIENTEDGE
972デフォルトの名無しさん:04/10/02 18:20:39
>>966ピクチャーボックスじゃなくて CPictureHolder
973デフォルトの名無しさん:04/10/02 19:57:41
CSplitterWndを動的分割ウィンドウで使う場合は
ネストって出来ないんでしょうか?
ネストした子側のウインドウサイズが0x0になっていて
うまく動作しませんでした。
親側のビューをDeleteView()やGetPane()->DestroyWindow()などで
削除してみたりしたんですが変わりませんでした。
よろしくお願いします。
974デフォルトの名無しさん:04/10/02 21:31:19
こちらの方が適当と誘導されたので、再度質問させてください。

707 名前:デフォルトの名無しさん[sage] 投稿日:04/10/02 19:32:00
質問です。
メインのダイアログ(MainDlg)にタブコントロールを貼り付けて
PropertySheet(CPage3)を作成し、その上にRadioButton(IDC_RADIO1)を貼り付けました。

で、CPage3.hのメンバ変数に
public:
CButton *m_pButton1;
と書いて
CPage3.cppに
CPage3::CPage3()
: CPropertyPage(CPage3::IDD)
{
m_pButton1=(CButton*)GetDlgItem(IDC_RADIO1);

}
と書きました。
で、MainDlg.cppのOnInitDialog()
に、m_pPage3->m_pButton1->SetCheck(1);
と書きました。
ちなみにこの動作を入れなければ、タブコントロールもきちんと動いてますし、他のコントロールへの操作も出来てます。
しかしこれを入れると、実行時に不正な処理を行いました。 と言われます。
何故でしょうか?
VC++.NET2003でMFCを使ってます。
宜しくお願いします。

975デフォルトの名無しさん:04/10/02 21:31:28
>>973
やったことあるので出来ると思います。
CSplitterWnd のソースだかどっかにうんこのようなASSERTが入ってた気がするので
オーバーライドとかで回避しないとデバッグ時に死ぬ。
976デフォルトの名無しさん:04/10/02 21:38:47
すごい、簡単なことかもしれませんがあえてお聞きします
CString型 に改行文字を入れることは可能なのか
CString型 に改行文字を入れた状態でファイル書き込みWriteFileを
行った場合改行されるものなのですか?
自分はやってみたのですが無理でした
CString a="aiueo"+'\n';
すいませんが教えてください。
977デフォルトの名無しさん:04/10/02 21:42:32
CString a="aiueo"+'\n';
↑なんじゃこりゃ

・・・ポインタと整数の足し算だからエラーも警告も出ないのか・・・。
978デフォルトの名無しさん:04/10/02 21:46:59
>>976
可能。
Windowsでは改行を "\r\n" の2文字であらわしているので、
CString a="aiueo\r\n";
979973:04/10/02 21:50:53
>>975
情報ありがとうございました。
さっそくやってみます。
980デフォルトの名無しさん:04/10/02 21:53:18
>>978
バッファにいれとく限りにおいては、「\n」だけで良いんじゃないか?
テキストモードにしとけば、ファイルへの出力の時に内部処理で\r\nになる。
981デフォルトの名無しさん:04/10/02 22:04:09
WriteFileにテキストモードなんかあったっけ?
982デフォルトの名無しさん:04/10/02 22:23:55
>>978さんどもです
そのとおり実行できましたー
ありがとうございます
983デフォルトの名無しさん:04/10/02 22:35:32
>>981
CStdioFile使う手はある。
984デフォルトの名無しさん:04/10/02 22:52:02
またまた質問で申し訳ないのですが
CFileDialogを使って任意でファイルを保存するようにしているのですが
すでにあるファイルを、上書きしようとしたら警告がでません。
拡張子をつけた状態では警告文はでるのですがわざとファイル名から拡張子を
消してみると今度は警告がでません。おそらくファイル名の文字列が
違うので警告文がでないのは承知なのですが拡張子は同じはずなので
警告がでてほしいのですが、対処方法がわかりません、すいませんがご教授
お願いいたします
CFileDialog myDLG(FALSE,NULL,NULL,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"ビットマップ(*.bmp)|*.bmp||");
if(myDLG.DoModal() != IDOK) return;
985デフォルトの名無しさん:04/10/02 23:49:47
コモンダイアログ使っておきながら myDLG ですか?
986デフォルトの名無しさん:04/10/03 00:05:49
>>985
いいからもう寝ろ。
987デフォルトの名無しさん
>>974
コンストラクタではタイミング的に早すぎて、
GetDlgItem(IDC_RADIO1)が成功しないんだと思う。
OnInitDialog()内で行ってみては?