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

このエントリーをはてなブックマークに追加
894865:02/02/15 00:06
アプリケーションのタイトルバーの文字
の替え方について質問したものです。
CWnd::Createの第二引数のlpszWindowNameに名前を指定したらいいのだと
思っているのですが、
スケルトンから作った直後の単純なSDIアプリケーションで、
いろいろやってみましたがどれもダメでした。

具体的には、

CMainFrame::OnCreateで
lpCreateStruct->lpszName = "アプリの名前";//追加
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;

Create関数をオーバーライドして
BOOL CMainFrame::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
{
// TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください
return CWnd::Create(lpszClassName,"アプリの名前", dwStyle, rect, pParentWnd, nID, pContext);
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
cs.lpszName = "アプリの名前";//追加
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;


>>894
AfxGetMainWnd()->SetWindowText(_T("アプリの名前"));
896デフォルトの名無しさん:02/02/15 17:46
メインフレームウィンドウの形を知るために、
   CRect rct:
   HWND hd;
   hd = AfxGetApp()->m_pMainWnd->m_hWnd;
   ::GetWindowRect(hd,rct);
を実行しましたが、rct.rightで得られる値が、
画面解像度の値と違うのはなぜでしょうか?
スクリーン座標系の値と画面解像度のサイズとは
違うのですか?
もし一致させるとしたらどうしたらよいのでしょうか?
 初心者です。
>896
いちいちウィンドウハンドルをとらなくても m_pMainWnd->GetWindowRect で十分。
というのは置いといて、画面解像度の値とは何のこと?
普通、ウィンドウを画面の右端にぴったりくっつけない限り
rct.right == GetSystemMetrics(SM_CXSCREEN) とはならないと思うが。
898デフォルトの名無しさん:02/02/15 18:05
 896です
897さん有り難うございます。
 画面解像度とはディスプレーの解像度の意味で書きました。
モニターの解像度は人によって異なるので、それに対応する
プログラムを書きたいのですが...。
899デフォルトの名無しさん:02/02/15 18:07
 896です
897さん有り難うございます。
画面解像度とはモニターに解像度のつもりで書きました。
人によって解像度が異なるので、それらに対応したプロ
グラムを書きたいのです...。
>898
?? 目的は何だ?
画面の大きさが知りたい → GetSystemMetrics もしくは GetMonitorInfo
メインウィンドウを画面と同じサイズにしたい → 最大化する、MoveWindow、
PreCreateWindowをオーバーライドしていじる のいずれか。
右端にぴったりくっつけるなら最大化させたほうが楽だし、
ウィンドウを解像度に合わせるならGetSystemMetricsで取った値を
SetWindowPosしたり、、、

902デフォルトの名無しさん:02/02/15 18:30
898さん
 多謝
897=900さんと思いますが、897で解決しました。
もーVC++って関数ありすぎです。
感謝、感謝
お馬鹿な初心者でした。
903デフォルトの名無しさん:02/02/16 21:10
リストビュー(CListView)で、アイテムのチェックマークをつけたときに
そのアイテムのインデックスを取得したいのですが、どうすればよいのでしょうか?
904デフォルトの名無しさん:02/02/17 00:53
>>903
チェックしたときにHitItem()やってもだめだったっけ
多しか俺もそれで悩んだような気がする・・・
チェックされたとき引数にインデックスどうして渡すようにしてないんでしょうね、MFC(ワラ
905デフォルトの名無しさん:02/02/17 02:28
質問です。
CLongbinaryクラスの値もCStringと同じように先頭から何バイト削除とか
できるのでしょうか??
できるのならどのような方法でしょうか?
どなたかわかる方よろしくおねがいします。
906デフォルトの名無しさん:02/02/17 13:00
タブブラウザみたいに、
タブによってビューの
内容を切り替えるのってどうしたらいいんでしょう?
ビューを複数用意して切り替えるのかな?
それともドキュメントを複数用意するんでしょうか。

でもタブブラウザみたいなものならビューは統一だから一つで良いとして、
ドキュメントも一つにしてドキュメントの中の読み込むデータだけ替えるべきなんでしょうか?

あれはMDIの応用です。
ATLってどういうときに使う状況
になるのですか?
MFCで嫌なときにつかえばよろしいかと。
910デフォルトの名無しさん:02/02/17 17:04
LVS_EX_CHECKBOXESスタイルのリストビューに、初めからチェックを入れて
表示しようと思って以下のようなコードを書いたのですが、チェックが入ってくれません。
どうすれば初めからチェックが入った状態で表示できるでしょうか?
LVITEM item;
item.mask = LVIF_IMAGE | LVIF_TEXT | LVIF_PARAM | LVIF_STATE;
item.iItem = nIndex;
item.iSubItem = 0;
item.state = INDEXTOSTATEIMAGEMASK(2);
item.stateMask = LVIS_STATEIMAGEMASK;
item.pszText = LPSTR_TEXTCALLBACK;
item.iImage = I_IMAGECALLBACK;
item.lParam = (LPARAM)pItem;
GetListCtrl().InsertItem(&item);
911デフォルトの名無しさん:02/02/17 20:09
リストビューを使用したプログラムを作っています。
しまいたいデータの構造体へのポインタをpItemに入れ

LV_ITEM lvi;
lvi.mask = LVIF_TEXT;
lvi.iItem = i;
lvi.iSubItem = 0;
lvi.lParam = (LPARAM)pItem;
lvi.pszText = LPSTR_TEXTCALLBACK;
if (GetListCtrl().InsertItem(&lvi) == -1)return FALSE;

LPSTR_TEXTCALLBACKを使用して

void MyListView::OnGetdispinfo(NMHDR* pNMHDR, LRESULT* pResult) {
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
を呼び出しています。

すると本来個々のpDispInfo->item.lParamにはしまいたいデータの構造体が
入っているはずだと思うのですが、null値になってしまっています。
どのような原因が考えられるでしょうか?

>>911
そのpItemはどこにあるのかな?newで作ってる?
913デフォルトの名無しさん:02/02/17 22:07
>912
その直上でnewで作っています。
ドキュメントにデータを保存しておいてドキュメントへのポインタ
pDoc->***でデータを出してきてそこにしまってからLV_ITEM構造体を呼んでいます。
参考文献は「MFCによるWINDOWS プログラミング改訂新版 MicrosoftPress」
です。
struct member_st *pItem;
try {
pItem = new struct member_st;
}
catch (CMemoryException* e){
e->Delete();
return FALSE;
}
pItem->name = pDoc->name;
pItem->date = pDoc->date;
LV_ITEM lvi;

>>911
LV_ITEMをゼロクリアするか、すべてのメンバに適切な値を入れてる?
915913:02/02/17 23:42
自己レスです。
いろいろサンプルソースコードとにらめっこして
考えているのですが結局どこがいけないのかわからないです。
これはCSplitterWndを使用してるのでその関係なんでしょうか・・・・。
メッセージからOnGetDispInfo関数を呼び出すときに
メッセージがどこか回り道してその間にpNMHDRの中身が失われてるとか・・・・・
916913:02/02/17 23:54
知恵熱出るまで悩んで答えがわかりました。
Llvi.mask = LVIF_TEXT|LVIF_PARAM;
のLVIF_PARAMをいれないとlParamが有効にならないんですね・・
うーん。すっきりしたーーー
でもこのmaskって何の意味があるんだろう・・
917デフォルトの名無しさん:02/02/18 00:03
AppWizardで ファイルの拡張子 を空白(初期状態)のままスケルトンを作成したプロジェクトに
拡張子だのファイルタイプだの追加するにはどうすればいいのでしょう?(;´Д`)
>>917
StringTableリソースのIDR_MAINFRAMEを編集すればいい。
書式は適当に検索して探して。
919 :02/02/18 01:18
>>916
(MFCの)バージョンによってメンバが増えることがあるから、
maskで明示的に「このメンバに入れた値を使え」と指示されたものだけ
使うようにできているのだ。
920デフォルトの名無しさん:02/02/18 01:19
>>918
おお、出来た。
ありがとう。助かりましたヽ(´Д`)ノ (Д`ノ) ヽ(   )ノ (ヽ´Д)。
921910:02/02/18 01:36
>>910
誰か・・・手がかりはないか・・・
922デフォルトの名無しさん:02/02/18 03:33
>>921
対症療法しか知らんが、
GetListCtrl().InsertItem(&item); の後で
GetListCtrl().SetCheck(nIndex); すればきっとチェックされるだろう。
>>922
一応それでやってたんだけど、なんかもっと綺麗にできないかなと思って。
 独自のメッセージの処理の仕方がわかりません。
 具体的には、リストビューの上にエディットボックスをCreateして、そのエディッ
トボックスがフォーカスを失ったらそれをリストコントロールにメッセージを送って
処理をしたいんです。エディットボックスの方でOnKillFocusでメッセージ送信させ
てる(つもり)なのですが、PreTranslateMessageとかで受信するんでしょうか?
なにかほかに準備が要るっぽいんですが、どうしたらいいのでしょう??
 レベルの低いしつもんでスマソ
925デフォルトの名無しさん:02/02/18 11:14
CEditCtrlでEnterを押した時に何かさせたいんだけど、どーすれう゛ぁ・・・。
>>925
キー操作Msg受け取るハンドラなかったけ?
927デフォルトの名無しさん:02/02/18 12:42
コンボボックスの候補表示したときに(右の逆三角マークを押す)
候補が1項目分しか表示されないんだけど
これを5項目表示とかにするにはどうするのですか?
928デフォルトの名無しさん:02/02/18 12:51
>>926
サブクラス化すればそこらへんどーとでもなりますけど配置めんどいんで('_`)。

>>927
候補はちゃんと複数登録してる? ダイアログエディタで配置するなら、
各項目を入力した後にctrl+Enterして、データを複数行にしないと駄目だYO!
もし「びろ〜ん」のサイズが絶対的に足りないと言う理由なら、同様に配置画面で
▽ をクリックすると、びろ〜ん時サイズ編集モードになるから。
適当に下方向に伸ばしてみるが吉。

コードで構築してるなら対処法が全然変わってくるから、又質問してみて〜。
929927:02/02/18 14:30
>>928
動的に(コンボボックスに)項目追加しております。
(CComboBox::AddString)
930デフォルトの名無しさん:02/02/18 18:33
CFormViewの派生クラスにRichEditコントロールを貼り付けると、コントロール内で
右クリックしたというメッセージNM_RCLICKのハンドラを追加できるのですが、なぜか
右クリックしてもそこへハンドリングされません。どんな原因が考えられますか?
>>929
>>928も書いてるけど、リソースエディタでコンボボックスの▼を
クリックするとサイズを広げられる。

>>930
RichEditのバージョンだったかが原因だったような・・・
RichEditの派生クラスを作ってWM_RBUTTON〜を処理した方が早いかも
932929:02/02/19 00:26
>>928,931
失礼しました。
リソースエディタ上でやるのでしたか。
たしかにできました。ありがとうございました。

じゃついでに、
プログラム内であのサイズって変更できないのですか?
>>932
Createの第二引数で。
934932:02/02/19 00:49
>>933
つまり一回きり、もしくはcreateしなおしって事ですか?
>>934
SetWindowPos。
これくらい自分で試してみようよ。
9361:02/02/19 03:41
そろそろなんで新スレ作りました。

■ VisualC++(MFC限定)相談室 3■
http://pc.2ch.net/test/read.cgi/tech/1014057520/
937930:02/02/19 09:09
>>931
ありがとうございます。
バージョンですか・・・どうしようもないっぽいですねぇ。
その方向でやってみます。
938デフォルトの名無しさん:02/03/14 15:32
ファイルのドラッグ&ドロップを受け取るMFC ActiveX Controlを作成しようとしています。
通常のウインドウと同じ方式、(DragAcceptFiles()して、OnDropFiles())(COleDropTargetを持たせる方法)
でうまく動かないのですが、何か特別な手続き方法が必要なのですか?
939デフォルトの名無しさん:02/04/24 23:21
const_castってアセンブラではどのようになってるのでしょうか?
アセンブラではというより、内部ではどのようにconst属性をはずしてるのでしょうか?
また、これは絶対にはずせるものではないですよね?はずせるものと
そうでないものの違いは?
単にコンパイラのシンボルテーブルのフラグを制御するだけだろ。
殆どのコンパイラは、文法上の書きこみチェックをするだけ。
941デフォルトの名無しさん:02/04/25 10:31
検索サイトとかのURLエンコード(日本語が%21%5A%C2とかになるやつ)を
楽にやる方法ありませんか?
あのーageないでもらえますか。

■ VisualC++(MFC限定)相談室 3■
http://pc.2ch.net/test/read.cgi/tech/1014057520/
ごめ