5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

■MFC相談室 mfc11.dll■

1 :デフォルトの名無しさん:04/06/24 22:47
Microsoft Foundation Classライブラリ専用スレです。

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

関連リンクは >>2-10 の辺り。


2 :デフォルトの名無しさん:04/06/24 22:48
過去スレ
■ 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


3 :デフォルトの名無しさん:04/06/24 22:55
>>1
Z!

4 :デフォルトの名無しさん:04/06/25 00:48
まえすれ
>>972
Thanks!
これでOKザウンス!

5 :デフォルトの名無しさん:04/06/25 01:42
捕手しときます

6 :デフォルトの名無しさん:04/06/25 15:41
MFCってもうすぐなくなるそうですが、本当ですか?

7 :デフォルトの名無しさん:04/06/25 15:44
>>6
本当です。

8 :デフォルトの名無しさん:04/06/25 20:55
MFC42.DLL
   シニ

で命運尽きたと見るべきだろう

9 :デフォルトの名無しさん:04/06/25 21:20
MFCは永久に不滅です

10 :デフォルトの名無しさん:04/06/25 22:37
最初からMSの提唱プログラミング技術は信用していない。


11 :デフォルトの名無しさん:04/06/25 22:37
「の」の位置が変になった。

最初からMS提唱のプログラミング技術は信用していない。

12 :デフォルトの名無しさん:04/06/25 22:44
CP/Mのパクリ
UNIXのパクり
CORBAのパクリ
SmallTalkのパクリ
Javaのパクリ

オリジナルは??

13 :デフォルトの名無しさん:04/06/25 23:03
無い。

14 :デフォルトの名無しさん:04/06/25 23:31
COMは何のパクリ?

15 :デフォルトの名無しさん:04/06/25 23:33
MS-DOS

16 :デフォルトの名無しさん:04/06/26 00:50
話の流れ断ち切るようですみませんが質問させてください

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



17 :デフォルトの名無しさん:04/06/26 02:50
>>16
MFCを継承していじりたおす。

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

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

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

どなたか知ってる方お願いします。

19 :デフォルトの名無しさん:04/06/26 15:44
>>18
Escキーで終了すると0x1bで、Enterキーで終了すると0x0dになるはずですが。
これはちっともエラーではございません。

20 :本田:04/06/26 18:10
>COMは何のパクリ?

CORBA

21 :デフォルトの名無しさん:04/06/27 08:55
クライアントがインプロセスサーバーの関数を直接呼べるのは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が出てきますが、
このコモンダイアログを表示するという記述がされている部分がありません。

これらのコード(ソース)は、どこに記述されてるのでしょうか?


23 :デフォルトの名無しさん:04/06/27 13:27
>>22
VCをインストールしたディレクトリ下のMFCってとこにソースがある。
その中をgrepしてみれば?

24 :デフォルトの名無しさん:04/06/27 14:03
Attachってどういうものなんでしょう?

25 :デフォルトの名無しさん:04/06/27 15:22
>>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)



27 :デフォルトの名無しさん:04/06/27 16:36
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
リソースは
リンクするメイン側に置くのですか?

28 :デフォルトの名無しさん:04/06/27 16:41
>>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[]
のように、外部ファイルドロップで起動した時、
ドロップしたファイル名を取得するにはどうすれば良いですか?

30 :デフォルトの名無しさん:04/06/27 17:19
>>29
Wizardが吐いたソースならCHogeApp::InitInsatance()の中に
 CCommandLineInfo cmdInfo;
 ParseCommandLine(cmdInfo);
ってコードあるでしょ。そのあたりで調べてみれば?
あと、__argcと__argvとか。

31 :デフォルトの名無しさん:04/06/27 17:26
>>30
助かります!調べてみます!


32 :デフォルトの名無しさん:04/06/27 17:32
>>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」と出てるのでエラーはないと思われますが。

34 :デフォルトの名無しさん:04/06/28 00:19
Createの戻り値が見れると言うことは、
そこではエラーが出ていないのでは?

35 :33:04/06/28 00:33
>>34
すいません。
今、どうにか解決できました。
大変申し訳ございませんでした。

36 :デフォルトの名無しさん:04/06/28 05:51
CEditでJaneDoeのDoe部分みたいに
文字に色つけたりフォント変えたりリンク踏めるようにするのはどうすればいいんですか?
今はリッチエディットでやってるけど98とXPだとdllのバージョンが違うし
微妙に重かったり、選択の文字色反転がイヤだったりで、改造したいんですよ。

37 :デフォルトの名無しさん:04/06/28 12:59
無理

38 :デフォルトの名無しさん:04/06/28 16:47
>>36
codeguruとかにヒントになるソースがあったはず

39 :デフォルトの名無しさん:04/06/28 17:07
CComboBoxでCBS_SORTを動的につけたり外したりって無理でしょうか?
SetWindowLongでできなかったんですが…

40 :デフォルトの名無しさん:04/06/28 17:09
MFCで作ったアプリは、MFCのDLLを添付しないと
実行することはできないのでしょうか?
自分が作ったExeのみで配布することはできないでしょうか?

41 :デフォルトの名無しさん:04/06/28 17:16
>>39
1. ResetContent
2. スタイル付け替え
3. AddString
でもダメ?
すでにあるアイテムのソート/非ソートをスタイル変更で
切り替えてくれるような器用な造りにはなっていないと思う。
けど、これはAPIスレ用の話題だな。
>>40
MFCをスタティックリンクすれば。

42 :デフォルトの名無しさん:04/06/28 17:36
>>40
VC6以前のVCでビルドしたものならDLLの心配はしなくていい
ほとんどのwin32環境でDLL持ってるのが当たり前になってるから

VC7以降なら注釈を付けてDLLのインストールが必要なことを書いておくか
同梱するかした方がいい

43 :デフォルトの名無しさん:04/06/28 17:40
>>40
MFCのスタティックライブラリを使用にする

44 :39:04/06/28 18:39
>>41
駄目でしたorz
APIスレに移動してみようと思います。ありがとうございました。

45 :デフォルトの名無しさん:04/06/28 19:15
>>40
スタティック ライブラリで MFC を使用する

46 :デフォルトの名無しさん:04/06/28 21:59
ダイアログベースでボタンをつくってそのボタンをクリックすると
メニューの開くと同じ動作させるにはどうすればいいでしょうか?

47 :デフォルトの名無しさん:04/06/28 22:08
>>46
CMenu

48 :デフォルトの名無しさん:04/06/28 22:11
>>46
「開く」のメニュー項目と同じIDのボタンを

49 :デフォルトの名無しさん:04/06/28 23:18
>>47 48
できました

ダイアログに開くからえたビットマップをダイアログのピクチャーボックス
に表示するにはどうすればいいのでしょう?

50 :デフォルトの名無しさん:04/06/28 23:29
・ダイアログから得たのでないビットマップをピクチャーボックスに表示する方法を調べる
・それをダイアログから得たビットマップファイルの場合に応用する

51 :デフォルトの名無しさん:04/06/29 00:10
>>41
>>42
>>43
>>45
ありがとうございます。
スタティックは知っていたのですが、
結局Exe以外にも添付しなきゃならないとか何とか・・・・
ってどこかのHPで書いてあって、
結局駄目なのか?と思ってたので。。

一応、どのWindowsでも動かないとまずいって言うので、
(95は除外してもよさそうなのですが)
困ってたんです。
環境はVC6なので、大丈夫かと思うのですが。


52 :デフォルトの名無しさん:04/06/29 00:26
ちなみにVC.NETスタティックリンクで
作ったexeを検証したところ
Win98 WinME Win2000 WinXP (by VirtualPC)
で動いてます

53 :デフォルトの名無しさん:04/06/29 03:07
>>52
ついでにランタイムライブラリもスタティックリンクにしとけよ

54 :デフォルトの名無しさん:04/06/29 04:27
Formベースで作ったプログラムを作って、出来たクラスがCXXXView、CXXXDoc、(その他)とした時
CXXXView.h 内で CXXXDoc.h を
CXXXDoc.h 内で CXXXView.h を
それぞれインクルードするとコンパイル出来ないのですが、そう言うものなのでしょうか?
インクルードする順番も一応変えてみたりしたのですが、無理でした。
この方法が無理ならば、DocとViewで相互に呼び出したいときはどうしたらいいのでしょうか?

55 :デフォルトの名無しさん:04/06/29 09:05
>>54
CView::GetDocument()
CDocument::GetFirstViewPosition()
CDocument::GetNextView()

DocからViewは普通はポインタを使って直接呼び出すのではなく
CDocument::UpdateAllViews()でドキュメントの変更を通知する。
あとはCView::OnUpdate()で。

56 :デフォルトの名無しさん:04/06/29 09:30
ていうか、相互に呼び出したいだけなら.hでインクルードする必要ない

57 :デフォルトの名無しさん:04/06/29 11:21
ダイアログにラジオボタンを付けて
それにコントロール変数を追加したいんですが
VC6の時は、グループ先頭を「グループ」にチェック入れて
int変数を追加できたんだけど
VC7.1だと先頭のGroupをtrueに設定して
コントロール変数を追加しようとすると
BOOLしか追加できないみたいなんです
intで追加できないんでしょうか?

58 :デフォルトの名無しさん:04/06/29 17:46
>>54
ちょい工夫すれば容易にできる話だが・・・
だが、そーゆーPGはやめておけ。

59 :デフォルトの名無しさん:04/06/29 23:38
予め決められたハングル文字を表示したいのですが、
ソースにハードコーディングしたら駄目らしく、
かといってストリングテーブルにいれたら???となってしまいます・・・
文字セットはUnicode文字セットを使用しているので、
エディットボックス間のコピー等は上手く行くのですが・・・

どなたかお知恵を貸して下さい


60 :デフォルトの名無しさん:04/06/29 23:40
つかおまいの環境、ハングル入ってるのか?

61 :デフォルトの名無しさん:04/06/29 23:43
>>60
WinXPなんで、言語のあたりをいじると、ハングルIMEが使えます。
けど、OCNの翻訳サイトで単語訳してコピペする予定です

62 :デフォルトの名無しさん:04/06/29 23:50
最新のでも開発環境そのものはUNICODE対応していないんだっけ?


63 :59:04/06/29 23:55
>>62
やっぱVC++じゃ駄目ですかね・・・・orz
何故かVBとVC#はすんなり出来てくれたんですが、
どーしてもネイティブじゃないと嫌なもんで・・・

64 :デフォルトの名無しさん:04/06/30 00:02
>>59
今AppWizard見てみたのだが、リソースに使用する
言語ってコンボがあるが、それには日本語、英語しか
ないからOSもVCもハングル版買わないといかんのでは?

65 :デフォルトの名無しさん:04/06/30 00:14
wchar_t a[] = L"\uac00\uac01\uac02\uac03";
MessageBox(NULL, a, L"韓国語", MB_OK);

少なくともこういうのは通るし動くんで、
・ソースはUTF-8とかでハングルで直接書く
・プリプロセッサとして、UTF-8なソースをShift_JISなソースに書き換える
(リテラルのユニバーサルキャラクタへの置き換え)物を作る
でなんとかなるんじゃ。リソースはどうにもなんないかもだけど。

66 :59:04/06/30 00:20
>>64
そこには「韓国語」っていうのもあるんですが、
コード生成時に何やらエラーが出て止まります。
やはり環境が揃ってないと無理なんでしょうかね・・・
レスくれた方、どうもありがとです。
もうちっとVC++で粘ってみます。

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



67 :デフォルトの名無しさん:04/06/30 11:29
>>59
MSDNの「Unires サンプル : Unicode リソース ファイルの使用」
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vcsample/html/vcconuniressampledemonstratesuseofunicoderesourcefiles.asp
は?


68 :59: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;

の様に使う事で、多言語対応する事ができました。

69 :デフォルトの名無しさん:04/06/30 21:59
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;

70 :デフォルトの名無しさん:04/06/30 22:02
続き
//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)を記述すると問題なく動作
します。理由がどうしてもわかりません。

71 :69:04/06/30 22:49
書き忘れました、環境はVC++6.0です。

72 :デフォルトの名無しさん:04/07/01 09:18
実は全然別のところが問題とか。

73 :デフォルトの名無しさん:04/07/01 10:42
>>69
メンバ関数版じゃなければ表示されるんでない?<MessageBox()
AfxMessageBox()だっけ?

74 :デフォルトの名無しさん:04/07/01 11:47
.NET 2003はユニコードに対応しているよ。
ファイルの保存でユニコードで保存してやると
ちゃんと保存される。


75 :デフォルトの名無しさん:04/07/01 11:56
>>69
ほんとだね
これはなかなか興味深い
ちょっと調べてみるか

76 :75:04/07/01 12:05
まず、OnPaintメッセージがきたときに、ディフォルトの動作を行わないせいで
何時までたってもウインドウが無効領域のままになる
なのでOnPaintの無限ループのような状態が起きている
これのせいで、MessageBoxがメッセージを受け取れないみたいだね
WM_PAINTのディフォルト処理を入れなきゃウインドウズプログラムはだめだってことで

77 :75: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メッセージでループしている

説明下手ですまんが、大体のニュアンスは分かっていただけたかな?

78 :デフォルトの名無しさん:04/07/01 13:33
>>68
多言語リソースは.rc2の方に書いておけば、リソースエディタは影響受けない。
もちろん、逆にそこの部分はリソースエディタの支援をまったく受けられなく
なるんだけど、C(++)ソース中にユニバーサルキャラクタで書き込むよりは
可読性があっていいんじゃないかと。
ちなみにユニコードで保存したrc2ファイルは、テキストファイルとして
VisualStudioで編集できる。

79 :69:04/07/01 20:05
75さんとても丁寧な説明ありがとうございます。
WM_PAINTメッセージが送られ続けているということですね。

Windowsプログラムはまだやり始めたばかりでわからないことが多いですが
とても楽しいです。
これからもがんばっていこうと思います。
本当にありがとうございました。

80 :デフォルトの名無しさん:04/07/02 16:30
ダイアログボックスにCAD図形みたいなものを描画するときって、
何かいいコントロールとかってありますか?
ピクチャーコントロールって、こういうときに使うのでしょうか?

81 :デフォルトの名無しさん:04/07/02 16:45
>>80
俺はこういう時に使ってる

82 :デフォルトの名無しさん:04/07/02 17:03
>>80
ダイアログボックスに貼り付けると、IDがIDC_STATICとなって、
普通のスタティックテキストと扱いが同じなんだよね。
で、どうやって使わせようとしているのかの意図が読み取れなくて???


83 :デフォルトの名無しさん:04/07/02 18:09
藻前が何を言おうとしているのか読み取れねーよ!!!

84 :デフォルトの名無しさん:04/07/02 18:53
自分で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;
    }
}
という感じです。

86 :デフォルトの名無しさん:04/07/02 22:14
>>85
InvalidateRect()してみるとか?

87 :デフォルトの名無しさん:04/07/02 22:34
アクティブなアプリが他のアプリだから画面更新されんってことか?
プロセス間通信はイベントオブジェクト以外苦手じゃ

88 :デフォルトの名無しさん:04/07/02 22:43
SetScrollPosは「スクロールバーの情報を書き換えるだけ」なので、
それじゃアプリにスクロール要求は出ない。
他アプリをスクロールさせるってのはやったことないけど、
単純にWM_xSCROLLを送ればいいんじゃなかろうか。

89 :デフォルトの名無しさん:04/07/02 22:57
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);
}


90 :85です。:04/07/02 23:12
みなさんありがとうございます。>>88さんのおっしゃるとおり、
親にWM_VSCROLLを送ることで実現できました。


91 :デフォルトの名無しさん:04/07/03 00:13
>>89
普通はどっちなんだっけ?
ともかく、ダイアログ関係を中央に出そうとするのはCenterWindowの仕業だから、
そこにブレークポイントをかけて、しかるのちに対策を考えればいいかと。

92 :デフォルトの名無しさん:04/07/03 04:12
>>89
そのスレッドでダイアログの情報を持ってないのが原因だろうから、
何らかの方法でCWnd*を渡してメンバ関数版を使えばいいんでないかな。

93 :デフォルトの名無しさん:04/07/03 14:40
>>89
試していないけど、CHogeDlgがCDialogを継承
しているならのメンバ関数のメッセージボックスを
呼び出せばいいんじゃないの?

94 :デフォルトの名無しさん:04/07/03 16:44
>>89
>ダイアログの中央に出す方法はありませんか?
方法はある。 WM_INITDIALOG
もっと簡単な方法が知りたいってことか?
どんくらいまでわかるのかを書かないと
それこそ基本中の基本から説明せにゃならん。
もちろん、それは万単位が相場で只ではできない。

95 :デフォルトの名無しさん:04/07/03 19:39
MDIでフォームビューを選んだとき、フォームのダイアログのサイズを
MoveWindow()とかSetWindowPos()でサイズを変えようとすると
必ず落ちますが(DEBUGビルド時)、これって許されないのでしょうか。
CChildFrameのサイズに合わせて大きさを変えたいのですけど。


96 :95:04/07/03 19:54
>>95
簡単にいいますと、フォーム内のダイアログテンプレートのサイズを
変更するにはどうしたら良いのか、ということです。
単純にGetDlgItem()ではダメですよね。NULLが返ってきてしまいます。


97 :89:04/07/03 22:47
>>91,92,93,94
回答ありがとうございます。
とりあえずスレッド作成元のCWnd*をグローバル変数に設定して、
スレッド内からMessageBoxを呼び出す方法と、直接メンバ関数の
MessageBoxを呼び出す方法を試しましたが、結果は同様でした。
なお作成元のスレッドでAfxMessageBoxを呼び出した場合には、ダイアログの
中央に表示されます。
>>94
当方組み込み向けのCが本職で、Windowsプログラムはほとんど経験がありません。
スレッド内でメッセージボックスを表示させることはWindowsプログラムではほとんどしな
いことなんでしょうか?

98 :デフォルトの名無しさん:04/07/03 22:59
>>97
俺もあまり詳しくはないが、そこまでMessageBoxにこだわる必要はないのでは?
メッセージ出力用のダイアログクラスを作成して、そのクラスに親の位置を渡せば良いのでは
ないのかな
ダイアログクラスなら、OnInitDialog()で表示位置やサイズを変更すると簡単なんだけど。
意図していたことと違うかもしれないが、暫定的にしておいて、他のもっと重要なところに
パワーをかけた方が良いと思うよ

99 :デフォルトの名無しさん:04/07/03 23:47
>>97
スレッドにはメッセージループを持つスレッドと、持たないスレッドがある。
WM_INITDIALOGはメッセージなわけだが・・・

100 :デフォルトの名無しさん:04/07/04 02:13
>>97
Windowsでは、ウインドウはどれかのスレッドに属している、
つまりスレッドがウインドウを保持しているといっていい。
そして1つのウインドウは複数のスレッドに共有されることは無い。
ウインドウには親子関係があるがこれは同一スレッド内においてのみ有効
スレッドがウインドウを作った場合親ウインドウに別のスレッドのウインドウを
指定しても無効になる
メッセージボックスの場合、内部的にCenterWindowが呼ばれるわけだが、
親ウインドウがいないもしくは無効な為、ど真ん中に表示されてしまう
どうしてもと言うなら、試したこと無いので出来るかどうかわからないが
見えない親ウインドウをスレッド元のウインドウサイズにあわせて作って
おいてメッセージボックスを呼び出すとか


101 :デフォルトの名無しさん:04/07/04 02:20
>>96
つまり、スクロールバーを表示させたくないってこと?

102 :デフォルトの名無しさん:04/07/04 02:28
>>96
一応調べてみたらこういうのあったけど
ttp://www.codeproject.com/docview/resizableformview.asp

103 :デフォルトの名無しさん:04/07/04 17:52
CStringArrayのサンプルプログラムが欲しいです。
参考ページでもいいのでお願いします。

104 :デフォルトの名無しさん:04/07/04 18:00
>>103
別スレだけど
http://pc5.2ch.net/test/read.cgi/tech/1087929711/969
でCの宿題の回答にCStringArray使ってるね


105 :デフォルトの名無しさん:04/07/04 18:09
>>104
コンパイルすらできない俺って・・・_| ̄|○
VC7ですが、助けてくださらんか?

106 :1/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();
}


107 :2/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;
}
}

108 :105:04/07/04 18:48
>>106
VCを初めて3日目なんで、こういうコードを載せてもらった場合、
どうやってスケルトン?(でしたっけ)を作るかわかりません。
MFCアプリケーションで作ればいいのでしょうか?

109 :105:04/07/04 18:49
>>106
サンプルコードありがとうございました。
お礼が遅れて、すみません。


110 :デフォルトの名無しさん:04/07/04 19:01
>>105
上のコードだとMFCとは言ってもMFCの中の
CStringArrayを使うだけで、中身はコンソールプログラム
だから(簡単に書くとコンソールプログラムはmainから
始まり、ウィンドウズプログラムはWinMainから始まる)
とりあえず、Win32コンソールプロジェクトで作成する。
で、CStringArrayを利用するにはMFCをリンクする必要が
あるのでプロジェクトのプロパティで「MFCの使用」を
「共有DLLでMFCを使用する」または「スタティックライブラリ
でMFCを使用する」に設定する。
始めて3日だと、リンクとかDLLとかスタティックとか言われても
わけわからないだろうけど、MSDNにも情報があるのでこつこつ
やってちょ。

111 :105:04/07/04 21:29
>>110
がんばってコンパイルはとおりましたが、エラーが出て実行できませんでした。
もっと勉強します。

112 :デフォルトの名無しさん:04/07/04 21:36
スプラッシュウインドウとしてメッセージを表示させるだけの
ダイアログにスタティックウインドウを貼り付けただけのウインドウを作りました
CWinApp::InitInstance中で作成、表示させようとするとウインドウ自体は
表示されるのですがスタティックコントロールのメッセージが表示されません。
メッセージはInitInstanceの関数を抜けたあとなら表示されるので
ただ単純に再描画の為のメッセージを受け取れていないだけだと思うのですが
InitInstance中にメッセージポンプ入れるなど色々試してみましたが思うように
表示されません。

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



113 :デフォルトの名無しさん:04/07/04 21:36
質問なのでage

114 :デフォルトの名無しさん:04/07/04 21:37
>>113
これはダメかもわからんな

115 :デフォルトの名無しさん:04/07/04 21:43
>>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;
}

116 :デフォルトの名無しさん:04/07/04 21:50
つーか始めて三日でなんでCStringArrayなのか分からない。
まずCString、そのうちCArrayって感じだと思うが。それぞれの
概念が理解できていれば、Arrayの仲間についても自然と分かる
はずだし。

117 :105:04/07/04 21:51
>>115
ありがとうございます。
なんとなく、わかりました。
何でも作れるようになる・・・素晴らしい言葉ですね。
頑張ってマスターします。
今後とも宜しくお願いします!

118 :デフォルトの名無しさん:04/07/04 21:59
素直にvector使おうよ…

119 :デフォルトの名無しさん:04/07/04 22:04
>>118
MFCで作っている限りにおいてはvectorを使用するよりも
CStringArrayのほうが利点が多い


120 :デフォルトの名無しさん:04/07/04 22:05
漏れもMFC使ってる分にはSTL使わないなぁ


121 :105:04/07/04 22:30
>>118
vectorを使うとCStringArrayよりいいのでしょうか?

122 :デフォルトの名無しさん:04/07/04 23:08
>>121
CString使うなら、CStringArrayで問題ない。

123 :151:04/07/04 23:16
>>122
逆にstringだとvectorですか?

124 :デフォルトの名無しさん:04/07/04 23:31
MFCでコンテナとして使うだけならデバッグ性能やシリアライズが出来る
CStringArrayが良い
アルゴリズム使う場合はstlだけどね


125 :デフォルトの名無しさん:04/07/04 23:32
該当するものがなければvectorなり使うしかない。

126 :デフォルトの名無しさん:04/07/04 23:35
>>125
該当するものとはどういう意味ですか?

127 :デフォルトの名無しさん:04/07/04 23:37
ちなみに、VCでstl使うならstlportの方が良いよ

128 :デフォルトの名無しさん:04/07/04 23:42
スレッドを使うプログラムを作ったのですが、
スレッドからダイアログにメッセージをセットしようとするとアサートします。
スレッドが怪しいのですが、
UINT thread(LPVOID pParam)で作って
CTestdlg;

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

では駄目なのでしょうか?
どうすればセットできますか?


129 :デフォルトの名無しさん:04/07/04 23:42
>>127
だったらBoostでいい

130 :デフォルトの名無しさん:04/07/04 23:45
>>129
俺も使ってるけどねboost
ただ敷居がちと高い

131 :112:04/07/04 23:46
もう少し詳しく書いてくれたら教えるよ

132 :デフォルトの名無しさん:04/07/04 23:47
>>128だった


133 :デフォルトの名無しさん:04/07/05 00:00
>>110
便乗で申し訳ありませんが、
1.「共有DLLでMFCを使用する」
2.「スタティックライブラリでMFCを使用する」

1.2はどうちがうのでしょうか?

134 :デフォルトの名無しさん:04/07/05 00:01
>>129
boostはstl実装じゃないじゃん。

135 :デフォルトの名無しさん:04/07/05 00:01
libをリンクするか、dllを使うかの違い。

136 :デフォルトの名無しさん:04/07/05 00:06
>>132
ダイアログベースでスレッドをコールするようにしているのですが、
そのクラスへ Cクラス dlg
として、dlg.GetDlgItem(IDC_EDIT1)->SetWindowText(msg)とすると
アサートします。
コンパイルは通るのですが。


137 :デフォルトの名無しさん:04/07/05 00:08
>>136
ワーカスレッドで作ってるから。

138 :デフォルトの名無しさん:04/07/05 00:10
>>137
他にどんな方法があるのでしょうか?

139 :112:04/07/05 00:12
>>136
う〜ん、わからんw
まずスレッドを生成している場所はどこ?
生成方法は?


140 :112:04/07/05 00:13
ついでにそのダイアログクラスは、元のダイアログなの
関係が上手くつかめない

141 :デフォルトの名無しさん:04/07/05 00:14
>>138
ユーザーインターフェイススレッド

142 :デフォルトの名無しさん:04/07/05 00:15
>>139
生成場所はダイアログで実行される関数内です。
CWinThread *p_thread = ::AfxBeginThread(Thread, this);
こんな感じでThread関数を呼び出します。
UNIT Thread(LPVOID pParam)
ワーカスレッドを真似てみたのですが。。怪しいです


143 :デフォルトの名無しさん:04/07/05 00:17
>>140
ダイアログは一つです。クラスも一つです。(スレッドはクラスの宣言をしてません)

>>141
聞いたことはありますが、使ったことはありませんでした。
ちょっと調べてみます。


144 :デフォルトの名無しさん:04/07/05 00:18
あーなるほど
スレッドに元のダイアログのポインタを引数として渡して
そこからダイアログの子ウインドウに何かやっているってことか


145 :デフォルトの名無しさん:04/07/05 00:20
アサートしているのはどこ、GetDlgItemのウインドウハンドルがNULLとかかな?

146 :デフォルトの名無しさん:04/07/05 00:22
>>144
そんな感じでしようとしてましたができませんでした。


147 :デフォルトの名無しさん:04/07/05 00:23
生成場所のダイアログで実行される関数って何?


148 :デフォルトの名無しさん:04/07/05 00:23
使用で
「マルチスレッドに対応すること」
と書かれていた場合、どんな風に実装すればいいのでしょうか?

149 :デフォルトの名無しさん:04/07/05 00:25
またすごい質問がきたな。w

150 :デフォルトの名無しさん:04/07/05 00:25
>>145
多分そうです。ウィンドウハンドラがNULLです。


151 :138:04/07/05 00:26
>>147
OnOK()です。


152 :デフォルトの名無しさん:04/07/05 00:27
>>148
同時に同じリソースにアクセスされても整合性が取れる実装ってことだね
ライブラリなんかを作る場合、その部分をしっかり作っておかないと不味い


153 :138:04/07/05 00:30
ユーザインタフェーススレッドはこのコール方法で合っていますか?

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

これでCWinThreadの派生クラスを作成しましたが、これでよいのでしょうか?
複数のスレッドにするにはその数分クラスを作成しないといけないのですか?


154 :デフォルトの名無しさん:04/07/05 00:30
OnOkか・・・ちなみに、そのコントロールは存在しているよね


155 :138:04/07/05 00:33
>>154
はい。デフォルトのまま置いてあります。


156 :デフォルトの名無しさん:04/07/05 00:34
>>153
言っておくけどユーザインターフェーススレッドはそのスレッドでウインドウを
マネージしたい場合(メッセージキューを作って云々ってことね)に
作るスレッドなので138の今回の目的のためには使えないんじゃないかと思う

なぜならユーザスレッドとワーカスレッドなんてのはMFCの上だけで存在するものだし
多分もっと根本的な問題だと思うけど

157 :デフォルトの名無しさん:04/07/05 00:37
まさかとは思うけど
OnOKの実装ってそのままにしていない?
CDialog::OnOKのディフォルトって内部でEndDialogを呼び出すけど。。。

158 :デフォルトの名無しさん:04/07/05 00:40
>>155
たぶんソース張ってもらったほうが早いんで、ソース張ってくれます?
スレッドの部分だけでいいんで。

159 :デフォルトの名無しさん:04/07/05 00:43
ちなみに今ダイアログでこんなの作ってみたが問題なく動いたよ
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();
}


160 :158:04/07/05 00:46
>>159
漏れも試したら普通に動いたんで、なにか根本的に間違えてると思う。

161 :138: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とかしてもう少し複雑に処理してますが、
流れはこんな感じです。


162 :デフォルトの名無しさん:04/07/05 00:47
あぁ、やっぱり。。。。

163 :デフォルトの名無しさん:04/07/05 00:48
>CTest dlg;
ここ

164 :デフォルトの名無しさん:04/07/05 00:49
いやな予感はしていたが・・・

165 :デフォルトの名無しさん:04/07/05 00:51
じゃ、後はよろしく
俺は寝ます・・・

166 :138:04/07/05 00:52
>>162-163
直りました。。
ありがとうございました。


167 :デフォルトの名無しさん:04/07/05 01:19
>>106
これをstl使って書いたコードが見たいのですが、誰か書いてくれませんか?

168 :デフォルトの名無しさん:04/07/05 01:47
>>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のイテレータという機能を使った方法。(イテレータは自分で勉強してちょ)



170 :デフォルトの名無しさん:04/07/05 01:53
>>168
深夜にありがとう。
がんがりまっす

171 :デフォルトの名無しさん:04/07/05 02:27
>>106
これさー、datのSTARTとENDそのまま読み込むからエラーになるんだよ。
そりゃ、コンパイル通っても実行はできんさw


172 :デフォルトの名無しさん:04/07/05 22:28
質問です
CDialogBar上に、スピンボタンを配置しました
CDialogBarは、派生クラスを作らないとMSDNにあったのでコントロールのハンドリングは
すべてCMainFrame上に持ってきています。
このようにすると、スピンコントロールがどうしてもEnableになりません
これはどういうことでしょうか
環境はVC6sp6です

173 :97:04/07/05 23:06
メッセージボックスっぽいものを自作することで
解決しました。
回答をくれた皆さんありがとうございました。


174 :デフォルトの名無しさん:04/07/05 23:51
>>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ファイルで受け取って、変数に入れて使用したいです。

宜しくお願い致します。



176 :デフォルトの名無しさん:04/07/06 01:01
>>174
回答ありがとうございます
つまり、CDialogBarを派生させないといけないと言うことですね

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

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


177 :デフォルトの名無しさん:04/07/06 01:04
途中で送信してしましました

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



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

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


179 :デフォルトの名無しさん:04/07/06 08:44
>>175
>>32

180 :デフォルトの名無しさん:04/07/07 02:58
すいません。
ちょっと質問です。

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

結局、SDKの方が分かりやすいと思い、まずはそっちをやることにしました。
みなさんはどうやってMFCを勉強されたのでしょうか?
もっと良い入門書があるのでしょうか?

181 :デフォルトの名無しさん:04/07/07 04:17
>>180
どの関数がどのクラスのメンバか意識するようにしたら理解できた。
関数名しか書いてなくても、クラス名::関数名 っていうようにして憶える。

182 :デフォルトの名無しさん:04/07/07 09:08
>>180
> それでそういう本には、「ウイザードで勝手に作られるんで、カスタマイズしたいときは
> ここをいじってください」としか書いてなくて、

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

もちろん、CやC++の基礎がないようなレベルだったら話は別。そういった
言語レベルの基礎知識は身に付いてないとVCプログラミングは難しい。


183 :デフォルトの名無しさん:04/07/07 09:30
>>180
そんなあなたに
翔泳社の標準講座MFC ハーバートシルト著

184 :デフォルトの名無しさん:04/07/07 15:26
>>180
MFC→ウィザードが生成したものをいじる
SDK→猫からソースパクっていじる

結局同じ

185 :デフォルトの名無しさん:04/07/07 17:16
>>180
食わず嫌いせずとりあえず一番高いものに食いついて、消化できなくて吐き出して、
高い金払って食って吐いて、高い金払って食って吐いて、
食って吐いて、食って吐いて、食って吐いて……と繰り返しあがき続けていたら、
いつの間にかMFCでもSDKでも問題なく使えるようになり、物も食えるようになっていた。

しかし、そこに行き着くまでに消費した書籍代は…… _| ̄|○


186 :デフォルトの名無しさん:04/07/07 20:40
本来、クラスライブラリはその中の構造に関する知識を必要としな
いものだ。したがって
>なぜそこをいじればいいのか
>プログラムがどういう流れになっているのか
なんて気にするな。
と考える俺は少数派だと自覚しております。

187 :デフォルトの名無しさん:04/07/07 20:47
>>185
途中で降りたらベット丸損だぞ
本と同じ重さの札束を狙う大博打ってとこを忘れんな

188 :デフォルトの名無しさん:04/07/07 23:13
void hoge(void)
{
  CPen myPen;


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

CPenってスコープ外れる時に、この辺やってくれないの?

189 :デフォルトの名無しさん:04/07/07 23:31
>  Delete myPen;      ←これもいるんですか?

こんなのいれたらコンパイルとおらねぇよ。

190 :デフォルトの名無しさん:04/07/07 23:34
>>189
myPen.DeleteObject();
これ、必須ですか?


191 :デフォルトの名無しさん:04/07/07 23:40
msdnより、

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

これ見て意味わからんかったら再度質問しろ。

192 :デフォルトの名無しさん:04/07/07 23:45
>>188
その変数がスコープ内で使い切りになっていて、デストラクタによる削除で
間に合う場合は、DeleteObject()が不要。ただしDeleteObject()を書いても
悪くはない。

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

>Delete myPen;
は?

193 :デフォルトの名無しさん:04/07/07 23:49
>>191
>>192
ありがとう、謎が解けました。
これで熱帯夜も眠れそうです。

Delete myPenは立ち読みした時に載っていて、
「え?そんなんまで書くんだ・・・」
と記憶していたもんで・・・

194 :本田:04/07/08 09:07
>復刊リクエスト投票
>MFCインターナル
>著者名 G. シェパード/S. ウィンゴ=著、玉井 浩=訳
>出版社 アジソン・ウェスレイ・パブリッシャーズ・ジャパン
ttp://www.fukkan.com/vote.php3?no=24811

興味のある方は投票お願いします。


195 :デフォルトの名無しさん:04/07/08 14:16
>>188
MFCってよりC++の根本的な理解が足りないだけじゃないんですか?

196 :デフォルトの名無しさん:04/07/08 15:54
>>193
deleteはnewしたときだけ

197 :デフォルトの名無しさん:04/07/08 16:00
>>195
CDCとCClientDCのデストラクタの違いについて
C++の根本的な理解で説明してくれ

198 :デフォルトの名無しさん:04/07/08 16:32
CDC::~CDC()
{
    if (m_hDC != NULL)
        ::DeleteDC(Detach());
}

CClientDC::~CClientDC()
{
    ASSERT(m_hDC != NULL);
    ::ReleaseDC(m_hWnd, Detach());
}

199 :デフォルトの名無しさん:04/07/08 16:33
CPenから話が飛んでますよ

200 :デフォルトの名無しさん:04/07/08 16:57
>>198
それがMFCのお話だ

201 :デフォルトの名無しさん:04/07/08 17:14
っていうか、C++理解していれば、
わざわざここに質問するようなことではないのだが。
単なる仕様だろ。

202 :デフォルトの名無しさん:04/07/08 17:37
そのMFCの仕様が分からないから、ここに質問したのだと思われ・・・

203 :デフォルトの名無しさん:04/07/08 17:50
仕様ならヘルプに書いてあるよ。
>構築時に Windows の GetDC 関数を呼び出し、
>破棄時に ReleaseDC 関数を呼び出します。

204 :デフォルトの名無しさん:04/07/08 21:56
>>202
ヘルプも見ないで質問する人、どう思います?


205 :デフォルトの名無しさん:04/07/08 22:41
>>204
ヘルプを見れない環境ですが、何か?

206 :デフォルトの名無しさん:04/07/08 22:54
>>205
これか
http://www.itmedia.co.jp/news/articles/0407/07/news061.html?nc30

207 :デフォルトの名無しさん:04/07/08 22:58
これから先は、

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

でお送りします


208 :デフォルトの名無しさん:04/07/08 23:01
ム板ってヘルプみたいなもんだろ。違うか?

209 :デフォルトの名無しさん:04/07/08 23:20
>>208
C++の根本的な理解が足りない人

210 :デフォルトの名無しさん:04/07/08 23:27
>>209
C++ と何の関係が?

211 :デフォルトの名無しさん:04/07/08 23:28
>>210
>>195に聞いてくれ

212 :デフォルトの名無しさん:04/07/08 23:33
もうさ、BCBにしとけって
マジおすすめ

213 :デフォルトの名無しさん:04/07/08 23:59
BCBの何がいいのかマジわからんぞ
つか、WindowsアプリではVC最強!

214 :デフォルトの名無しさん:04/07/09 00:02
そんな恥ずかしい事、ageて言わないでくれ・・・


215 :デフォルトの名無しさん:04/07/09 00:31
>>214
>>213は事実ですが・・・

216 :デフォルトの名無しさん:04/07/09 00:35
MASMは?

217 :デフォルトの名無しさん:04/07/09 00:46
名刀のような名前ですね。

218 :デフォルトの名無しさん:04/07/09 01:00
>>213
はげ同
BCBは使えるが、VC++は使えないなんて香具師は
まず、仕事回してもらえないだろうね

219 :デフォルトの名無しさん:04/07/09 01:48
仕事は回ってこないが、意固地な友達が増えるという利点がある。

220 :デフォルトの名無しさん:04/07/09 01:52
スレ違いな話はそろそろやめれくれや

221 :デフォルトの名無しさん:04/07/09 03:16
ヘルプが見れない環境って、
その時点で仕事放棄してるのと同じだ...orz

222 :デフォルトの名無しさん:04/07/09 03:18
>>221
少なくても、本人の仕事環境に対する意識はゼロといえるだろう。
ヘルプが見れない環境のくせに、ここで得意になって質問されてもね。
車でガス欠しちゃうくらい恥と思わなきゃ。

223 :デフォルトの名無しさん:04/07/09 03:19
え?VC++ってヘルプ無いの?!!!
最弱〜 orz

224 :デフォルトの名無しさん:04/07/09 03:49
>>222
まともに答えられないくせに上級者気取りか。
おめでてーな。

225 :デフォルトの名無しさん:04/07/09 04:06
2chできる環境ならオンライン版の
MSDNライブラリが見られるはず。

226 :デフォルトの名無しさん:04/07/09 04:47
レスればレスるほどに恥ずかしさが増してくるよ。
VC++ぐらい1人でインストールしなさいって。
そうすりゃヘルプぐらい見れるから。

227 :デフォルトの名無しさん:04/07/09 05:20
釣られまくりだな

228 :デフォルトの名無しさん:04/07/09 07:59
趣味でやっていますが…

229 :デフォルトの名無しさん:04/07/09 08:57
全部自演ですよ?

230 :デフォルトの名無しさん:04/07/09 09:05
ところで226みたいな奴はこのスレに何を期待してるんだ?


231 :レスる:04/07/09 15:05
レスる

232 :デフォルトの名無しさん:04/07/09 19:07
ヘルプは読み方が分からないってのもあるからねぇ。
日本語かどうかじゃなくて、書いてある言葉そのものが読みきれないっていうか。

その辺をうまく要約してくれる神を求めて、ここに書いてることもあるでしょ。

233 :デフォルトの名無しさん:04/07/10 01:47
MFCを使ったOOPのやり方について解説している本あるいはサイトがあったら教えてくれませんか?

234 :デフォルトの名無しさん:04/07/10 01:54
>>233
こちらへどうぞ
http://pc5.2ch.net/test/read.cgi/tech/1085915001/

235 :233:04/07/10 02:09
すいません、まとはずれな質問しましたか??各クラスの役割がいまいち
よく分からないんですが・・・。

236 :デフォルトの名無しさん:04/07/10 02:12
>>235
まとははずして無いと思います、
まともな回答者を待ちましょう

237 :デフォルトの名無しさん:04/07/10 02:12
>>235
ところでヘルプは読んだか?ヘルプは?

238 :233:04/07/10 02:21
>>237
一応読みました。OOPの勉強はしたのですが、いざMFCで実現しようとすると、どのように
したらよいか、ってのが分かりません。例えば、CWinAppっていうのはコントローラなのか、
とか、ドキュメントクラスはなんなのかってことです。ほかには、画面を次々と切り替えて
行くとき、それぞれの画面のクラスを作成するのか?とかよく分かりません。作成すると
したら、それを切り替えるたり、生成したりするのはどのクラスでするべきなのか、とかです。

239 :デフォルトの名無しさん:04/07/10 02:48
つまり、まだC++使う時期じゃないと思うのですよ。
自分で試行錯誤、いろいろやりながら覚えていく手間を惜しむのなら、
はじめからやめたほうがいいと思います。

240 :デフォルトの名無しさん:04/07/10 02:49
でたな。上級者気取りのオッサン

241 :デフォルトの名無しさん:04/07/10 02:52
>>240
さぞ悔しかったんだろう
ほっといてやれ

242 :デフォルトの名無しさん:04/07/10 02:58
お前ら、まだやってんの?寝たら?

243 :233:04/07/10 03:26
>>239
いや、ある程度実践的なプログラムの作成はこなしたんですが。いまだにどうすべきか、
ってのが分からずだましだましプログラミングしてる状況です。

あと240ではないです。


244 :デフォルトの名無しさん:04/07/10 03:30
>>243
>>239みたいな変な奴に気を使う必要はないよ。

245 :デフォルトの名無しさん:04/07/10 03:34
>>233
実践的なプログラムの作成をこなせてるのなら
今のままでも問題ないのでは?

246 :デフォルトの名無しさん:04/07/10 03:34
なんだ。趣味のプログラムか。

247 :デフォルトの名無しさん:04/07/10 03:36
まさか仕事中に、「ドキュメントクラスってどうやって使うのですか?」
なんて聞いてまわったりしてないよね... orz

248 :デフォルトの名無しさん:04/07/10 03:36
>>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
そういうことじゃないんですが・・・、なんていったらいいんでしょうか?それ、
曖昧なんですよね・・・。その説明じゃ役に立たなかったというか・・・。


253 :デフォルトの名無しさん:04/07/10 11:08
>>252
どうわからないのか説明できないのなら教えようが無いな。

254 :デフォルトの名無しさん:04/07/10 11:18
>>253
例えば、商品注文システムを考えると、商品注文クラス(商品の1回での注文を表すクラス)というのが
ありますよね?それをドキュメントクラスの子クラスとするのか、それとも、そのクラスのオブジェクトを
保持するのがドキュメントクラスなのか、とかです。

255 :デフォルトの名無しさん:04/07/10 11:23
>>254
分離独立です。
関連性もたせちゃダメ

256 :デフォルトの名無しさん:04/07/10 11:29
>>255
ということは、そのクラスのオブジェクトを保持するのがドキュメントクラスってことですか??

257 :デフォルトの名無しさん:04/07/10 11:35
>>238
OOPなんて言葉に縛られず、ひとつひとつのクラスの使い方を確実にマスターしてくことでしょうな。
100個も覚えられれば、そのうちピーンと何かがひらめいてくるだろう。
一度ひらめいてしまえば、クラスなんて覚えなくてもヘルプ片手にプログラムできるようになる。

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



258 :デフォルトの名無しさん:04/07/10 11:53
仮想リストコントロール内でのアイテム選択変更に
SetItemState(nIndex, LVIS_SELECTED, LVIS_SELECTED | LVIS_FOCUSED);
とやっても選択が変わってくれないんですけど、これは使えませんか?
仮想LCだと選択についてもやり方が別になってますか?

259 :デフォルトの名無しさん:04/07/10 11:58
>>254>>256も全部不正解

260 :デフォルトの名無しさん:04/07/10 12:23
>>250
ケータイから2chにアクセスしていますが、何か?

261 :デフォルトの名無しさん:04/07/10 12:24
ドキュメントクラスってのはMVCでいうModel部分。
データ管理部分のクラス。

で、データをドキュメントクラスに持たせるか、派生クラスに持たせるかなんてのは
自分の好きにすればいい。

262 :デフォルトの名無しさん:04/07/10 12:25
>>260
何か?
じゃねーよ。ばか。

263 :デフォルトの名無しさん:04/07/10 12:31
>>262
ケータイから2chにアクセスしています。
ケータイで使えるヘルプのURLを教えて下さい。

264 :デフォルトの名無しさん:04/07/10 12:36
ここで釣られまくってる香具師はプロとして失格だね。

265 :デフォルトの名無しさん:04/07/10 12:36
どいつもこいつもC++の根本的な理解が足りないだけだな


266 :デフォルトの名無しさん:04/07/10 12:36
よく釣れるな・・・この釣堀は

267 :デフォルトの名無しさん:04/07/10 12:45
>>264
プロって、2chのプロか?
それなら失格で大いに結構!!

268 :デフォルトの名無しさん:04/07/10 12:50
>>267
おまえはプログラマとして失格だな
ただのグラマ

269 :デフォルトの名無しさん:04/07/10 13:25
プロのグラマーって、ゲームセンターあらしであったネタだな。

270 :デフォルトの名無しさん:04/07/10 14:22
釣られてる香具師ってコンプレックスのかたまりなんだと思う。
もっと冷静になって、自分をもっと知るべきなんだろうね。
まあ、オチケツ、と言っておこう。

271 :デフォルトの名無しさん:04/07/10 14:45
厨房の行動

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

--某所より転載

272 :デフォルトの名無しさん:04/07/10 15:02
>>263
http://www.microsoft.com/japan/msdn/library/

273 :デフォルトの名無しさん:04/07/10 15:08
>>272
FOMAで見てみましたが、どうやらケータイには対応していないようです。

274 :デフォルトの名無しさん:04/07/10 15:13
見れない人はMSDNサブスクリプションの年間契約をしてください。

275 :デフォルトの名無しさん:04/07/10 15:16
FOMAをモデム代わりにして、PCのブラウザでアクセスすればいんじゃないの?

276 :デフォルトの名無しさん:04/07/10 15:21
>>275
ケーブル持ってないです。
それにパケット代で死んでしまいます。

277 :デフォルトの名無しさん:04/07/10 15:25
つまり見る資格無しってことですよ。
そんな心がけでプログラマーは笑ってしまいます。
いや、私じゃなくて世間一般的に言ってです。

278 :デフォルトの名無しさん:04/07/10 15:29
>>277
自称上級者たちに笑われても
痛くも痒くもありません。

279 :デフォルトの名無しさん:04/07/10 15:31
>>276
プログラマってそういう仕事だよ。そのくらい金出してやれ。
将来得るに違いない能力が、つまらん制限のおかげで身に付くのが遅れるのは哀しいだろ?


280 :デフォルトの名無しさん:04/07/10 15:37
今頃わかった!・・・
わざとやってんだろ?おまえら!
そうやって、暇だったら、プログラムの一つでも
作れってこった


281 :デフォルトの名無しさん:04/07/10 15:49
もちろんわざとです。
ヘルプをどうしても見れない事にしたい奴を
からかってるだけです。

282 :デフォルトの名無しさん:04/07/10 16:14
>>281
と、いうことにしたいのですね :-P

283 :デフォルトの名無しさん:04/07/10 16:21
>>281-282
ホント、仲いいのな。

284 :デフォルトの名無しさん:04/07/10 16:41
CStdioFileの派生クラスで、ファイルをオープンしたあとGetLength()実行すると
そこでAssertionがかかるんだけど何ででしょうか。GetPosition()でもかかってしまします

285 :デフォルトの名無しさん:04/07/10 18:44
その質問で答えられたら超能力者

286 :デフォルトの名無しさん:04/07/10 19:15
>>284
ファイルのオープンに失敗してるから

287 :デフォルトの名無しさん:04/07/10 23:41
ASSERT出たときに、ファイル名と行数が出てこない?
そこを読めば?

288 :284:04/07/10 23:52
>>285-287
原因が判明しますた
オープンしたのは基底クラス型の面罵変数だったのに、派生クラスのGetLength()を
直接呼んだのが間違いでした。オーバーライドしておくべきでした_| ̄|○

289 :デフォルトの名無しさん:04/07/11 03:32
ヘルプを読んでもわからないはずだ...orz

290 :本田:04/07/11 10:42
>どいつもこいつもC++の根本的な理解が足りないだけだな

C++は仕様が複雑すぎるので、だれも根本的には理解できそうに無い。

291 :名無しさん@そうだ選挙に行こう:04/07/11 11:24
>>265
どいつもこいつもに、あんたも含まれるのか?
含まれない人なら当然、「根本的な理解」とは何かが言えるよな。

292 :名無しさん@そうだ選挙に行こう:04/07/11 14:49
まあ、100%理解してて記憶にもあってありとあらゆる記述ができるという人間は、
世界でも片手ぐらいしかいないんじゃないか?
実際使うときは、そんな必要はまったく無いのだが。

293 :名無しさん@そうだ選挙に行こう:04/07/11 15:16
100%知ってると……あれだよ、TVチャンピオンC++選手権に出られる。

294 :名無しさん@そうだ選挙に行こう:04/07/11 15:54
とりあえず何の疑問も持たずに
>>188 見たいなソース貼っちゃうようではまずい。

295 :名無しさん@そうだ選挙に行こう:04/07/11 16:00
>>294
CPenがデストラクタ処理あるはずなのに
この記述には意味があるのか?
と疑問を持ったから貼った・・・とは解釈できんのか?

296 :名無しさん@そうだ選挙に行こう:04/07/11 16:04
>>294
そーとーしつこいな

297 :名無しさん@そうだ選挙に行こう:04/07/11 16:48
質問したい者だけが質問し
答えたい者だけが答える
これで好かろう
あとはガタガタ言うな


298 :名無しさん@そうだ選挙に行こう:04/07/11 17:09
>>295
まずいのはそこではなく
new してないのに delete してるところだろ
しかも Delete になってるし。
C++の基本が全然理解できてない。

299 :名無しさん@そうだ選挙に行こう:04/07/11 17:13
>>296
>>291 が聞きたがってるんでしょうがない

300 :名無しさん@そうだ選挙に行こう:04/07/11 17:24
>>298
#define かも知れんぞ

301 :名無しさん@そうだ選挙に行こう:04/07/11 17:26
僅かでもMFCを外れると興奮する人がいるスレはここですか?

302 :名無しさん@そうだ選挙に行こう:04/07/11 17:38
いえ根本的な理解が足りないと言われて
粘着になってしまった人がいるスレです。

303 :名無しさん@そうだ選挙に行こう:04/07/11 17:46
>>302
と、いうことにしたいのですね :-P

304 :名無しさん@そうだ選挙に行こう:04/07/11 17:53
>>301-302
おまえらガキだな・・・いつまでやってんだよ
いい加減、よそでやろうね

305 :名無しさん@そうだ選挙に行こう:04/07/11 18:38
>>298
そうそう、MFCとかCPenとかの理解じゃなくて、
先ず、自動変数に関して理解していないってところから
議論を始めなきゃならんということでしょ。
つまり、C++わかっちゃいねーなと...orz

306 :名無しさん@そうだ選挙に行こう:04/07/11 18:41
まさか、スタックとかヒープとか知らないでプログラムとか組んでるとか?
末恐ろしいな…ガクブル

307 :名無しさん@そうだ選挙に行こう:04/07/11 18:43
>>304
こんなのスルーできないようでは
アンタもガキですから!残念!

308 :名無しさん@そうだ選挙に行こう:04/07/11 18:55
ここ見てる暇あったら選挙行って来い。
まだ1時間はあるぞ。

309 :名無しさん@そうだ選挙に行こう:04/07/11 19:06
投票したらその場で.NET2003とか当たるようにすれば
もっと投票率上がるんじゃないか。
一度に10回ぐらい投票してやってもいいぜ。

310 :名無しさん@そうだ選挙に行こう:04/07/11 19:11
ここ最近ageてるやつ妙にバカっぽいな。

311 :名無しさん@そうだ選挙に行こう:04/07/11 19:43
というか、自己顕示欲が強いんだろ。

みんな、俺に注目してくれぇぇぇぇぇ!!!!!!


312 :デフォルトの名無しさん:04/07/11 22:56
>>298
>>193の書き込みによると「Delete myPen;」は本に書いてあったらしいね。
本当に書いてあったのならその本も晒し者だな。

313 :デフォルトの名無しさん:04/07/11 23:15
>>307
おまえも(r

314 :デフォルトの名無しさん:04/07/11 23:23
>>305
まったくだよ、C++を全然理解してない奴が
MFCに手を出すもんじゃないよな...orz


315 :デフォルトの名無しさん:04/07/11 23:30
>>314
そのうちnewってコンストラクタで勝手にやってくれないの?
とか言い出すよ。きっと

316 :デフォルトの名無しさん:04/07/12 00:09
>>314
また上級者気取りのレス。キモすぎ。

317 :デフォルトの名無しさん:04/07/12 00:20
MFCを使える程度にC++を理解してることがそんなに上級者なのか?
本当にそう思ってるなら本気でC++の入門書読んでからここに参加した方がいいよ。

318 :デフォルトの名無しさん:04/07/12 00:27
>>317
んだ

319 :デフォルトの名無しさん:04/07/12 00:28
と言うわけで、次のご相談どうぞ


320 :デフォルトの名無しさん:04/07/12 00:41
自称上級者がウザイのですが、どうすればいいですか?

321 :デフォルトの名無しさん:04/07/12 00:42
次の方どうぞ



322 :デフォルトの名無しさん:04/07/12 00:43
だからMFC使える程度の理解なら上級者じゃなくていいっつの。
入門書でいいっつってんだろ。とにかく読んでから来いや。

323 :デフォルトの名無しさん:04/07/12 08:49
自称上級者と、自称初心者は仲良く入門書を読んでくること
喧嘩しちゃだめですよ

324 :デフォルトの名無しさん:04/07/12 10:17
相手を上級者と言うことが至高の煽りだと思っている人がいるようです。

325 :258:04/07/12 10:21
悪い流れの中に落としちゃったみたいなので引っ越すよ・・・

326 :デフォルトの名無しさん:04/07/12 11:33
>>324
だよな・・・煽りまでも幼稚だよな・・・アホとしか言い様ないよな..orz

あと、「自称上級者」って何だよw
上級者自称してる奴なんていつでてきたよ?w

327 :デフォルトの名無しさん:04/07/12 13:45
>>326
あんたみたいなのがいると、燃料の落とし甲斐があるよ

328 :デフォルトの名無しさん:04/07/12 18:16
今日はC++の本、何ページまで読んだの?
ここに来るのは本を全部読んで、
MFCのヘルプも見れる環境にしてからにしたほうが良いと思うよ。
でないと、話にならないですから。

329 :デフォルトの名無しさん:04/07/12 18:24
取り敢えず、new delete の章はじっくり見た方が良さそうだ
自分の恥ずかしさに気が付くと思うよ

330 :デフォルトの名無しさん:04/07/12 18:27
っていうか、質問するときの最低限のマナーとして、
最低条件とか決めてテンプレにでも載せたらいいんじゃないでしょうか。
たとえば、
・C++の基礎は勉強済み。
・MFCのヘルプを見れる環境を持っている。
は必要ではないでしょうか。
何でもかんでも教えて君は、本人の怠慢だと思いますので。

331 :デフォルトの名無しさん:04/07/12 18:29
>>329
コンストラクタ、デストラクタ、クラスの関数への参照渡しと
そうでないときの引数の違いとか、最初に勉強したとき理解できなくて
そのままってこともありますものね。
ある程度経ってまた勉強しなおすと、目からうろこってことも多いです。


332 :デフォルトの名無しさん:04/07/12 18:31
いまだにMFCは使ってるけどCStringを使わず、
char*ばかり多用している人もいるんですよね。
LPCSTRの存在の本質を本当にわかっている人は
いったいどれだけいるのだろうかと思います。

333 :デフォルトの名無しさん:04/07/12 18:35
STL使ってない人って結構多いよね。
初めて使ったときは、こんな便利なもの!!って感動したけど。
CObList使う以前に<list>で間に合っちゃうなんてことも
結構あるんですけどね。

334 :デフォルトの名無しさん:04/07/12 18:35
>>330

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

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

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


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

ここにアクセスできる以上、
全員がクリアしていることが自明
(MSDNオンライン)

335 :デフォルトの名無しさん:04/07/12 18:38
>>334
携帯でアクセスしてるなんてつわものもいるみたいですよw
ヘルプ見れないぞゴルァって切れてたしw

336 :デフォルトの名無しさん:04/07/12 18:41
まあ、CやC++の質問はそれぞれの専用スレがある訳だし
最低限MSDNを調べ、それでも解決できない様であれば、
このスレに質問しに来なさい。
その時は、快く面倒見ようじゃないか。

337 :デフォルトの名無しさん:04/07/12 18:42
>>335
それは明らかに釣りだろ?

338 :デフォルトの名無しさん:04/07/12 18:50
>>335
死ね自称上級者

339 :デフォルトの名無しさん:04/07/12 18:56
>>333
そりゃ、STL も RTTI も MFC より後でできたやつだからね

340 :デフォルトの名無しさん:04/07/12 18:59
>>338
あなたでしたかw
こんなに簡単に釣(ry

341 :デフォルトの名無しさん:04/07/12 19:02
まぁ俺が学習した順番は
MFC → API → C++ → C
な訳だが。

342 :デフォルトの名無しさん:04/07/12 19:03
自らの不勉強さを恥にも思わず、ただ切れるだけの人って、
ものすごく人生で損しているように感じます。
考え方をちょっと方向転換すれば、
とても幸せになれるのになって思います。
ぶちギレたら誰も教えてくれなくなりますものね。
世渡り上手も自分を向上させるコツのひとつです。

343 :デフォルトの名無しさん:04/07/12 19:05
多分>>338はまだまだ人生経験、社会勉強が足りないんだと思われる。
サラリーマンなら参考書ぐらい言えば買ってくれるものです。
会社があなたを認めているのならですけど...orz

344 :デフォルトの名無しさん:04/07/12 19:31
>>342
おまえの中では不勉強の奴=切れてる奴
という図式が成り立ってるのか?
それはちょっと短絡すぎるぞ。
面白半分で煽り入れている奴の方が多いんじゃないかな?
おまえ以外の人はとっくに気がついている訳だが・・・

345 :デフォルトの名無しさん:04/07/12 19:39
>>342
一日の長ってやつを定量的に認識できない香具師はまだまだ青いね

346 :デフォルトの名無しさん:04/07/12 20:05
>>342
俺には両方切れている様に見えたんだが、
何故勉強不足の者だけが切れているかの様な
結論に至ったのかお聞かせ願いたい


347 :デフォルトの名無しさん:04/07/12 21:04
>>346
そのくらい自分でぐぐって調べろ

348 :デフォルトの名無しさん:04/07/12 21:13
>>347
おいおい、なんだそりゃ?

349 :デフォルトの名無しさん:04/07/12 21:17
>>348
上級者なら他人に聞くな。自分で調べろ。

350 :デフォルトの名無しさん:04/07/12 21:25
不勉強=問答無用でアホ(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 :デフォルトの名無しさん:04/07/13 00:48
自らの努力をまったくせず、ただの教えて君質問は
わかる人にはわかるよ。それってスルー。
不幸にも釣られちゃう人が多いのも事実みたいだけど。

355 :デフォルトの名無しさん:04/07/13 01:01
>>354
なんだ?まだ興奮冷めやらないのか?

356 :デフォルトの名無しさん:04/07/13 01:02
>>342
俺には両方切れている様に見えたんだが、
何故勉強不足の者だけが切れているかの様な
結論に至ったのかお聞かせ願いたい




357 :デフォルトの名無しさん:04/07/13 01:06
>>354
不幸な人ですね

358 :デフォルトの名無しさん:04/07/13 01:10
スルーできない香具師、大杉...orz

359 :デフォルトの名無しさん:04/07/13 01:12
>>356
いい質問だが、それはあなたの国語力に依存するので
なんと言っていいのやら。


360 :デフォルトの名無しさん:04/07/13 01:13
MFC・C++云々じゃなくて、スルーを覚えてから2chに来よう

361 :デフォルトの名無しさん:04/07/13 01:30
>>358
>>360
お前もスルー覚えてこいよ。

362 :デフォルトの名無しさん:04/07/13 01:32
不勉強=荒らし= >>188 =アホ

363 :デフォルトの名無しさん:04/07/13 01:36
そこでBCBですよ奥さん

364 :デフォルトの名無しさん:04/07/13 01:38
うんこ

365 :デフォルトの名無しさん:04/07/13 01:42
>>363
BCB=うんこ

>>364
うんこ

366 :デフォルトの名無しさん:04/07/13 01:45
>>363
BCBでMFC使おうとしてヘルプ見れないとか
言い出す奴いるからうんこ。

367 :質問です:04/07/13 01:45
void hoge(void)
{
  CPen myPen;


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

CPenってスコープ外れる時に、この辺やってくれないの?


368 :デフォルトの名無しさん:04/07/13 01:48
おまえら早く寝なさいっ!
オレモナー

369 :デフォルトの名無しさん:04/07/13 01:54
だからもう、何もかも自分でググれよ、脳無し

370 :デフォルトの名無しさん:04/07/13 03:19
>>367
だからコンパイルが通らない(ry

371 :デフォルトの名無しさん:04/07/13 03:20
>>370
(ry の意味がねーだろ!!w


372 :デフォルトの名無しさん:04/07/13 03:35
ここは本当によく釣れるインターネットですね

373 :デフォルトの名無しさん:04/07/13 07:22
暇人ばっかり

374 :デフォルトの名無しさん:04/07/13 07:42
見苦しいぞオッサン


375 :デフォルトの名無しさん:04/07/13 08:32
こんな事してばっかりいるから
いつまでたってもBCBに追いつけないんだよ…
とマジレスしてみる

376 :デフォルトの名無しさん:04/07/13 09:03
なんで急に釣りが増えたんだ

377 :デフォルトの名無しさん:04/07/13 09:06
だって入れ食いなんだもん

378 :デフォルトの名無しさん:04/07/13 11:05
厨房丸出しだね。どっちも。

379 :デフォルトの名無しさん:04/07/13 14:14
暑さで逝っちゃいそうだからね...orz

380 :デフォルトの名無しさん:04/07/13 14:15
っていうか、クーラー無しでがんばってる香具師いる?


381 :デフォルトの名無しさん:04/07/13 14:19
自分の部屋にはクーラーありませんが。

382 :デフォルトの名無しさん:04/07/13 14:25
ちょっと意味が違うorz

383 :デフォルトの名無しさん:04/07/13 19:13
>>332
やっぱりCString便利だよね?

384 :デフォルトの名無しさん:04/07/13 23:35
CString::LoadString()は重宝しています。

385 :デフォルトの名無しさん:04/07/14 03:20
自作関数の引数にchar*となっているところをLPCSTRに書き換えてみろ。
CStringも渡せるぞ。すごいだろ。

386 :デフォルトの名無しさん:04/07/14 03:47
char*とLPCSTRは違うけどな。

387 :デフォルトの名無しさん:04/07/14 04:25
違うから意味がある。

388 :デフォルトの名無しさん:04/07/14 04:27
LPCTSTR

389 :デフォルトの名無しさん:04/07/14 09:13
ピクチャーボックスにファイルから選らんだビットマップを貼り付けたいのですが
どのようにすればいいのでしょうか?

390 :デフォルトの名無しさん:04/07/14 09:42
えららんだ

391 :デフォルトの名無しさん:04/07/14 13:07
>>390
糞レスはいりません。

392 :デフォルトの名無しさん:04/07/14 13:17
(LPCSTR)(LPCTSTR)cstring; ってできるんだよね

393 :デフォルトの名無しさん:04/07/14 13:47
>>392
出来るけど、UNICODEビルドではどうなっても知らないよ。

394 :デフォルトの名無しさん:04/07/14 20:50
キャストは万能とか思ってる人多いなぁ

395 :デフォルトの名無しさん:04/07/14 22:12
ヘ_ヘ
ミ・・ ミ ということにしたいのですね?
( ° )〜


396 :デフォルトの名無しさん:04/07/14 23:37
質問です。

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

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



397 :デフォルトの名無しさん:04/07/14 23:52
1行目あたりから意味がわからん

398 :デフォルトの名無しさん:04/07/15 00:20
>>397 それは君の読解力に問題ありかと

399 :デフォルトの名無しさん:04/07/15 00:23
>>397
しつもんです。

400 :282:04/07/15 00:25
>>395
ここんとこ急にフェミ猫のコピペが各スレで増殖し出したな。
俺に触発されたのか? :-P

401 :デフォルトの名無しさん:04/07/15 00:27
>>396
そのスタティックライブラリをDLL化してそれを呼び出す
という逃げ方もあります。

402 :デフォルトの名無しさん:04/07/15 00:34
>>396
スタティックライブラリの出来が悪くて、なぜかその中にDllMain()という関数があるんじゃないの (w

403 :デフォルトの名無しさん:04/07/15 02:12
Document/View スタイルじゃないやり方(CFrameWnd + CWinApp)で、CWinAppにOnKeyDown等を加えてもメッセージが来ないんですが何故でしょうか?
Document/View スタイルだと動くんですが・・・。

404 :デフォルトの名無しさん:04/07/15 02:38
コマンドルーティング

405 :396:04/07/15 03:02
>>401
まぁそれが妥当かとは思うんですが、とりあえずファイル増やしたくないなぁと。

>>402
ん、、てことは普通はできるってことですかね?
まぁDllMain以外にもスレッドとかソケットあたりが変に混ざりそうでいやなんだけど、もうちょいもがいてみます。

406 :403:04/07/15 08:24
>>404
サンクス。コマンドールーティング参考になりました。
しかし、間抜けでした。てっきりフレームワークで生成されるCChildViewクラスってAbout dialogのことだと思い込んでいて無視していたんですが、実はこれが入力メッセージを受け取る肝心なクラスだったんですね。
あーやだなこんな調子で今更MFCを覚えるの鬱。.NETって、あくまでも中間言語インタープリタだから、x86ネイティブコードという観点からいくとMFCの代替になりませんよね?


407 :デフォルトの名無しさん:04/07/15 10:41
呼び出したメニューのIDを引数で渡してくれるメニュー用COMMAND関数を
作るにはどうしたらいいんでしょうか?


408 :デフォルトの名無しさん:04/07/15 11:00
ON_COMMAND_RANGE

409 :デフォルトの名無しさん:04/07/15 12:28
>>408
うぉー!ありがとう。解決しました。


410 :デフォルトの名無しさん:04/07/15 19:26
最近やっとMDIの勉強始めたばっかで初心者的質問なのだが、、

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

CMyView::OnInitialUpdate

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

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

誰か助けて_| ̄|○

411 :410:04/07/15 19:28
間違えた、、、
×CMyDocument::OnNewDocument

○CMyDocument::OnOpenDocument

412 :410:04/07/15 21:17
連書きすまん、、自己解決
CFrameWnd::GetActiveDocumentなるまんまの関数があった、、、。
もっとヘルプみます_| ̄|○

413 :デフォルトの名無しさん:04/07/15 23:03
ヘルプを見ないで質問しちゃう奴は
C++を理解してないも同然

414 :デフォルトの名無しさん:04/07/15 23:18
また出たよ。自称上級者が・・・ (;´Д`)

415 :デフォルトの名無しさん:04/07/15 23:26
解答できない質問されるのがよほど悔しいのかね

416 :デフォルトの名無しさん:04/07/15 23:29
じしょう 【自称】

(名)
(1)実体はどうあれ、自らこうだと称すこと。

417 :デフォルトの名無しさん:04/07/15 23:35
>>416
まさに、ピッタシデナイノ

418 :デフォルトの名無しさん:04/07/16 00:57
で、誰か自称したのか?

419 :デフォルトの名無しさん:04/07/16 01:16
>>418
明言しなくても、言外に表れている。
それくらい解れよ。

420 :デフォルトの名無しさん:04/07/16 01:48
>>419
自称知ったか君

421 :デフォルトの名無しさん:04/07/16 02:38
荒らそうと必死だな

422 :デフォルトの名無しさん:04/07/16 05:03
.aviをフォームの背景として再生するために
 CAnimateCtrl m_animate;
 //...
 m_animate.SetWindowPos(HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
 m_ctrl.BringWindowToTop();
という風にCAnimateCtrlのオブジェクトを一番下に、その他のコントロールを上の方に
持っていこうとしてるんだけど、直ぐにアニメーションが最前面になってしまいます。

何かうまい解決策はないもんでしょうか?

423 :デフォルトの名無しさん:04/07/16 07:58
>>419
だからそれ、自分が上級者だと勘違いしているだけなんだから自称って言わないってば。


424 :731: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度手間が多くて疲れます。
「プロはこうやる」っていうのがあったら教えてください。


425 :デフォルトの名無しさん:04/07/16 11:13
>>424
CDocumentが出てきてないようだが、使ってないの?

426 :デフォルトの名無しさん:04/07/17 00:36
>>424
プロはめんどくさいのでウィザードの吐いたコードいじって使います

427 :デフォルトの名無しさん:04/07/17 06:56
プロはめんどくさいのでそもそもMFCを使いません

428 :デフォルトの名無しさん:04/07/17 11:00
プロはSDKだけでプログラミングするなんて
非効率なことはしません。特別な事情がない限り。

429 :デフォルトの名無しさん:04/07/17 11:28
ネタにマジレスすんな

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


432 :デフォルトの名無しさん:04/07/17 17:59
ネタなので放置な。

433 :デフォルトの名無しさん:04/07/17 18:13
こういうことをMSがやったものがMFC

434 :デフォルトの名無しさん:04/07/17 18:33
>>433
こういうこと、って?

435 :デフォルトの名無しさん:04/07/17 18:36
MFCでお勧めの本ってある?

436 :デフォルトの名無しさん:04/07/17 18:41
>>435
ttp://www.amazon.co.jp/exec/obidos/ASIN/1874416478


437 :デフォルトの名無しさん:04/07/17 19:26
効率って削減したらダメじゃないか?

438 :デフォルトの名無しさん:04/07/17 20:14
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を利用して作りたいときはどの様にすれば、よろしいのでしょうか?
ご教授いただきたく思います。



440 :デフォルトの名無しさん:04/07/17 21:57
>>439
codeguruやcodeprojectに行けばあったと思う。
探してみて。

441 :デフォルトの名無しさん:04/07/18 00:08
>>440
codeprojectにありました。
会員登録? して試してみたいとおもいます。
どうもありがとうございました。


442 :デフォルトの名無しさん:04/07/18 13:58
>>436
この本初めてみたけどいいの?
USサイトではいいみたいだけど。。。

443 :デフォルトの名無しさん:04/07/21 22:13
MFCはもうだめぽ

444 :デフォルトの名無しさん:04/07/22 16:29
質問です
MFCを使用して、MSCommで通信を行っているのですがどうにも
解決できない問題に遭遇しました
当初Windows2000を使用していたのですが、WindowsXPに
もってきて動かすと受信がうまく出来ません。
受信部にイベントOnCommを使用しているのですが、2000だと問題なく受け
とれる受信イベントがXPでは受け取れません
RThreshなどはソフトで設定していて、値も正常に入っています
ポートオープンで失敗していることもありません
どなたか、同様の現象がでて、対応された方いらっしゃいますか?
開発環境は VC6+SP6です

445 :デフォルトの名無しさん:04/07/22 17:30
日本人の書籍とアメリカ人の書籍を読み比べた結果、導き出された結論。

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

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

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

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

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


やっぱ 日本人の書籍だけでは不十分。
どれもこれも同じようなものばっかりなんだもん(藁

446 :デフォルトの名無しさん:04/07/22 17:41
↑みたいなこと必死に書くから日本人は馬鹿にされるんだな

447 :デフォルトの名無しさん:04/07/22 18:17
>>445
著者の一人だが褒められて嬉しい


448 :デフォルトの名無しさん:04/07/22 18:33
>>445
> MFCを一から教える書籍を売るのがアメリカ人。
> Appウィザードで作成したテンプレートにコントロールを追加するだけの子供騙し書籍を売るのが日本人。

入門用としてはやったことがすぐカタチになる後者の方がおすすめ

449 :デフォルトの名無しさん:04/07/22 18:51
>>448
神頼み的な思想を植えつけない細心の注意が必要

450 :デフォルトの名無しさん:04/07/22 18:54
CFrameWnd すら使うかどうか
習得パス設計との緊密なマッチングで決めること
TABオーダーでバグられた位でグラつく知識はダメ

451 :デフォルトの名無しさん:04/07/22 19:20
MFCはダメなライブラリの見本

452 :デフォルトの名無しさん:04/07/22 19:26
>MFCの不具合に文句を言い、不具合を修正して使うのがアメリカ人。

文句言うより他あたるのがアメ公

453 :デフォルトの名無しさん:04/07/22 21:24
>>444
素直にAPIでやって下さい。

454 :デフォルトの名無しさん:04/07/22 21:26
アメリカ人はコレ使うと決めたら他の選択肢捨てるよね

455 :デフォルトの名無しさん:04/07/22 21:31
俺アメリカ人だけど、MFC自体捨てたよ
今はBCBで、バリバリ快調っす

456 :デフォルトの名無しさん:04/07/22 21:41
面接で渋られたときのゴネ方が内容的にまるで違う

457 :デフォルトの名無しさん:04/07/22 21:54
>>456
どんなの?

458 :デフォルトの名無しさん:04/07/23 01:07
日本人:イオナズン
アメリカ人:ダディクール

459 :デフォルトの名無しさん:04/07/23 05:23
>>445
アメリカ人向けの糞本は翻訳されないだけだろ
そんなのに著作料と翻訳料払うぐらいなら日本人に直接書かせる罠

460 :デフォルトの名無しさん:04/07/23 06:52
原書読めば笑えるのも呆れかえるのも、いっぱいある。

461 :デフォルトの名無しさん:04/07/25 21:38
VC.NET2003(MFC)の質問です。
ダイアログを作る時にエディットボックスなどと関連付けするメンバ変数を作ろうとしているのですが、
うちの環境ではなぜかメンバ変数追加ウィザードが動作しません。
手動でメンバ変数を書いた場合にエディットボックスどうやって関連付けすればいいのでしょうか?

462 :デフォルトの名無しさん:04/07/25 21:40
>>461
アイテムをダブルクリックして駄目なら駄目なんだろ。

463 :デフォルトの名無しさん:04/07/25 22:56
>>461
ダブルクリックするとエディタが開いてチェンジイベントの記述になります。


464 :デフォルトの名無しさん:04/07/26 04:00
VCがおかしい→再インスコ
ウィザードがおかしい→テスト用プロジェクト作ってみる
手動がいい→サンプルをまねる

465 :デフォルトの名無しさん:04/07/26 22:36
CList の入れ子ってできないでしょうか.
CList< CList< int, int >, CList< int, int > > みたいな.


466 :デフォルトの名無しさん:04/07/28 16:57
VS.NET2003で新しいプロジェクト作成でMFCアプリケーションを作成したら、
ダイアログバーも生成されたので、リソースエディタでエディットコントロールを2つ
追加してコンパイルすると、ダイアログバー上にエディットコントロールが2つあって、
文字の入力等は問題なく出来るのですが、TABキーでフォーカスの移動をしようと
しても、1つ目のエディットコントロールにしか移動しません。

リソースのタブストップには両方ともチェックが入っているのですが、どうすれば
フォーカス移動が出来るようになるのでしょう?


467 :デフォルトの名無しさん:04/07/28 17:08
>>466
タブオーダーは設定したのか?


468 :466:04/07/28 17:17
>>467
設定してもだめ。

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

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

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


469 :デフォルトの名無しさん:04/07/28 19:15
>なんか、追加のコードがいるんでしょうか?

普通はいらない。

というか、普通にウィザードでMFCアプリ作ってもダイアログバーなんか付いてこないと思うんだが。

470 :466:04/07/28 19:31
>>469
プロジェクト作成時にReBarを使う設定にすると付いてくるようです。

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

プロジェクト生成時にこれくらいはTrueにしておいてほしかった・・・orz


471 :デフォルトの名無しさん:04/07/28 20:52
あー、そういうのがあるのか。2003はインストールしただけでほとんど使っていないので気付かなかった。
それにしても、2003のリソースエディタのプロパティは使いにくいなあ。
無理矢理ダイアログバー作ろうといじってて、なかなかダイアログスタイル設定できずに苦労した。
何だよ「子」って

472 :デフォルトの名無しさん:04/07/29 00:00
スレが汚れるので.NETの話題はお控えください。

473 :デフォルトの名無しさん:04/07/29 01:29
>>472
スレのレベルが下がるので、VisualStudio.NETと.NET Frameworkを
混同している人はカキコを控えて下さい。

474 :デフォルトの名無しさん:04/07/29 07:59
VC++.NETはMFC的には機能ダウンしてるしな

475 :デフォルトの名無しさん:04/07/29 08:33
>>474
ウッソー?
機能アップしてるだろ。
例えばCStringはstd::basic_stringのようにテンプレートクラス化されて
使いやすくなってると思う。

476 :474:04/07/29 08:52
>>475
書き方が悪かった。ライブラリじゃなくてIDEまわりね。

477 :デフォルトの名無しさん:04/07/29 17:41
MFCライブラリはもろもろ良くなってるね
CStringはウニとS-JIS混在できるしね
IDEは.NETと共通化したから非共通部分が落とされたね

478 :デフォルトの名無しさん:04/07/30 17:48
先輩にMFCをするより、SDKでガイガリやったほうがいいのができるっていわれたんだが、本当?


479 :デフォルトの名無しさん:04/07/30 18:03
いいのができるかどうかは関係ない。
APIだけで作っても駄目な物は駄目

480 :デフォルトの名無しさん:04/07/30 19:05
その先輩はMFC使えない、C++わからないだけってパターンが多い。

481 :デフォルトの名無しさん:04/07/30 19:39
MFCって何から勉強すればいいんだ?

482 :デフォルトの名無しさん:04/07/30 21:37
自分が必要とするところから。

483 :デフォルトの名無しさん:04/07/30 23:22
習うより慣れろ。

484 :デフォルトの名無しさん:04/07/31 18:25
CListView でレボートビューにした場合、ラベルを改行して
複数行で表示したいのですが、可能でしょうか。

485 :デフォルトの名無しさん:04/07/31 18:39
Owner Drawでやるしかないんじゃない?

486 :デフォルトの名無しさん:04/07/31 19:30
マルチします。すみません。
C++BuilderXでGUIアプリを作成する場合には
MFCは使えるのでしょうか?
また、フォームエディタは使用できるのでしょうか?

487 :デフォルトの名無しさん:04/07/31 22:30
CListView で Owner Draw を使うのにはどうすればいいのでしょうか。
教えて君で申し訳ないです。
調べても調べがつかなかったもので。。

488 :デフォルトの名無しさん:04/07/31 22:40
>>487
CodeGuruに行くとそういうサンプルが少なくとも二つは見つかるよ。
#つーか、見つけた。
OwnerDrawじゃなくてCustomDrawの手法ならGoogleで国内サイトを探すだけでいろいろ出てくると思う。

489 :デフォルトの名無しさん:04/07/31 23:13
今から始めるならMFCはやめて.NETにしたほうがいい?

490 :デフォルトの名無しさん:04/07/31 23:35
>>488
ありがとうございます。
とりあえず、CodeGuruから調べてみたいと思います。

491 :デフォルトの名無しさん:04/07/31 23:46
俺はCodeProjectの方が好きだな・・・

492 :デフォルトの名無しさん:04/07/31 23:55
CodeGuruはリニューアルしてから見づらいな・・・

493 :デフォルトの名無しさん:04/08/01 00:02
>>489
「今から始める」という意味が「学習を始める」だったらMFCで良い。
「長大なプロジェクトを起こす」という意味なら.netを考慮する価値はあるかも。

つまりちょこちょこ作って今すぐ広い環境で動かすならMFCだな。

494 :デフォルトの名無しさん:04/08/01 00:54
>>493
あー。まだ厨房なんで将来的なことも考えていただければ幸いです。

495 :デフォルトの名無しさん:04/08/01 01:46
>>494
んじゃまず、ハードの基礎やってから、アセンブラ逝け。1年たったらまた恋。

496 :デフォルトの名無しさん:04/08/01 02:27
漏れは、SDK だけでアプリ作れない香具師の MFC アプリは信用しないなあ。

……「アセンブリが解らない香具師のアプリは信用しない」と同じレベルかゴメンorz

497 :デフォルトの名無しさん:04/08/01 03:20
何でもそうだが、知ってるやつ見えてるやつから見ると、知らないやつ見えてないやつは、危なっかしく感じる。
知らないやつ見ててないやつ自身は、なんの恐れも不安もない。

498 :デフォルトの名無しさん:04/08/01 03:56
えーと、分裂症の方でしょうか?

499 :デフォルトの名無しさん:04/08/01 04:01
SDKやってMFCすれば〜

500 :デフォルトの名無しさん:04/08/01 08:24
MFCだかVBだか知らないんだけど、例えば某USB機器に付属してるソフト。
起動してすかさず他アプリケーションを前面に持って来て、
そのソフトが完全に起動し終わったのを確認してウィンドウをアクティブにすると
フッと、ウィンドウ上のボタンのフォーカスが切り替わる。
細かい事だけど、何やってんだよ (;´Д`) 怖いよ

501 :デフォルトの名無しさん:04/08/01 11:43
レベルが低くて本当にこれから始めるっていうならなおさら、あんまり先のことは
考えずに、今できることをやって経験を積んでおくことを薦める。先々どうするかは
自分で経験して判断できるようになってから決めればよい。何もできないうちに
後のことを言っても始まらないからね。

現在一般に出回ってるシステム環境や、ツール、学習面での文書のこと考えたら
いきなり.netはやりづらいと思う。どうせ最初は小さいものしか作れないんだし、
何かしら使える機能のあるものを気軽に作って、プログラムすることの手順に慣れ
るのが先だろう。

502 :489:04/08/01 16:59
一応Delphiとかはいろんなページ見ながらやってたんだけど
他の言語に移行したくなったんで、.NETかMFCがいいかなーと思ったたけです。
別にJavaやSDKでもいいんですが、アセンブラは必要なんでしょうか?

503 :デフォルトの名無しさん:04/08/01 17:20
そんな「なんとなく」が理由なら自分で好きなのやれ。

504 :デフォルトの名無しさん:04/08/01 18:29
>>502
必要って何のために?

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

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

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

おまえが答えるしかないことだ

505 :489:04/08/01 20:17
>>504
アセンブラはやってみたくないけど、意味はあるとおもう。
既存の高級言語を使う場面とアセンブラを使う場面はどう違うのか説明してくれ。

506 :デフォルトの名無しさん:04/08/01 20:46
>>505
特定のCPUの、特有の機能を使うとき
例: 特権命令

コードサイズまたは実行速度に定量的な条件があるとき
例: PIC

507 :デフォルトの名無しさん:04/08/01 20:48
>>505
続き

既にアセンブラベースで進行中のプロジェクト
例: (軍機のため言えません)

508 :デフォルトの名無しさん:04/08/01 21:02
最初にDelphiやると他のものが使えなくなってしまう。
そういう意味では最初に学ぶのはDelphi以外が良いと言うことになるのかも知れない。

509 :デフォルトの名無しさん:04/08/01 21:50
>>502
> 一応Delphiとかは

「とか」ってなんだよ・・・
なんかこういう書きぶり続くとどうでも好きにすればとしか言いようないな

510 :デフォルトの名無しさん:04/08/01 21:56
普通にCかC++から初め野菜って事で

511 :デフォルトの名無しさん:04/08/01 22:05
>>508は典型的なマニュアル頭な人に多い症例

512 :デフォルトの名無しさん:04/08/01 22:08
ここMFCのスレなのにDelphiの話題ばっかりで大丈夫?
他のスレで同じことするとスレ違いとかうるさく言われるのにね。


513 :デフォルトの名無しさん:04/08/01 22:17
>>512
代理発言はしてやらない

514 :デフォルトの名無しさん:04/08/01 22:18
今更言語談義が始まって呆れてる最中。

515 :デフォルトの名無しさん:04/08/01 22:24
>>505
>アセンブラはやってみたくないけど

賛成も反対もする筋合いにないからどっちとも言わないが、
はっきりした意思があるなら邪念は捨てろ

516 :デフォルトの名無しさん:04/08/01 22:26
卒業年次生にもなって何屋に【なる】のか決まってないなら
それはそれですることがあるはずだ

517 :デフォルトの名無しさん:04/08/01 22:40
MFCなひとは、なんでDelphierや初心者言語話に、普通に答えてんの?
そこはスレが荒れるとこでしょ。やっぱMFCに愛着無いからかね。

518 :デフォルトの名無しさん:04/08/01 23:05
単に楽をするためのライブラリィ程度しか考えていないよ、俺は
それと、暇つぶしにレスしているだけ

519 :デフォルトの名無しさん:04/08/01 23:31
暇つぶしでスレ違いレスすんなタコ

520 :デフォルトの名無しさん:04/08/01 23:39
Cスレで聞こうと思ったのでつが荒れてたので
こちらでおながいします。
MFCを使っているとoperator newをオーバーロード
して、デバッグのときにはメモリリークを検出してくれるので
助かっているのですが、MFCを使用しない場合は
みなさんどうしてますか?
自力でnewをオーバーロードしてるのでつか??


521 :デフォルトの名無しさん:04/08/01 23:39
つーか、スレ違いな話題はスールしろよ!

522 :489:04/08/02 00:06
>>508
父親にCから始めろと言われ、本を買ってくれたのでCから始めました。

他スレとか見てるとMFCの雲行き怪しげなので.NETにしときます。
スレ違いな質問してすみませんでした。

523 :デフォルトの名無しさん:04/08/02 00:08
>>520
そんなギミックに頼るハメになる前に単体テストしとく

524 :デフォルトの名無しさん:04/08/02 02:20
>>520
メモリリークを検出するソフトを使う

525 :デフォルトの名無しさん:04/08/02 02:23
VC6とVC7の違いについて解説しているページはありませんか?
例えば、VC6のメモリウィンドウは、 VC7ではココにある…etc

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

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



526 :デフォルトの名無しさん:04/08/02 02:24
>>524
どんなんあるんか教えろや

527 :デフォルトの名無しさん:04/08/02 02:27
>>525
これ俺も欲しい

528 :デフォルトの名無しさん:04/08/02 03:44
BoundChecker
Purify


529 :デフォルトの名無しさん:04/08/02 05:53
>>520
ここのことでつか?
ttp://mikata.curiocube.com/progtips/ch24_newhandler.html
MFC使わなくても…

530 :デフォルトの名無しさん:04/08/02 07:32
MFCのクラス(というかメソッド?)がスレッドセーフか否かはどこで調べれば良いでしょうか。
MSDNには特に記述が無いようですが…

531 :デフォルトの名無しさん:04/08/02 07:59
>>530
LIBもDLLもシングルとマルチがある
(つまりマルチならクラス全てマルチ)

532 :デフォルトの名無しさん:04/08/02 11:16
MFCで作ったプログラムってMFCランタイムがないと
動かないんですか?
(つりではないです。お願いします)

533 :デフォルトの名無しさん:04/08/02 11:34
>>532
スタティックリンクすれ

534 :532:04/08/02 11:40
>>533
ありがとうございました!

535 :デフォルトの名無しさん:04/08/02 15:45
>スタティックリンクすれ

この一言でわかっちゃうってことは、釣りだろw

536 :デフォルトの名無しさん:04/08/02 17:53
VC++のコンパイルエラーなど出す「出力ウィンドウ」のように単純に
1行づつメッセージを出力するためにはどのような手法を使うのが一般的なのでしょうか?

537 :デフォルトの名無しさん:04/08/02 17:58
>>536
リストコントロールとか
書き込み禁止のエディットコントロールとか
スクロールビューとか

538 :520: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度呼び出すのは
間違ってるでしょうか?


540 :530: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でした。)
ありがとうございました。

541 :デフォルトの名無しさん:04/08/03 02:01
>>520
んなもん買わないでも_CrtSetDbgFlag使えばいいんじゃねーの?

542 :デフォルトの名無しさん:04/08/03 09:43
ちょっとよろしいですか?
あるディレクトリ以下のファイル名一覧を取得したいんですが、サンプルをコピーしてみて、できたのですが。
日本語のファイル名だけ取得できませんでした・・・。
CFileFindって日本語は駄目なんでしょうか?

543 :デフォルトの名無しさん:04/08/03 09:47
>>542
shiftJISのダメ文字が混じってるだけでは?
ttp://www.kent-web.com/pubc/jcode/

544 :デフォルトの名無しさん:04/08/03 10:06
>>543
どうやらそのようでした。ありがとうございました!

545 :デフォルトの名無しさん:04/08/03 21:26
すみません。>>530-531あたりを見て思ったのですが、
マルチスレッドのDLLを使えばMFCだろうとCのstrtok関数だろうと全てスレッドセーフになり、
シングルのDLLを使う場合は、スレッドセーフであることが保証されていないので自分で同期取らないといけない、
という理解で良いのでしょうか?

私はてっきりマルチスレッドにするときは何が何でもマルチスレッドDLLを使って、
その上で、スレッドアンセーフなものは自分で同期をとるプログラミングをしなさい、
ということかと思っていました…

546 :デフォルトの名無しさん:04/08/03 21:38
スレッドセーフなライブラリは、ちゃんと使えば、スレッドセーフになる。
どんな使い方でもスレッドセーフになるって、魔法のライブラリかよ。
「バグのないライブラリを使うと、バグのないプログラムになる」が否なのに同じ。

547 :デフォルトの名無しさん:04/08/03 22:29
当然、スレッドセーフでないライブラリは、マルチスレッドで使うと危険。
ちゃんと同期をとって使っているつもりでも、内部処理や内部エリアで同期がとれていない。

548 :デフォルトの名無しさん:04/08/04 01:03
>>545
MFCは同期クラス(CMutexとか)以外はスレッドセーフじゃなかった気がする。
心配ならソース見てみれば?

549 :デフォルトの名無しさん:04/08/04 02:45
>>548 はスレッドセーフの言葉の意味自体すら知らない

550 :デフォルトの名無しさん:04/08/04 09:35
For size and performance reasons, MFC objects are not thread-safe at the object level, only at the class level.

551 :デフォルトの名無しさん:04/08/04 09:43
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_Multithreading.3a_.Programming_Tips.asp

552 :デフォルトの名無しさん:04/08/04 10:37
まとめ

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

同一オブジェクトに対する別スレッドからのアクセスの同期は
同期オブジェクトを使ってプログラマがとる

553 :デフォルトの名無しさん:04/08/04 12:21
CAsyncSocketを使用して書いていますが
どーやって接続先、自分のIPアドレスとポート番号を取得できますか?

554 :デフォルトの名無しさん:04/08/04 12:33
>>552
同期クラスは例外で、オブジェクトレベルでスレッドセーフ。

555 :デフォルトの名無しさん:04/08/04 12:36
>>552
MFCにシングルスレッド用ライブラリなど存在しない。
シングルスレッド用とマルチスレッド用(スレッドセーフ)があるのはCランタイムライブラリ。

556 :デフォルトの名無しさん:04/08/04 19:05
>>553
IPだけでなくネームアドレスも使えるだろ?
ポートは使用するサービスによって決まるもんなんだからあらかじめ決めて動作
させるのがネットワーク・アプリ書くときの前提になると思うが。

何がしたいのか、キミのネットワークの仕組みについての理解度がどれくらいか
よく分からないね。

557 :デフォルトの名無しさん:04/08/04 19:39
>どーやって接続先、自分のIPアドレスとポート番号を取得できますか?

自分の方は GetSockName(), 先方は GetPeerName で取れます。
IPv6 対応はそれぞれ GetSockNameEx, GetPrrtNameEx。

558 :デフォルトの名無しさん:04/08/04 19:47
指がずれたな(w

559 :デフォルトの名無しさん:04/08/04 20:52
>>558
接骨院へ

560 :デフォルトの名無しさん:04/08/04 21:25
MFC version 6.0 (still mfc42.dll) Visual C++ version 6.0 シングルスレッド用DLLあり
MFC version 7.0 (mfc70.dll) Visual C++ .NET なし

561 :デフォルトの名無しさん:04/08/05 02:27
> 同期クラスは例外で、オブジェクトレベルでスレッドセーフ。
そりゃそうだろ(藁)

562 :デフォルトの名無しさん:04/08/05 13:28
>>561
CEvent::SetEventの呼び出しを
Win32の生のクリティカルセクションで同期するバカが実在したりするから
世の中は面白い。

563 :デフォルトの名無しさん:04/08/05 20:47
てか、同期クラスはただのラッパーだし

564 :デフォルトの名無しさん:04/08/06 15:12
質問です
CDialogBar上にボタンを配置して、それを条件に合わせて、
有効無効の変更を行いたいのですが、何処で行えば良いでしょうか?

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



565 :デフォルトの名無しさん:04/08/06 15:51
>>564
コマンドマップに EnableCommandUI だかなんだかを追加するんじゃなかったかな。

566 :デフォルトの名無しさん:04/08/06 16:16
>>564
CDialogBar m_wndDlgBar;
....
CButton *pBtn=(CButton *)SubclassDlgItem(IDC_BUTTON1, &m_wndDlgBar);
pBtn->EnableWindow(FALSE/TRUE);

では、だめかな?

567 :564:04/08/06 18:02
>>565
>>566
返答有難う御座います
CMainFrameのコマンドマップに
ON_UPDATE_COMMAND_UP( IDC_BTN_XXX, OnUpdateBtnXXX )
を手動で入れてそこで処理させることで実現できました


568 :デフォルトの名無しさん:04/08/06 22:54
>>562
すみません、解説お願いします。
(理解できてません…)

569 :デフォルトの名無しさん:04/08/06 23:02
>>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 :デフォルトの名無しさん:04/08/07 01:15
ロジックとか言うほどのもんかよ

572 :デフォルトの名無しさん:04/08/07 01:21
>>571
君の言うロジックの定義は?

573 :デフォルトの名無しさん:04/08/07 01:22
定義とか言うほどのもんかよ

574 :デフォルトの名無しさん:04/08/07 01:33
>>573 説明出来ないのか ( ´,_ゝ`)プッ・・

575 :デフォルトの名無しさん:04/08/07 01:35
説明とか言うほどのもんかよ

576 :デフォルトの名無しさん:04/08/07 02:09
説明とか言うほどのもんかよとか言えるほどもんかよ

577 :デフォルトの名無しさん:04/08/07 02:10
ほどもんかよ

578 :デフォルトの名無しさん:04/08/07 02:39
ぼぉくほどもん。ターケコープタァー!

579 :デフォルトの名無しさん:04/08/07 03:59
CWebBrowserクラスのNavigateで、自前のウィンドウに埋め込みウェブを表示させているのですが
そこのユーザーエージェントを制御したいのですがどうすればよいでしょうか?
教えてください


580 :579:04/08/07 04:43
Navigateに与える引数を工夫すれば実現できそうなのですが・・・
どなたかヒントください


581 :デフォルトの名無しさん:04/08/07 07:02
夏ですね

582 :570:04/08/07 11:51
夏厨が沢山、湧いてますなぁ〜。
無理っぽいので自分で作ります。


583 :デフォルトの名無しさん:04/08/07 13:42
>>582
応援してます(はぁと

584 :570: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);

585 :570:04/08/07 15:44
VBやC#もTrimは全角スペースをちゃんと処理してるのね。MFCだめぽ。 orz

586 :デフォルトの名無しさん:04/08/07 15:44
日本語が変だ。orz

587 :デフォルトの名無しさん:04/08/08 00:16
ちょっとこのスレ元気ないし、とりあえず誰か579の問いに答えてやったらどうよ?
オレはわからないんから答えられないけどさ


588 :デフォルトの名無しさん:04/08/08 00:42
579さんこんばんは。

589 :デフォルトの名無しさん:04/08/08 00:50
出来ません
CWebBrowserではIEのコンポーネントを使っているので、
どうしても変更したければSDKベースで作り直して下さい。

590 :デフォルトの名無しさん:04/08/08 00:55
答えろと言われても、これ見ろとしか言えないんだが。。。
http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/WebBrowser/WebBrowser.asp

591 :579:04/08/08 03:40
>>590
NavigateのPostDataで送るデータを工夫すれば
なんとかなりそうなのですが・・・
どこかに参考資料ないですかね?(できる限りは調べたのですが)

よろしくおねがいします




592 :デフォルトの名無しさん:04/08/08 04:02
それくらい自分でなんとかしろ


593 :デフォルトの名無しさん:04/08/08 05:37
> VBやC#もTrimは全角スペースをちゃんと処理してるのね。MFCだめぽ。 orz
VBやC#がどんな文字を扱っているか調べた後、CString::TrimXXXX 使いなさい。

594 :デフォルトの名無しさん:04/08/08 13:11
>>591
http://www.codeproject.com/miscctrl/#HTML+Browser+Controls

595 :デフォルトの名無しさん:04/08/08 13:14
>>593
先生! 海栗は嫌いでつ。

596 :579:04/08/08 14:41
>>594
いろいろ系統の似たサンプルはあるんですが、
User-Agentを制御するサンプルはありませんね


597 :デフォルトの名無しさん:04/08/08 15:43
>>596
UrlMkSetSessionOption()
URLMON_OPTION_USERAGENT


598 :デフォルトの名無しさん:04/08/11 00:55
今までありがとう、MFC

599 :デフォルトの名無しさん:04/08/11 11:36
これからもよろしく、MFC

600 :デフォルトの名無しさん:04/08/11 13:29
ATLのことも忘れないでください。

601 :デフォルトの名無しさん:04/08/11 15:06
海栗って何?

602 :デフォルトの名無しさん:04/08/11 15:08
海栗=うに=unix

603 :デフォルトの名無しさん:04/08/11 16:30
MFCのサンプルなどでCodeGuru等が有名ですが、
CodeGuruのソースのライセンスはどのようになっていますでしょうか?
サイトの方をみたのですが、それらしき文章がないように思い受けます。

スレ違いかもしれませんが、ご教授いただければとおもっております。


604 :デフォルトの名無しさん:04/08/11 16:46
>>603
あれは作者がそれぞれいるだろ

605 :デフォルトの名無しさん:04/08/11 21:58
雲丹

606 :デフォルトの名無しさん:04/08/11 23:15
>>601
海栗=うに=海栗コード

607 :デフォルトの名無しさん:04/08/12 23:59
タスクバーに常駐するタイプのプログラム作ってます。
で質問なんですけど、xpのタスクバーは非アクティブのとき非表示に出来ますが
どうやって制御すればいいんでしょう?教えてください


608 :デフォルトの名無しさん:04/08/13 00:07
少なくともMFCにはそんな機能は無いな

609 :デフォルトの名無しさん:04/08/13 06:18
>>607
タスクバーに常駐させるだけで良いのでは?

タスクバーが非アクティブのとき非表示になっても何も困らないのでは?


610 :デフォルトの名無しさん:04/08/13 07:09
「アクティブでないインジケータを隠す」機能に対応できず、常に表示されてしまっている状態で困っています

611 :デフォルトの名無しさん:04/08/13 08:28
>>610
つまり「アクティブのまま」なんじゃないの?

612 :271:04/08/16 02:11
MFC最高。MFCあったらC++なんかイラネ

613 :デフォルトの名無しさん:04/08/16 02:46
>>612
保守乙

614 :デフォルトの名無しさん:04/08/16 08:13
KFC最高。KFCあったらMacなんかイラネ

615 :デフォルトの名無しさん:04/08/16 10:11
>>614
スレ違い乙

616 :デフォルトの名無しさん:04/08/16 14:20
sage乙!

617 :デフォルトの名無しさん:04/08/17 12:18
MFC乙!

618 :デフォルトの名無しさん:04/08/17 21:52
lps乙CmdLine

619 :デフォルトの名無しさん:04/08/18 00:01
X1-turbo乙

620 :デフォルトの名無しさん:04/08/18 01:39
or乙

621 :デフォルトの名無しさん:04/08/18 07:42
初心者なんですが、今MFCからC言語始めてるんですが、
APIを直接使わずにMFCだけでAPIでできることのすべてを代用することができますか?

622 :デフォルトの名無しさん:04/08/18 07:52
>>621
寡聞にして「すべて」を代用できるかどうかは知らんが、
少なくともAPIの知識が必要になるメンバ関数は少なくない。
MFCを使いつつ、その先にはAPIがあることを念頭に入れておくのがいいと思う。

623 :デフォルトの名無しさん:04/08/18 09:30
>>621
> 初心者なんですが、今MFCからC言語始めてるんですが、

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

Cの基礎的な書式とC++のクラス概念くらい学んでからWindowsプログラミング
に移行した方が良いっていうか、そうじゃないと普通無理だろっていうか・・・。

624 :デフォルトの名無しさん:04/08/18 11:00
とりあえず普通に質問に答えるなら、出来るか出来ないか。だろ?
なんで君たちはそこには言及しないんだい?

という訳でAPIでMFCの代わりは出来ますが、MFCでAPIの代わりは出来ません。


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

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

>>624
なるほど。
APIのほうが優れもののようなのでキリがついたらそっち勉強しようと思います。

626 :デフォルトの名無しさん:04/08/18 11:19
つうか、「C言語」じゃねえよ。

627 :デフォルトの名無しさん:04/08/18 13:10
APIの方が優れてるってのはどうかと思う。MFCはどっちかというとプログラマの手間を
省くための便利ライブラリなんだし、技術がないならむしろMFCを積極的に利用した方
が楽ができるし良い物を作れる。大抵のことはMFCでできてしまうんだし。

628 :デフォルトの名無しさん:04/08/18 16:46
C -> API -> C++ > MFC でいいよ。

629 :デフォルトの名無しさん:04/08/18 22:01
そしてMFCに嫌気が差して、APIに戻るか他のライブラリを探すようになる。

630 :デフォルトの名無しさん:04/08/18 23:07
>>629
たしかにかなりの人がMFCに挫折するね

631 :デフォルトの名無しさん:04/08/18 23:18
なんで、MFCで挫折するんだろうね?

632 :デフォルトの名無しさん:04/08/18 23:19
へんなマクロが嫌だ。

633 :デフォルトの名無しさん:04/08/18 23:25
なんで、そんな動きするのか、わけがわからん。
ソースおっても、膨大すぎて意味分からん。
ウィザードでつくったものを、どう変更すりゃいいのか、意味不明。
C++とAPI知ってんのに、意味分からんマクロとか大杉。
すでにJavaに移行しました。Java分かりやすくてサイコー!!

634 :デフォルトの名無しさん:04/08/18 23:29
MFCがいやで、C++ Builderに逝った人は多そうだな。
漏れは、WTLにいったよ。
2005ではMFCはどうなるんだろう〜?

635 :デフォルトの名無しさん:04/08/18 23:37
それなりに枯れてて出来たソフトの質はいいんだけどね
覚えるのにWin32API以上に労力が必要なのは痛いね


636 :デフォルトの名無しさん:04/08/18 23:49
俺MFCに依存しまくり・・・・・・・orz

637 :デフォルトの名無しさん:04/08/18 23:51
全然 Foundation じゃないよね。


638 :デフォルトの名無しさん:04/08/18 23:52
MFCに挫折して、Delphiに逝った趣味グラマです。Delphiだと、VCLのソースを見る事は少ないです。MFCのフレームワークは、いくつものクラスを連動して使う事を強いられます。VCLだと、あるコンポーネントだけ使うということが容易なのがいいです。

639 :デフォルトの名無しさん:04/08/18 23:53
MFC の限界っていうより、C++ の限界にかなり制約を受けてると思う。


640 :デフォルトの名無しさん:04/08/18 23:57
C++がもっとまともな仕様なら
MFCも使いやすいライブラリになっていただろうに。


641 :デフォルトの名無しさん:04/08/19 01:12
最近Java厨がいろんなスレを荒らしてるね

642 :デフォルトの名無しさん:04/08/19 01:16
MFCが肌に合わないならWTLでも試しては伺か?
ってか、厨房の言語の宣伝とかいらねぇ。

Del厨もJava厨も巣に帰れと(ry

643 :デフォルトの名無しさん:04/08/19 01:59
そもそもMFCが肌に合わないとかいう話がスレ違いなんだが。
愚痴はマ板へ。
言語厨は厨用スレへ。
ここはどんな理由にせよMFCを使う人のためのスレ。

644 :デフォルトの名無しさん:04/08/19 06:02
亀ですがクラスレベルでスレッドセーフとは何を意味してますか?
オブジェクトレベルでスレッドセーフでないということは分ります。
同一インスタンスのものを複数のスレッドから触るときは排他がいるということですね。

クラスレベルでもスレッドセーフでないと言ったらどうなるのでしょう?
たとえばそれはあるクラスがstaticなメンバなどを使ってそのクラスの共有の
情報をもっていてそれが複数のスレッドから触られるとおかしくなるような設計である。
といったことですか?


645 :デフォルトの名無しさん:04/08/19 06:14
dejavu?

646 :デフォルトの名無しさん:04/08/19 11:22
>>644
そういうことだと思う

647 :デフォルトの名無しさん:04/08/19 23:26
>>646
ありがとう!

648 :デフォルトの名無しさん:04/08/21 12:57
.NETにはあるようですが、MFCにてurlencodeをする方法がみつかりません。
良き方法があればご教授いただきたい。
やはり、コーディングするしかないのでしょうか?

649 :デフォルトの名無しさん:04/08/21 14:35
>>640
時間軸として逆じゃね?
ARM以前のC++の貧弱な表現力で作ったらあーなったのがMFCで、
ある意味、今のC++に至る過程でMFCは反面教師として機能していた。

650 :デフォルトの名無しさん:04/08/21 14:38
今MFC作ったらCStringもstd::stringの派生だったかもしれないね。
CObArrayなんかもなかっただろうし。

651 :デフォルトの名無しさん:04/08/21 17:51
>>650
無知登場
文句は受け付けません
ググレ

652 :650:04/08/21 18:17
>>651
文句は言わんが、あんたの言いたいことが判らん。
#だからこそ無知と言われているのだろうが。

653 :デフォルトの名無しさん:04/08/21 18:19
>>651
ない爪を隠そうとしなくてもw

654 :デフォルトの名無しさん:04/08/21 19:59
ほんとに無知なのに勘違い自信家だと調べもしないで偉そうにするのな(しかも自作自演)

655 :デフォルトの名無しさん:04/08/22 00:50
質問です。
MFCでアクセスのDBから検索するプログラムつくりました。
一緒にアクセス(のフォーマット)のDBを配布したいんですけど
ライセンスは大丈夫ですかね?

656 :デフォルトの名無しさん:04/08/22 10:10
ダイアログバーの追加がうまくいきません

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

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

とりあえずダイアログバーを表示するだけの場合でも他に何かやらなければならないことがありますか?

657 :デフォルトの名無しさん:04/08/22 10:53
>>656
CMainFrameのコンストラクタで、CMainFrameを親としてCDialogBarをCreateしてる
というオチだろうか?

658 :デフォルトの名無しさん:04/08/22 11:51
>>656
コンストラクタ内の auto 変数として CDialogBar オブジェクトを定義している
というオチだろうか?

659 :デフォルトの名無しさん:04/08/22 12:30
>>656
http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_DlgBar.html


660 :656:04/08/22 13:07
なんか勘違いしていました
コンストラクタではなくMainFrameのOnCreateでCreateを呼んでいます
CDialogBar オブジェクトはちゃんとCMainFrameクラスのメンバとして宣言していますし

>>659のサイトの通りにやっても同じエラーが出て実効できません

661 :デフォルトの名無しさん:04/08/22 13:12
>>660
まず落ちている個所を特定しる。

662 :デフォルトの名無しさん:04/08/22 14:03
>>650
UNICODEビルドの場合、std::stringの派生じゃ困ると思う。

663 :デフォルトの名無しさん:04/08/22 14:23
>>662
std::basic_string<TCHAR>

664 :デフォルトの名無しさん:04/08/22 16:23
>>663
そんなことみんな知ってるよ

665 :デフォルトの名無しさん:04/08/22 16:29
>>664
ちゃんと話がかみ合ってると俺は見ているが・・・
この後の展開次第かもな

666 :デフォルトの名無しさん:04/08/22 17:30
いまのCStringってテンプレートだよね
VC++6.0はちがったとおもったけど

667 :デフォルトの名無しさん:04/08/22 18:00
>>666
そそ、C6とC7で互換性がなくて怪しげなソースが引っ掛かり捲くり。
C6は兎も角、C4の頃はまともにテンプレートが使えない状態だったし。

668 :デフォルトの名無しさん:04/08/22 18:14
VC++.NETつかえねー

669 :デフォルトの名無しさん:04/08/22 18:20
>>668 ( ´,_ゝ`)プッ・・

670 :デフォルトの名無しさん:04/08/22 18:44
>>667
爆弾? 新型でてるのか??

671 :デフォルトの名無しさん:04/08/22 18:45
C6とかC7って首都高みたいだな。

672 :デフォルトの名無しさん:04/08/22 23:40
タイトルバーの文字列ってどう変更するんでしょうか?
実行途中で変えるとか起動時に変える
というのではなく、デフォルトを変えたいと言うか…

673 :デフォルトの名無しさん:04/08/23 00:10
>>672
リソースストリングテーブルのIDR_MAINFRAMEに
・SDIなら先頭から\nまでの文字列
・MDIなら文字列そのもの
がタイトルバーに表示されるような気がした。


674 :672:04/08/23 00:26
>>673
変更できました
ソースを必死で検索してました…

ありがとうございました

675 :デフォルトの名無しさん:04/08/23 00:29
>>674
大サービスついでに言っとく。
ttp://www.ne.jp/asahi/hishidama/home/tech/vcpp/caption.html

676 :デフォルトの名無しさん:04/08/23 12:28
>>675
リンク先のページで、動的に変える場合は SetWindowText とか使えとなっているけど、
CFrameWnd::SetTitle で変えるか、GetTitle をオーバーライドして変えておかないと
不意に元に戻されて「MFCは陰で何やってるかわかんない・・・APIだけの方がラクぽ」
ってことになるので注意。

677 :デフォルトの名無しさん:04/08/25 03:02
TCHARと_TCHARのちがいってなんですか?

678 :デフォルトの名無しさん:04/08/25 08:48
>>677
_TCHAR
 tchar.hが_UNICODE/_MBCSが定義されているかで切り替える。
TCHAR
 windows.h(の中のwinnt.h)がUNICODEが定義されているかで切り替える。LPCTSTRなどの仲間がいる。

679 :デフォルトの名無しさん:04/08/25 16:31
質問させてください。

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

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

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

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



680 :デフォルトの名無しさん:04/08/25 17:35
>>679
まずはデバッガで GetAvtiveView が返してきたものを見てみたら?

681 :デフォルトの名無しさん:04/08/25 18:10
>>679
そりゃCTreeViewにキャストしたらCTreeViewまでのメンバしか使えないでしょ。


682 :679:04/08/25 18:18
>>680
ぬるっす。
わかりました。OnCreateでやってたからだめなんですね。
Activeじゃないですものね。

ありがとうございました。

683 :デフォルトの名無しさん:04/08/25 20:12
質問です。
エクスプローラの超簡易版みたいなものを作っています。
ツリービューでの表示と展開はできるようになったのですが、
たとえば展開しているフォルダに別アプリなどで新しいフォルダ
を作成した時、すぐにエクスプローラの表示に反映させるには
どうすれば良いでしょうか?

MFC6.0です、よろしくお願いします。

684 :デフォルトの名無しさん:04/08/25 20:32
>>683
FindFirstChangeNotification

685 :デフォルトの名無しさん:04/08/25 21:52
>>684
ありがとうございます!

686 :デフォルトの名無しさん:04/08/26 00:29
>>678
回答ありがとうございます。MFCだと_TCHARがよさそうなので_TCHAR使います。

687 :デフォルトの名無しさん:04/08/26 12:12
MFCアプリのGUIスレッドでメッセージだけでなくCEvent等の
監視も行いたいと考えています。とりあえず考え付くのは
CWinThread::PumpMessage内のGetMessageの前、又は
OnIdleにてMsgWaitForMultipleObjectsを呼ぶ方法です。
CWinThread::RunのoverrideにしてもOnIdleのブロックに
しても余り一般的とは思えず躊躇してます。

似たような事をやったことある人がいれば意見をお願いします。

688 :デフォルトの名無しさん:04/08/26 12:57
>>687
AfxBeginThread()でスレッドを作り、その中でシグナルイベント待ち。
ユーザーインターフェーススレッドに対して通知をしたい場合は、
WM_USER以上のユーザー定義メッセージを送信する。
受け取る側でもメッセージをユーザー定義メッセージ受信できるようにしておく。

689 :デフォルトの名無しさん:04/08/26 13:52
MFCベースアプリで実装されている機能についてプラグインにすることになったのですが
プラグインとはどうやって作ればいいのでしょうか?


690 :デフォルトの名無しさん:04/08/26 14:37
>>689
susieプラグインで練習してみれば?

691 :デフォルトの名無しさん:04/08/26 17:58
>>688
WM_USERじゃ拙いって。WM_APPを越える値がお勧め。

>>687
私のアプリでは、タイマーでイベント監視をした。
イベントの場合は落とし穴がいろいろあるから気をつけてや〜

692 :687: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するのですか?


694 :デフォルトの名無しさん:04/08/27 08:23
>>692
処理速度が問題になるなら、イベントでの同期は検討しなおした方がよくない?
イベントはそれ自体早くないと思うし、発行側は処理側が処理したことを知りえないから
何らかの方法で返信しないといけなくなるしね。

695 :デフォルトの名無しさん:04/08/27 09:25
>>687,692
質問者の分際で、評論家・審査員を気取ってんじゃねーよ、クソが

696 :デフォルトの名無しさん:04/08/27 09:37
MFC使っときながらスレッド生成のコストを気にする人には困ったものだ。
単にスキル不足なだけちゃうんかと。

697 :デフォルトの名無しさん:04/08/27 10:00
>>696
お前が偉そうに言うな

698 :デフォルトの名無しさん:04/08/27 12:09
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に付いてる意図はなんでしょうか?

699 :デフォルトの名無しさん:04/08/27 12:34
>>698
CStringが作られた頃のC++は代入演算子の結果がCと同じく右辺値だったからじゃない?
それでCStringもそれに合わせてoperator =()の戻り値を値渡しに……するとオーバーヘッドがかかるんでconst参照にした、って具合。

700 :デフォルトの名無しさん:04/08/27 12:53
>>698
WTLって知ってる?マイクロソフトのサイトからダウソできるよ。
WTLのCStringだと、constじゃないよ。
WTL::CStringで解決。終了。

701 :デフォルトの名無しさん:04/08/27 13:21
>>700
>意図はなんでしょうか?
って聞いてるんだから、その答えじゃ解決になってませんよっと。

ちなみに、手元にあるVer7.1(build 3340)ではconstで
最新のWTL7.5.4196.0 では付いてませんね。

702 :700:04/08/27 13:33
>>701
マジですか?よく調べずに書いてしまった。
当方、WTL7.5です。
>>698さん、そんなわけでスマソ。忘れて下さい。

703 :700:04/08/28 03:39
>>702
なりすましはやめてください。

704 :デフォルトの名無しさん:04/08/28 15:17
早く夏休みが終わりますように…(ナムナム

705 :yara ◆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にセットし直しても、上手く動かないようです。

何か良い案、参考情報へのリンクなどお知りでございましたらご教授ください。

707 :デフォルトの名無しさん:04/08/29 22:16
>>706
SetActiveViewとかどうよ?(試してないが)
ついでに
>お尻でございましたら
「ご存知でしたら」じゃね?

708 :706:04/08/29 22:35
>>707
お恥ずかしい(涙

SetActiveViewを試してみたのですが、上手くいきませんでした。

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

710 :デフォルトの名無しさん:04/09/07 17:03
すでに(VIEWの)ウィンドウがあるかどうかくらいは確認したんだろうな?

711 :デフォルトの名無しさん:04/09/07 17:51
コンボボックスについて質問です。

コンボボックスのエディットコントロールでテキストを変更した場合、OnCbnEditchangeXXXXが呼ばれますが、
このエディットコントロールのテキストの内容を取得する方法を教えてください。

712 :デフォルトの名無しさん:04/09/07 18:00
>>711
「テキストの内容」ってなんだ?
GetLBText()じゃないの?

つーかリファレンスでメンバ関数のチェックぐらいしたんだろうな?

713 :デフォルトの名無しさん:04/09/07 18:04
>>712
失礼しました。
誤)テキストの内容
正)エディットボックスの内容

その関数だとリストボックス内のテキストです。
エディットボックス内のテキストを取得する方法が見つかりません。

714 :デフォルトの名無しさん:04/09/07 18:49
GetWindowText

715 :711:04/09/07 19:14
>>714
ありがとうございました。

716 :デフォルトの名無しさん:04/09/08 01:10
VC6.0で開発しています。

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

IEコンポーネントのうちURLからコンテンツを取得する機能と
htmlコンテンツを解析する機能を使いたいのですが
どのようにすればよいのでしょうか?

717 :デフォルトの名無しさん:04/09/08 01:14
>>716
「解析」というのが何を指しているのか分からないね。
IEコンポーネントを使うって書いてあるけど、ブラウザ・エンジンを使うってのは
普通レンダリングさせるためであって、ファイル内容をHTMLコードとして見る
だけなら必要ないことのはずだが?

718 :716:04/09/08 01:23
>>717
レスありがとうございます。

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

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

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

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

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



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

720 :デフォルトの名無しさん:04/09/08 01:37
>>719

そうです。
でもXMLパーサーでは解析できませんよね?
一応試して見ましたができなかったので
IEコンポーネント使えば確実だろうと思いました。

721 :デフォルトの名無しさん:04/09/08 02:26
http://www.asia.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vcsample/html/_sample_mfc_tear.asp

722 :デフォルトの名無しさん:04/09/08 09:22
CHtmlViewってのはあくまでViewであって表示させるためのものだと思うが?
中身をデータとして扱いたいならCHttpXXX系やCAsyncSocketなんかを使って
ファイル・データをもってきて自分で使いたいように加工するもんだと思う。

723 :デフォルトの名無しさん:04/09/08 09:53
軽いHTMLパーサならCodeProjectとかSourceForgeとかにありそうだけどな。

724 :デフォルトの名無しさん:04/09/08 17:21
>>722
自分でparseしたくないって話だっただろ。
GetHtmlDocumentでドキュメントインターフェイスの取得できるし。

725 :デフォルトの名無しさん:04/09/08 19:27
>>720
IEコンポっていうか MSHTML っていうのが MS の html エンジン。
IE も WebBrowser Control もコレ使ってる。
使い方のサンプルは以下にあるよ。
データを持ってくるところは自分でやることになるような気がするけど。

http://msdn.microsoft.com/archive/en-us/samples/internet/browser/walkall/default.asp?frame=true


726 :720: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(引数あり)を使いたいんですが、
どう変数を宣言すればいいのか、どうポインタを渡せば良いのか
分からないってことです。
すいません、お願いします。

729 :デフォルトの名無しさん:04/09/09 20:04
名前が化けました。727=728です。

730 :デフォルトの名無しさん:04/09/09 20:06
とりあえず、地道に勉強してくれ。

731 :デフォルトの名無しさん:04/09/09 20:09
3日もあればかなり勉強できる(・∀・)!

732 :デフォルトの名無しさん:04/09/09 23:50
ネットワークスレから移動してきました。
再質問します。
677 名前:デフォルトの名無しさん :04/09/09 22:52
ライブラリに依存する質問になってしまいますが、MFCのCAsyncSocketのOnXXX()は、
どういう仕組みで呼び出されるのでしょうか?
もし、メッセージポンプを経て呼び出されるのなら、OnXXX()の中では長時間の処理が
出来なくなりますが、皆さんどう対処しているのでしょう?


678 名前:677 :04/09/09 23:38
ソース見てみました。
カレントスレッドのメッセージポンプを利用するみたいですが、あってますか?
もしかしてスレ違いでしょうか?

733 :732:04/09/10 00:31
CWinThreadはメッセージポンプが付いているそうですが、
これを利用すればいいのでしょうか?

734 :デフォルトの名無しさん:04/09/10 00:41
よく分らないけどメッセージハンドラ内でどうしても処理が長くなるのなら
処理をスレッドに配置してスレッド起動をして、そのままメッセージハンドラを抜けてしまえばいいんじゃない?
ってか何をするのかによる。本当に長い計算をするのならスレッドにすればいいと思う。
何かを待つのなら・・・何を待つのか聞きたい。



735 :732:04/09/10 00:50
>>734
例えば子プロセスの終了を待つとか。

736 :732: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というのはあくまでもたとえです。

739 :デフォルトの名無しさん:04/09/10 01:26
別プロセスにして、サーバー同士はプロセス間通信しとけよ。

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が自動インプリメント)に失敗したとか。

745 :デフォルトの名無しさん:04/09/10 01:38
>>741
別に普通だけど?

746 :デフォルトの名無しさん:04/09/10 01:39
実は、先ほどMFCソース(CAsyncSocket)を読んでみて余りのシンプルさと、
素直とは言えない作りに驚きました。
これだったら、自分で作り直したほうがいいのではないかとさえ思うのです。
皆さんはどう思いますか?

747 :742:04/09/10 01:40
>>743
自分はUIスレッド複数はやったことが無いので、一般的かどうかについては
他の回答者の方の回答をお待ちくださいです。


748 :デフォルトの名無しさん:04/09/10 01:51
既存のものを作り変える必要性が本当にあるかというのも気になる
既存のものの問題がもしブロッキングとかだったら正しくselectを使うなど
すれば回避できると思う。しかしそのブロッキングの解決策としてCAsyncSocketを使うのは
結局同じ問題に到達するかもしれない上に変なアーキテクチャのために振り回されるかも。


749 :デフォルトの名無しさん:04/09/10 10:11
一般論として、技術があるなら自分でできるところまでやれば良いけど、自分で
やった分には責任を持たなくちゃいけないことになる。それを踏まえてどこまで
自分で「できる」のか判断して決めるしかないのでは?

750 :デフォルトの名無しさん:04/09/10 12:02
>>732
OnXXX で(自らなにか)時間のかかる処理をするなら、
非同期でソケットを使う利点はまるでないと思うけど。

>ソケット側のちょっとした挙動の変化でGUIを止めたくないのです。
ちょっと状況が想定できないけど、どんなときにそういう問題がおきますか?


751 :デフォルトの名無しさん:04/09/10 12:41
>>728
DDXでぐぐれ

752 :デフォルトの名無しさん:04/09/10 12:52
DDXなんか関係ないじゃん

753 :デフォルトの名無しさん:04/09/10 12:58
>>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
スレッド自身が任意のタイミングで。

798 :740: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"

802 :795: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 股来た 目がビーチクでターンエーがオメコで括弧が足

805 :795: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変数を持たせる方法というのがあるそうです。

ただ、こういった処理をしたい場合、これが定番な書き方なのでしょうか?
もうちょっとスマートなやり方がありそうな気がするのですが。。

813 :812:04/09/16 19:06:17
あ、テキストボックスにメッセージが送られるのは、
スピンボックスから自動関連付けしているのが原因っぽいです。
関連付けを外したらダイアログは普通に表示されました。

814 :デフォルトの名無しさん:04/09/16 19:13:25
>>812
スマートかどうかは知らないけど、とりあえずピンポイントその状況だけ避けるなら
if (::IsWindow(m_EditX..m_hWnd)) とかで判定する手もあると思う。

815 :812: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
ってあまり使ってませんかそうですか

822 :795: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の場合は知らないけど。

836 :835:04/09/18 10:19:59
>>835で書いたヤツだと、自分で能動的にリストを更新したい場合は、
WM_PAINTを送るだけでいいから楽だよ。

LVN_GETDISPINFOとか、LPSTR_TEXTCALLBACKでググって見れば?
MFCでも逝けるはず。試してないけど。

837 :835: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
>>831
ttp://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200409/04090044.txt

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
>>843
ttp://www.athomejp.com/goldfish/mfc/dialog/nonesc.asp

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
>>860
>>849

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 ファイルを削除した後にもう一度
試してみたんですがやはり同じ症状です。

903 :902: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
クラスビューは、あくまで作業の参考・手助け。
見た目が破損しててもコンパイル・ビルド作業への影響は一切ない。

914 :907:04/09/24 14:27:26
>>910-913
意味は分かりませんがやっぱり仕様ですかねえ。
とりあえずUNICODEは使わないのでconst char *
でやっときます

915 :デフォルトの名無しさん:04/09/25 04:07:08
CStringの中のTabSpaceの見分け方を教えて下さい。
削除したくて、Trimで色々やってみたのですが、うまいこといきません、
教えてエロイ人。

916 :915: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()でやればいいんじゃないの。

926 :924: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では試したことないけど」って言うの忘れた

938 :933: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そのものを全く知らん状態で始めるならとりあえず入門書として
林晴比古の本なんかを薦めてみるが、取っ掛かりだけ掴めれば
後は余程専門的な事をやらない限りはネットで調べた方が早いし
詳しい情報が載ってる。

956 :デフォルトの名無しさん :04/09/30 22:51:26
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
ビットマップスタイル

968 :sage: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";


979 :973: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 :デフォルトの名無しさん:04/10/03 01:17:12
>>974
コンストラクタではタイミング的に早すぎて、
GetDlgItem(IDC_RADIO1)が成功しないんだと思う。
OnInitDialog()内で行ってみては?



988 :デフォルトの名無しさん:04/10/03 17:04:14
OFN_FILEMUSTEXIST

989 :デフォルトの名無しさん:04/10/03 17:23:20
上書きしか許さないとは斬新なUIだな

990 :デフォルトの名無しさん:04/10/03 17:34:36
OPENFILENAME構造体を直接指定する生のAPI使えばいいのに・・・。
GetOpenFileName()、GetSaveFileName()あたりを参照。

MFCのCFileDialogはAPI並に面倒くさいわりに得られるメリットが薄く、
ぶっちゃけ必要ないクラスのひとつ。
下位互換のための存在だと思って差し支えない。
そんなわけで素直にAPI使っとけ。

991 :デフォルトの名無しさん:04/10/03 18:49:28
次スレまだ〜

992 :デフォルトの名無しさん:04/10/03 21:32:42
まだかよ

993 :デフォルトの名無しさん:04/10/03 21:36:00
まだだよ

994 :デフォルトの名無しさん:04/10/04 00:07:36
質問です。
ダイアログベースのアプリにタブコントロールを配置して、PropertySheetを挿入してるのですが
途中でもう一度新しくPropertySheetのインスタンスを生成して、タブコントロールに挿入したいのですが
追加と言う形になってしまいます。
どうすれば全部破棄した後、挿入出来るのでしょうか?

宜しくお願いします。

995 :デフォルトの名無しさん:04/10/04 02:07:51
>>994
無理

996 :デフォルトの名無しさん:04/10/04 02:21:57
age

997 :デフォルトの名無しさん:04/10/04 02:22:32
埋め

998 :デフォルトの名無しさん:04/10/04 02:23:28


999 :デフォルトの名無しさん:04/10/04 02:24:34
梅尾

1000 :デフォルトの名無しさん:04/10/04 02:25:20
ヨン様

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

229 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)