■ VisualC++(MFC限定)相談室 3■
■ このスレッドは過去ログ倉庫に格納されています
0001MFC
NGNG0153デフォルトの名無しさん
NGNG最初は、フレームのクライアント領域一杯に合わせて作成されるみたいですけど
この大きさを変更したいのです。
0154デフォルトの名無しさん
NGNGvoid xxxx::OnDeleteitemTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;//←クラスウィザードに憑いていたコード
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
TV_TIEM item=pNMTreeView->itemNew;//ここに情報が格納されると思ったけど駄目
*pResult = 0;
}
typedef struct _TV_ITEM { tvi
UINT mask;
HTREEITEM hItem;
UINT state;
UINT stateMask;
LPSTR pszText;
int cchTextMax;
int iImage;
int iSelectedImage;
int cChildren;
LPARAM lParam;
} TV_ITEM, FAR *LPTV_ITEM;
根本的に間違ってるのかな?
0155154
NGNG0156ともくん
NGNGリストコントロールのヘッダーの高さが変更できません。
どうしたらいいんでしょう?
0157デフォルトの名無しさん
NGNGダイアログユニット(DLU)
詳しくはGetDialogBaseUnitsとかのヘルプを見て下ちい。
0158デフォルトの名無しさん
NGNG戻り値は1です。
CToolBarCtrl::HideButton は非表示になります。
なぜCToolBarCtrl::EnableButtonで淡色表示にならないのでしょうか。
0159デフォルトの名無しさん
NGNGWM_SIZEを受け取って自前で大きさを変える。
ついでに WM_GETMINMAXINFO で検索してみたまい。
0160デフォルトの名無しさん
NGNGMFCには独自のやりかたがあるよ。
UPDATE_COMMAND_UIハンドラで
pCmdUI->Enable(FALSE);
してね。
0161デフォルトの名無しさん
NGNGずばり前スレの
http://pc.2ch.net/test/read.cgi/tech/1008031675/783
に出てるんだけどな。
0162デフォルトの名無しさん
NGNGvoid CHogeDlg::OnPaint()
{
if (IsIconic())
{
この部分
と、
// システムは、ユーザーが最小化ウィンドウをドラッグしている間、
// カーソルを表示するためにここを呼び出します。
HCURSOR CHogeDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
の部分って、いつ呼ばれるんです? ダイアログを最小化しても呼ばれないみたいだし。
っていうか、何のためにあるのか分かりません。何で?
「最小化ウィンドウをドラッグ」ってどういうことですか?
0163デフォルトの名無しさん
NGNGexplorer以外のシェルを使うとわかるかも。l
0164デフォルトの名無しさん
NGNG俺はその部分削除してるけど問題ない
クラスウィザードから削除しましょう
0165デフォルトの名無しさん
NGNGNT3.51などのprogmanがシェルだったころの名残だろ。
http://www.microsoft.com/japan/support/kb/articles/J013/3/34.asp
0167デフォルトの名無しさん
NGNGATL COM AppWizardで
MFCをサポートするようにしたんだけど
CRecordsetクラスから派生したODBCで外部DBにアクセスするクラスを生成しようとすると
CRecordsetが定義されていないとエラーが出ます。
#include <afxdb.h>としても
windows.h includedとかってエラーが出ちゃうんですが
解決策のヒントでもいいんでご教授お願いします。
0168デフォルトの名無しさん
NGNG嫁
夜目餘目
0169デフォルトの名無しさん
NGNGたとえばmySocketクラスをCSocketを継承しないで作った場合、
class mySocket {
CArchive *m_paout;
CArchive *m_pain;
CSocketFile* m_psf;
CSocket *m_ps;
}
こんな感じにメンバーがいてソケットにデータを送った場合
データ変身があるとm_psのOnRecieveが呼び出されますよね?
このときのOnReceiveをmySocketクラスからオーバーライドするには
どうしたら良いのでしょうか?
0170デフォルトの名無しさん
NGNG0171デフォルトの名無しさん
NGNGって書いてあるところにそのままCSocketを使うのではなく
CSocketから派生させたクラスを作って、そのクラスでオーバー
ライドするよ。普通は。
0172デフォルトの名無しさん
NGNG継承すれ。
class mySocket : public CSocket {
CArchive *m_paout;
CArchive *m_pain;
CSocketFile *m_pst;
void OnReceive(int);
};
0173デフォルトの名無しさん
NGNGこのページにのってる方法で、
MDIアプリケーションでのドキュメントのポインタを得ようとしているのですが、
(後半のサンプル)
CxxxDoc* pDoc = (CxxxDoc*)GetDocument(pView);
引数として指定するpViewをどのようにすべきかがわかりません。
そもそもViewへのポインタが得られていればそこからGetDocument
できるような気がしてしまうのですが・・・・・
0174デフォルトの名無しさん
NGNGお二方、どうもありがとうございます。
無事解決しました。同じようなケースになることがたまにあるのですが、
それは設計が悪いのですね・・
CFormViewの中に設置したアイテム一つ一つの関数をオーバーライドしようとするときなどに
やっぱりこんな問題にぶつかります。
0175デフォルトの名無しさん
NGNG> できるような気がしてしまうのですが・・・・・
その Web ページちゃんと読んだ ?
> しかし、ビューをドキュメントに関連付けずに作成した場合などは、
> m_pDocument にドキュメントへのポインタは入っていません。
> したがって GetDocument() は使えないということになります。
> でも、どうしてもドキュメントへのポインタが必要なときがあります。
の時の話だよ。普通は、GetDocument() でいいんだよ。
0176173
NGNGいえ、ビューの中から呼ぶのではなく別のところから
自分で作った新規クラスから呼びたいのです。
MDIですのでMAinView+MainDoc以外にも
いくつかのView+Docのくみあわせがあります。
その中で特定のDocを得ようとしているのですあ・・・
0177デフォルトの名無しさん
NGNGどうすればよいかわかる方はおられますか?
そう、ちょうどタグブラウザのウィンドウシステムみたいにしたいのです。
0178
NGNG以前の設定+リンクの項目ってどこへいったのでしょか。。
0179
NGNGライブラリの設定なら、なくなったんじゃないかな。
指定しなくてもソースから自動でリンクをするようになってると思う。
0180デフォルトの名無しさん
NGNGそのダイアログにサイズ変更枠をつけたいんだけど
どうすればいいのでしょう?
0181デフォルトの名無しさん
NGNG俺も前にやろうとしたけど・・・
無理だと思う・・・
0182デフォルトの名無しさん
NGNGただ、それをつかってサイズを変更できるかは
知らないけど。
0183173
NGNGTreeViewを使ったプログラムなのですが、
ViewでもDocでもない
新規クラスをつくりDocのメンバ変数とします。
そしてそこから、Docの中身を変更したときに
TreeViewを再描画させたいのです。ですのでDocのポインタと取り
UpdateAllViewsするのがいいのだろうかと思ったのですが、
このようなケースの時はどのような方法がベストでしょうか・・?
0184デフォルトの名無しさん
NGNGウィザードで作ったスケルトンのソースを見れば良いと思います。
>>183
> Docのポインタと取りUpdateAllViewsする
という方法がいいと思います。
0185173
NGNGそうですか、やっぱりそこまでの方針は正しかったのですね・・・
強引にCMyCLassから
CMyCLass::Update(){
MainView* pView;
MainDoc * pD = (MainDoc*)GetDocument(pView);
pD->UpdateAllViews(pView);
}
こんな風にしてみましたが、だめでした・・
これは当然でしょうね・・・
↓この関数を呼びたいのですが・・・
CDocument* GetDocument(CView* pView)
{
// pAppにCWinApp オブジェクトへのポインタを取得
CWinApp* pApp= AfxGetApp();
// 最初のドキュメントテンプレートの位置を取得
POSITION posTemplate = pApp->GetFirstDocTemplatePosition();
while (posTemplate != NULL)
{
// ドキュメントテンプレートへのポインタを取得
CDocTemplate* pTemplate = pApp->GetNextDocTemplate(posTemplate);
// 最初のドキュメントの位置を取得
POSITION posDoc = pTemplate->GetFirstDocPosition();
while (posDoc != NULL)
{
// pDocにドキュメントへのポインタを設定
CDocument* pDoc = pTemplate->GetNextDoc(posDoc);
// 最初のビューの位置を取得
POSITION posView = pDoc->GetFirstViewPosition();
while (posView != NULL)
{
// pDocViewにビューへのポインタを設定
CView* pDocView = pDoc->GetNextView(posView);
// 取得できたビューが指定されたビューならpDocをリターン
if (pDocView == pView)
return pDoc;
}
}
}
return NULL;
}
0186デフォルトの名無しさん
NGNG0187173
NGNGGetActiveDocumentはCFrameWndのメンバですよね。
こうなると今度はCFrameWndのとり方がわからなかったりします・・。
うーん結局問題は
自作クラスとMFCクラスとの連携かも・・・
自作クラスからMFCのViewクラス、Docクラス、Frameクラス
あたりのポインタを手に入れる方法がわかれば何とかなりそうなのですが・・
アプリケーション全体へのポインタならAfxGetApp()
で手に入れることができるのはわかるのですが・・・
しかし問題は自作クラスと、MFCクラスの連携にあるとすると、
メッセージハンドラを使った連携なども可能そうですね。
例えば自作クラスから任意のハンドラをアプリケーションに返したり
なんてことは出来るのでしょうか?
できるならWM_UPDATEを自作クラスから発信して
Viewクラスでそれを受けて更新処理をすればいいのではと思います。
0188デフォルトの名無しさん
NGNGSendMessageもできますし、CMainFrameでキャストすれば
GetActiveDocumentできます。
0189173
NGNGありがとうございます。
だんだん核心に近づいてきたかんじです。
CMainFrame *pMf = (CMainFrame*)AfxGetMainWnd();
MainDoc * pMd = (MainDoc*)pMf->GetActiveDocument();
こんな感じでやってみました。
これでMainDocへのポインタを手に入れることが出来ました。
そして
pMd->UpdateAllViews(
しようとすると・・・・
UpdateAllViewsの第一引数pView pSenderが・・・・
入れるものがないです・・・。
Viewへのポインタが結局必要なのでしょうか・・・
SendMessageの方は
CWndから送れるようですので、
試してみます。
しかしWM_UPDATEってメッセージないんですね・・・
てっきりOnUpdateを呼ぶメッセージがあるきがしてたのですが・・・
0190デフォルトの名無しさん
NGNGとりあえず0でいいよ。
とりあえず0でいいよ。
0191デフォルトの名無しさん
NGNG勘違いしてるようだけど、UpdateAllViewsの第一引数には
更新したいビューではなくて、更新したくないビューのポインタを入れる。
ビューを更新したいならNULLで。
0192180
NGNGレスどうもです
しょうがないのでCTabCtrl使って自作しました
0193173
NGNGどうもありがとうございます
CMainFrame *pMf = (CMainFrame*)AfxGetMainWnd();
MainDoc * pMd = (MainDoc*)pMf->GetActiveDocument();
pMd->UpdateAllViews(NULL);
このようにしたらコンパイルをちゃんととおり
よーし!っと思って実行すると
こんどはUpdateAllView関数内の
POSITION pos = GetFirstViewPosition();
ここでエラーが出ている模様・・・・・・。
これはいったい・・・・・
0194デフォルトの名無しさん
NGNGCMainFrame *pMf = (CMainFrame*)AfxGetMainWnd();
pMf->GetActiveDocument()->UpdateAllViews(NULL);
もできないかな?
0195デフォルトの名無しさん
NGNGちなみに1度に複数選択できるようにしたいです。
フォルダ名が取得できなかったりして困っております。
0196173
NGNGんーと、やっぱり同じ現象です。
どうやらGetActiveDocumentが
CMainFrame *pMf = (CMainFrame*)AfxGetMainWnd();
if (pMf == NULL){AfxMessageBox("error11");}
MainDoc * pMd = (MainDoc*)pMf->GetActiveDocument();
if (pMd == NULL){AfxMessageBox("error12");}
pMd->UpdateAllViews(NULL);
結局"error12"とメッセージボックスが開き
GetActiveDocument()がエラーを返す模様。
んーよく考えたらMDIだから
メインフレーム→子フレーム→GetActiveDocument()としなきゃならないのかもしれませんね。
0197デフォルトの名無しさん
NGNG内容更新時に垂直スクロールバーが表示される場合のみ、以前のテキストが消されずに残ってしまいます。
また、その内容をスクロールしても、テキストが残されたままスクロールされ、ゴミが残ります。
正常な処理を行うには、
m_edit1 = cNewData;
UpdateData(FALSE);
だけではだめなのでしょうか?
m_edit1 = "";
を挟んでみたのですが、結果は変わりませんでした。
テキストの量がエディットボックス内に収まる場合(スクロールバーが現れない場合)は正常に更新されます。
更新のタイミングは、メッセージパンドラは拾わず、手動で行っています。
どうか、ご教示お願いします。
リソースエディタでは複数数行、垂直スクロール、改行を許可、境界線、にチェックを入れています。
初歩的な質問で申し訳ありません。よろしくお願いします。
0198デフォルトの名無しさん
NGNGMDIは作ったことないんだけど、
>MainDoc * pMd = (MainDoc*)pMf->GetActiveDocument();
は
MainDoc * pMd = (MainDoc*)(pMf->GetActiveDocument());
かなぁと。
あと、ドキュメントが複数あるようだけど、MainDocはアクティブになってるのかな??
0199を
NGNG>更新のタイミングは、メッセージパンドラは拾わず、手動で行っています。
これの意味が良くわからないけど、とりあえず
UpdateWindow()とかInvalidate()とかしてみるのは堂でしょおう
0200197
NGNGありがとうございます。
Invalidate()を使って更新時に正常に描写されるようになりました。
スクロール時にゴミが残るはまだ対処できていません。
OnCtlColor()でフォームビューの背景の色を変えていたのですが、この辺にも原因がありそうです。
こちらの方を、もう少し調べてみます。
>更新のタイミングは、メッセージパンドラは拾わず、手動で行っています。
説明下手で申し訳ありません。自分でも何を言っているのかわからなくなってしまいました。
0201173
NGNGどうもそれでもダメなようです。
もう一度整理してみます
フレームの構成としては
CMainFrame→CChildFrame
→CChildFrame2
となっており
それぞれCChildFrameにMainDoc+MainView
CCHildFrame2にSubDoc+SubView
となっています。
このとき自作クラスCMyClassからMainViewに再描画の命令を出したいのです。
この場合はCMainFrameではなく
CChildFrameへのポインタを手に入れ
そこからGetActiveDocumentすればいいのではないかと、考えています。
しかし親フレームから子フレームのポインタを手に入れる、
もしくはアプリケーション全体へのポインタから特定の子フレームの
ポインタを手に入れる方法がわからず悩んでいます。
0202デフォルトの名無しさん
NGNG自作クラスから View/Doc/Frame へのポインタを手に入れようとするから複雑になる。
自作クラスに View/Doc/Frameが自分へのポインタを自己申告すれば良いんでは?(初期化のときとかに)
あとは、自作クラスからやりたい放題。
見当違いだったらゴメンね。
0203173
NGNGありがとうございます。なるほど発想の転換ですね。
自作クラスというのがサーバの情報をもつクラスなのですが、複数あり、
それがMainDocのメンバとなっています。
ですのでMainDocの関数の中から自作クラスのオブジェクトを作るときに
MyServer("www.***.com","80",this)//アドレス、ポート、MainDocへのポインタ
を渡してthisを
自作クラスのメンバpMainDocに代入したら、
pMainDoc->UpdateAllViews(NULL)で出来ました。
しかしこの場合、あるオブジェクトが自分を保持しているクラスの
ポインタがわからないから、あらかじめ教えてもらうという方法ですよね。
クラスA →メンバとして所持→ クラスB
という関係の場合AからBへのポインタはすぐ手に入りますが
BからAは難しいんですね。
0204173
NGNGMDIアプリケーションで
子ウインドウが一つ開いていて
そこからもう一つ別の種類の子ウインドウを開くときにはどうすべきでしょうか?
先ほどと同じなのですが
CMainViewもしくはDocから
ChildFrame2+SubDoc+SubViewの組み合わせを
一つ新たに開きたいのです。
これが出来ればMDIについてだいぶ使えるようになるかと思うのですが・・・
DocumentTemplateに新たな子ウインドウへのポインタを追加すると
起動時に二つ(もしくは複数)のウインドウから選ぶ画面が出ますよね。
あのとき選ばなかった方を動的に作り出したいのです。
0205173
NGNGChatFrame *cFrm = new ChatFrame();
CRect cr = CRect(0,0,400,400);
cFrm->Create(NULL,"test",WS_OVERLAPPEDWINDOW,cr,(CMainFrame*)AfxGetMainWnd(),NULL);
cFrm->ShowWindow(SW_SHOW);
SubDocら強引にこんな感じで開いてみました。
すると
Warning: Creating a pane with no CDocument.
まあこれはエラーでるだろうな・・・と思ったのですが・・・
0206173
NGNGいろいろ試行錯誤してようやく問題が整理できました。
つまるところMainFrameのメニューからウインドウ→新しくウインドウを開くを
するとウインドウを開くことが出来ますよね。
これをボタンかなにかでそのボタンを押したら動的にウインドウが開く
といった風にしたいのです。結局新しくウインドウを開くメニューでは
ID_WINDOW_NEWメッセージを送っているようですが、
これでは開くべきドキュメントテンプレートが複数あるときに
それを選択できませんよね?
MfcによるWindowsプログラミングと新VisualC++6.0入門を持っていますが、
MDIアプリに関する情報って少ないんですね。需要が無いんでしょうか・・・
0207デフォルトの名無しさん
NGNG需要が無いわけじゃないんだろうが、よほどの事がないと今はMDIにしないな。
最近はSDI、ていうかもっとExplorerスタイルのスプリッタ画面が主流かも。
2chブラウザのギコナビとかもそうでしょ。
0208デフォルトの名無しさん
NGNGMDIは推奨されてないってことになってるしな
0209173
NGNGそうですね。確かに推奨されてないというのは知っていました。
しかし、代替えの方式として提案されているものの作り方がわからないんですよ・・
こちらも情報が無い・・
「MFCによるWINDOWSプログラミング」の688ページ
(持ってない人すみません)に載ってるワークブックモデルが理想に近いのですが
(タブブラウザのようなものを想定しています)
MDIが作れるようになったら、こっちへ移行して〜っと思っていたのですが、
最初からワークブックモデルを目指した方がいいのかな・・・
タブブラウザのようなワークブックモデルのアプリケーションの解説って何かありませんでしょうか?
今手元にある書籍「mfcによる〜」「新Visualc++6.0、ビギナー編、シニア編」
「VisualC BlackBook」
のどれにも記載が無いのです。
0210デフォルトの名無しさん
NGNG作る例としてタブ付きビューの作り方がちょこっと出てる。
たしか「Best of MSDN magazine 下巻」だったと思うけど、
その本にはExcelのワークシート風のタブウィンドウの作り方が載ってたような。
「VisualC++5.0プログラミング入門」というVC++5.0LearnigEditionに
付いてきた本(市販もされてるはず)には複数View&複数DocのMDI
アプリケーションの作り方が出てる。
あとはCodeGuruやCodeProjectにサンプルがないかなぁ。
0211デフォルトの名無しさん
NGNGによって多国語対応しているソフトありますよね?
これってどうやるんでしょうか?
一応外部DLLからダイアログを表示することはできたんですけどそのあとがわかりません。
CDialog dlg;
HINSTANCE hInst;
RSRC hDlgInit;
hInst = ::LoadLibrary("jpn.lng");
hDlgInit = ::FindResource(hInst,MAKEINTRESOURCE(IDD_ABOUTBOX),RT_DIALOG);
hResource = ::LoadResource(hInst, hDlgInit);
if (hResource != NULL)
{
LPDLGTEMPLATE lpTemplate;
lpTemplate = (LPDLGTEMPLATE)GlobalLock(hResource);
GlobalUnlock(hResource);
dlg.InitModalIndirect(lpTemplate);
}
dlgg.DoModal();
本当はCDialogクラスから派生したCAboutDlgでやりたいんですけど、InitModalIndirect()
呼び出したあとにASSERTでとまっちゃいます。
0212デフォルトの名無しさん
NGNG適当なところ(CXXXApp::m_pSubDocTemplateとか)に保存しておけばいいんじゃないか。
で、適当なユーザ定義メッセージ(WM_APP_OPENFRAMEとかなんとか)を定義して、
そのハンドラ(CXXXApp::OnAppOpenFrame())で
m_pSubDocTemplate->OpenDocumentFile(NULL);
するって感じではどうか。
0213デフォルトの名無しさん
NGNG一応、WinMain()からDosで扱うのは、解ったのですが、
MFCに入れると、スレッドが作成できなかったり、エラーが出てどうしようもありません。
0214デフォルトの名無しさん
NGNGタブブラウザは、ただタブコントロール使ってるだけじゃん。
何が難しいの?
タブコントロールの使い方が分からんの?
0215デフォルトの名無しさん
NGNG0216デフォルトの名無しさん
NGNG0217デフォルトの名無しさん
NGNG0218デフォルトの名無しさん
NGNG5,6どこいったよ!
0219デフォルトの名無しさん
NGNG一つのDocに複数のViewがあるとき
GetDocumentでDocへのポインタをえるにはどうしたらいいのでしょう?
AppクラスのInitInstanceのRUNTIME_CLASS
ではViewを一個しか指定できないですよね。
0220173
NGNGそのタブビューの作り方はやってみました。
でもそのタブの動的作成が難しそうだなあ・・と思って作っただけで放置してました。
もう一回チャレンジしてみます。
>212
ありがとうございます。
とりあえずその遣り方で解決しました。
0221デフォルトの名無しさん
NGNG0222デフォルトの名無しさん
NGNGどのViewからGetDocument()しても、
Documentへのポインタは取得できますが・・・
0223173
NGNG結局TabViewでやることにしました。
まあタブビューも資料がそんなにあるわけではないですが、
とりあえず
Best of MSDN magazine 下巻
を買いにいきまっす。
基本的に不思議なのがタブビューは一つのビューですよね。
一つ一つのタブの中身を3分割してそれぞれにまた別のビューを割り当てる
ということがしたいのですが、その場合はビューの下にビューを作るということですよね。
そういうことは可能なのでしょうか?
うーーん。先は長そうだ・・・
0224デフォルトの名無しさん
NGNGそれはスプリッタウィンドウでいいのでは?
0225名無しさん@Emacs
NGNGコンストラクタでリソースID渡してない?
その時点でリソースロードしちゃってるんだと思う。
クラスウィザードに吐かせたクラスはそうなってるはずだから
手で消せばいいかと思う。遅レスごめん。
0226名無しさん@Emacs
NGNG>>225
追加。
CDialogから派生したクラスのコンストラクタで >>211の
ようなことをやるようにして、他のソースの"CDialog"を
作ったクラス名で全部置換すれば動くべ。
0227173
NGNG同じドキュメントテンプレートから生み出した複数Frameの区別って
どこでするものでしょう?
それと複数のフレームは単一のDocオブジェクトを参照すべきなんでしょうか?
それとも一つのフレームに付き1つのオブジェクトってのが自然なのかなあ・・・・
この辺のポリシーがわからないので、設計がめちゃくちゃになってきました・・・
0228デフォルトの名無しさん
NGNG男らしく全部ダイアログですませ。
0229デフォルトの名無しさん
NGNGいや、MDI って発表された時から「糞」だの「吐き気がする」だの
散々叩かれてますが。
0230173
NGNGぐへー。やはりそうですか・・・
とりあえずタブブラウザのMoonBrowzerのようなアプリが目標なんです。
例えばMoon Browzerとかはタブブラウザですが、
タブじゃないですよね。こういうのはMDIから作るのかなと思ってるのですが、
ちがうのですか・・・??
0231デフォルトの名無しさん
NGNG早速、コンストラクでID渡してるところを削除しましたらASSERTでなくなりました。
CAboutDlg::CAboutDlg()// : CDialog(CAboutDlg::IDD); →ここをコメントにしました。
{
HINSTANCE hInst = ::LoadLibrary("JPN.lng");
HRSRC hDlgInit = ::FindResource(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), RT_DIALOG);
HGLOBAL hResource = ::LoadResource(hInst, hDlgInit);
if (hResource != NULL)
{
LPDLGTEMPLATE lpTemplate;
lpTemplate = (LPDLGTEMPLATE)GlobalLock(hResource);
GlobalUnlock(hResource);
InitModalIndirect(lpTemplate);
}else{
//jpn.lngがなかった場合、自前リソースを使用。
}
}
こうすると、ダイアログ呼ぶ方は何も変更しなくていいのでスッキリしますね。
で、ちょっとまだ検証中なんですが、外部リソースDLLがなかった場合自前の
リソースを利用するようににしたいと思ってます。
実は上のコードでも、FindResourceをNULLで呼ぶと自ファイルから検索するみたい
で、うまく機能します。
ただ、コメントにした" : CDialog(CAboutDlg::IDD)"を処理しなくていいのかは
もう少し調べてみます。
乱文失礼しました。
0232デフォルトの名無しさん
NGNGウィンドウパカパカ開くから、
SDIだとデスクトップや他のアプリのウィンドウが見えてしまって混乱する。
0233232
NGNGMDIにすべし、という説を提唱してみるテスト
そうでなければむやみにMDIにすべきではないミタイナー
0234デフォルトの名無しさん
NGNGタブを使用禁止にすることは出来るでしょうか?
シートのOnInitDialog()でGetPage(0)->EnableWindow(FALSE)
としてみたのですが、出来ませんでした。
何かいい方法はないでしょうか??
0235デフォルトの名無しさん
NGNGん?タブじゃない?
あれはどう見てもタブだと思うが。
0236デフォルトの名無しさん
NGNGC++(MFC)で作った実行ファイルの置いてあるディレクトリを取得
(自分のFullPathを取得)するのにはどうすればいいでしょう?
0237デフォルトの名無しさん
NGNGGetModuleFileName()
0238デフォルトの名無しさん
NGNG同意。MDIが駄目かどうかはアプリのタイプによるから一概には言えない。
opera5は MDIだったが、なんか圧迫感があった。
(6になってSDI/MDI/タブが選べるようになったが)
ブラウザみたいに一つのウィンドウに多くの情報を提示するような
アプリだと MDIは向かないのかも。
0239デフォルトの名無しさん
NGNG0240デフォルトの名無しさん
NGNGGetModuleFileName()で実行するとエラーばかり出て、
MSDNを見てもいまいち解決しません。
実行している自分自身のパスを取得するサンプルか何か教えていただけないでしょうか?
0241デフォルトの名無しさん
NGNGhttp://search.acty-net.ne.jp/mfc_search/archive/1998-1/msg01541.html
0242デフォルトの名無しさん
NGNG有難うございます。助かりました!
0243デフォルトの名無しさん
NGNGに追加です。
VBのTabEnabledのようなものがあればいいと思うのですが、
誰か知りませんか?
本当に困っているので、よろしくお願いします。
0244デフォルトの名無しさん
NGNGCString t1;char cs[100];
GetPrivateProfileString("window", "width", "0", cs, 0, spath);
t1.Format("%s", cs);
こう書いたのですが、まともに読み取れません。
解決法を知っておられる方はおられますか?
0245デフォルトの名無しさん
NGNGnSize が0じゃ何も読めないと思うがどうか。
0246デフォルトの名無しさん
NGNG>>243
「最新Windowsプログラミングテクニック ワンポイント・レッスン」
て本の1069ページに出てる。
0247デフォルトの名無しさん
NGNGある文字列があって、その文字列の左からn番目の文字列を取得したいの
ですが、このような関数ってあります?
MSDN探しててもそれっぽい関数ないのですが・・・
0248デフォルトの名無しさん
NGNGn番目からの文字列は、(n+p)
MultiByteCodeSet? 知らんね。
0249デフォルトの名無しさん
NGNGあのように、ダイアログの外をクリックしたら自動的に消えるようにしたいのですが、
どうすればよいか知ってるかたおられますか?
0250デフォルトの名無しさん
NGNG0251デフォルトの名無しさん
NGNGフォーカスが無くなると自分自身を破棄するとか?
0252173
NGNGタブじゃないという言い方は変だったかもしれません、
プロパティとかに表示される耳のような部分がないので
そのように思ったのです、MoonBrowserのようなアプリは
MDIから作るのでしょうかSDIから作るのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています