しばといいます。

現在、Win98SE上でVC++6.0 SP5を使って開発をしています。

SDIでエクスプローラ風メニュー(IEではない)を使いたいと思い、
AppWizardのSTEP 5でプロジェクトスタイルをWindowsエクスプローラスタイルにしました。
作成されたスケルトンのLeftViewにWindowsのエクスプローラの左側に出てくる
フォルダメニューを表示したいと思っています。
CListCtrlを使うのだろうとは思うのですが
それからどうすればいいのかが解りません。

どうかご教授お願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

そうそう、これ以上のことを知りたいのであれば、


きちんとしたMFCの参考書を購入した方がいいと
思いますよ。

どうやったって、こういったところではたいした
ことは書けませんから。

ではでは☆
    • good
    • 0

CListCtrlではなくて、もともとCTreeViewになっている


ので、そこで各クラスメンバでGetTreeCtrlを呼び出して
そのCTreeCtrlを使って色々すれば問題はないはず。

ではでは☆
    • good
    • 0
この回答へのお礼

>CListCtrlではなくて、もともとCTreeViewになっている
書き違えてました

回答ありがとうございます

お礼日時:2001/05/01 23:30

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QVC++.net SDIで追加したメニューを灰色から黒にする方法

VC++.net 2003 のSDIでプログラムを作っています。
新たにメニューを追加したのですが、実行しても文字が灰色になっており、選択することができません。

手元にある入門書には、フォームアプリケーションの場合は、新たに追加した「メニューをダブルクリックすると、コードエディタに切り替わり、Clickメソッドの枠組みが自動的に生成される」とあるのですが、私の場合、ダブルクリックしても何も起こりません。ネットで検索すると、VC++ ver.6 の情報ばかりで、VC++.net 2003の場合が、いまいちよくわかりません。

「この本に書いてある」という情報でも構わないのでよろしくお願いします。

Aベストアンサー

確信があるわけではありませんが・・・

アプリケーションを実行してメニューを
ダブルクリックしていませんか?
その場合、何も起こらなくて正解です(^^

きっとお手元の入門書にはリソースエディタの
メニューをダブルクリックすると・・・という
趣旨のことが書かれていると思います。

というわけでリソースエディタでメニューを
表示して、それをダブルクリックしてみてください。

QVC++2003でSDIのMFCアプリ作成中です。

アイコン上にファイルをドロップし、ファイルをオープンする動作を実装し、
正常系は動作確認できました。
しかし、ファイルに読み込み制限などをかけていた場合、こちらのエラー処理に入る前に
Windows内部エラー処理に入ってしまうようで、「○○へのアクセスは拒否されました」と
ダイアログが表示されます。
デバッグで見て云ったところ、ProcessShellCommand(cmdInfo)の内部でエラーが発生し、
強制的におちているようですが、具体的にどこのクラス、メソッドでエラーを受け取って
いるのでしょうか?
オーバーライドしてエラー処理を自分で実装したいと考えています。

Aベストアンサー

ドキュメントクラスのOnOpenDocumentの中で実行する GetFileがNULLを返した場合にそのMesseageBoxを表示しているようです

アプリ側のドキュメントクラスに OnOpenDocumentを作成しておいて

BOOL CXXXDocument::OnOpenDocument( LPCTSTR lpszPathName )
{
  CFileException fe;
  CFile* pFile = NULL;
  pFile = GetFile( lpszPathName, CFile::modeRead, &fe );
  if ( pFile ) {
    // 正常に開けたので CDocumentで開けるようにココでは閉じる
    pFile->Close();
  } else {
    // ここでエラー処理をする
    return FALSE;    
  }
  return CDocument::OnOpenDocument(lpszPathName );
}

といった具合でいいように思います

ドキュメントクラスのOnOpenDocumentの中で実行する GetFileがNULLを返した場合にそのMesseageBoxを表示しているようです

アプリ側のドキュメントクラスに OnOpenDocumentを作成しておいて

BOOL CXXXDocument::OnOpenDocument( LPCTSTR lpszPathName )
{
  CFileException fe;
  CFile* pFile = NULL;
  pFile = GetFile( lpszPathName, CFile::modeRead, &fe );
  if ( pFile ) {
    // 正常に開けたので CDocumentで開けるようにココでは閉じる
    pFile->Close();
  } else {
    //...続きを読む

Q2つのvoid関数でmallocを使うと2step目でセグメントエラーが出る

プログラムのmainを見やすくするためにサブルーチンとしてvoid関数を使っているのですが、その中でmallocでメモリを確保して配列を作ろうとするとエラーが出てしまいます。概略を書くと

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

//voidの宣言
void a(double* ,double*, double,);
void b(double* ,double*, double,);

main(){
double *c,*d,e;
double *f,*g,h;

c=(double *)malloc(sizeof(double)*N) //Nは適当な整数です
d,f,gも同様の処理

色々な作業

while(適当回数繰り返します){
a(c,d,e);
b(f,g,h);

色々な作業
}
}

void a (double* c, double* d, double e){

double **i,*j,;
int k;

i=(double **)malloc(sizeof(double *)*M) //Mは適当な整数です
for(k=0;k<=M;k++){
i[k]=(double *)malloc(sizeof(double)*M) //Mは適当な整数です
}
jも同様にメモリ確保

様々な作業(逆行列の計算など)

}

void bはaとほとんど同じです。
mallocで二次元配列や配列を作っています。勿論同じ文字は使っていません。

以上のようなプログラムでgccは通ります。でも実行するとwhile内での1step目は上手くいくのですが、2step目のb内での始めの(double *)malloc(sizeof(double)*L)(Lは適当な整数です)で、つまりメモリ確保でセグメントエラーが出ます。両者とも片方を削るとエラーは出ません。1step目は何故上手くいくのか、2ステップ目で何故ダメなのかが分かりません。皆様の御教授をお願いします。

プログラムのmainを見やすくするためにサブルーチンとしてvoid関数を使っているのですが、その中でmallocでメモリを確保して配列を作ろうとするとエラーが出てしまいます。概略を書くと

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

//voidの宣言
void a(double* ,double*, double,);
void b(double* ,double*, double,);

main(){
double *c,*d,e;
double *f,*g,h;

c=(double *)malloc(sizeof(double)*N) //Nは適当な整数です
d,f,gも同様の処理

色々な作業

...続きを読む

Aベストアンサー

mallocは実行時にならないと大きさがわからないとか大きなメモリを一時的に確保したいときなどに使います。
#define N 6
のように大きさがあらかじめわかっているならmain( )関数内で
double **crmat;
crmat=(double **)malloc(sizeof(double *)*(N+1));
for(kk=0; kk<N+1; kk++){
crmat[kk]=(double *)malloc(sizeof(double)*(N+1));
}
とする必要は無く
double crmat[ N + 1 ][ N + 1 ];
にすればかなりすっきりしそうです。
関数の引数には今のまま double **crmatとして渡せます。

hakidashi_H( )で
row=(int *)malloc(sizeof(int)*5);
としてますが
for(ipv=1; ipv<=5; ipv++){
//略
row[ipv]=pivot_row;
これはアウトです(row[ 5 ] にはアクセスしたらいけません)
ここも5-6個の配列であればmalloc使わずに
int row[6];
で問題ないでしょう

mallocは実行時にならないと大きさがわからないとか大きなメモリを一時的に確保したいときなどに使います。
#define N 6
のように大きさがあらかじめわかっているならmain( )関数内で
double **crmat;
crmat=(double **)malloc(sizeof(double *)*(N+1));
for(kk=0; kk<N+1; kk++){
crmat[kk]=(double *)malloc(sizeof(double)*(N+1));
}
とする必要は無く
double crmat[ N + 1 ][ N + 1 ];
にすればかなりすっきりしそうです。
関数の引数には今のまま double **crmatとして渡せます。

hakidashi_H(...続きを読む

QVC++でメニューの消し方

VC++V6.0(MFC)で書かれたソースコードのメニューを
消したいんですけどその方法が分かりません。
どうやったら消せるんですか?
リソースエディタで編集できるまでは分かったんですが
消す方法はやっぱり分かりません。

ちなみにソースコードは
http://hirotake.web.infoseek.co.jp/

InverseKinematic.lzh (231KB) (Visual C++ Ver 6.0用)
(解凍したら「ワークスペースを開く」で
InverseKinematic.dswをクリックするだけでビルド準備OKです)

どうかお願いします。

Aベストアンサー

MFCよりATLやSDKを好んでるので、参考程度に

InverseKinematic.cpp のなかの、

CInverseKinematicAppクラス InitInstance関数のなかの

CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,// これは、メニューのIDなので NULLに変更するだけ。

QVC++2008のメニューバーがdisable状態

まず新規ダイアログを作成しました。
そして既存ダイアログのメニューバーに項目を増やし、
増やした項目を選択すると、新規ダイアログがポップアップするような処理をしようとしています。

しかし、メニューバーの項目はdisableの状態となっており
選択する事ができません。

イベントハンドラも追加し
「OnScreenDivision」と「OnUpdateScreenDivision」を作成し、
「OnUpdateScreenDivision」の中には[pCmdUI->Enable(TRUE);]という文を書きました。
しかしデバッグし、メニューバーを選択しても
「OnUpdateScreenDivision」の中を通る事はありません。

どのようにしたら、メニューバー選択時に「OnUpdateScreenDivision」を通る事が出来るでしょうか?
ご協力頂けたら幸いです。

Aベストアンサー

 こんばんは。

 ダイアログ上のメニューは、ON_UPDATE_COMMAND_UIハンドラが作動しないと言う問題を抱えている様です。
 WM_INITMENUPOPUPのメッセージハンドラをオーバーライドして、以下参考URLからOnInitMenuPopup()ハンドラのソースコードを御拝借しましょう。其のままコピーアンドペーストでOKです。 
 http://d.hatena.ne.jp/f_YmdV79/20090331/p1

 此れで当初の目的を果たせる筈です(一応「Windows XP sp3」上の「VisualStudio2008 sp1」で動作確認しています)。


人気Q&Aランキング

おすすめ情報