■ MFC相談室 MFC12.dll■
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG前スレ
■ VisualC++(MFC限定)相談室 MFC10.dll■
http://pc5.2ch.net/test/read.cgi/tech/1088084875/
関連リンクは >>2-10 の辺り。
0153デフォルトの名無しさん
NGNGおまえら邪魔。
0154146
NGNG0155デフォルトの名無しさん
NGNGShowWindow(SW_HIDE);
0157デフォルトの名無しさん
NGNG0158デフォルトの名無しさん
NGNGなんでいちいちお前のために試さなきゃいけないんだ。
また思いつきでレスしてやるけど、
CFrameWnd::RecalcLayout()を試せ。
0160デフォルトの名無しさん
NGNGあなたはこちらのスレの方がふさわしいですね。
http://pc5.2ch.net/test/read.cgi/tech/1097880265/
0161デフォルトの名無しさん
NGNGとっちにそっちでも暴れてますよ
0162デフォルトの名無しさん
NGNG0163デフォルトの名無しさん
NGNG表示/非表示きりかえできるぞ
0164デフォルトの名無しさん
NGNGこちらに投稿させて頂きました。スレ違いだったらすいません。
開発環境:Windows2000 SP4 + eVc 3.0 + HPC-2000 SDK
端末:X86CPU互換 WindowsCE 3.0
ある文字列(SendStr)を、今現在開いているブラウザ(Internet Explorer固定)で
フォーカスの当たっているインプットボックスへ挿入する機能を実現しようとしています。
以下のようなコードを書きました(一部)。
BOOL CDlg::SendBrowser(CString SendStr)
{
CWnd* BrowseWnd;
int i;
if(SendStr.IsEmpty())
return FALSE;
BrowseWnd = FindWindow(NULL, TEXT("Yahoo! JAPAN - Microsoft Internet Explorer"));
if(BrowseWnd == NULL)
{
return FALSE;
}
BrowseWnd->SetForegroundWindow();
for(i = 0; i < SendStr.GetLength(); i++)
{
SendKey(BrowseWnd, SendStr.GetAt(i));
}
return TRUE;
}
0165デフォルトの名無しさん
NGNG{
int vk;
vk = GetVirtualKeyCode(CharCode);
ActWnd->SendMessage(WM_KEYDOWN, vk, (long)m_Scan[0]);
ActWnd->SendMessage(WM_CHAR, CharCode, (long)m_Scan[0]);
ActWnd->SendMessage(WM_KEYUP, vk, (long)m_Scan[1]);
return 0;
}
int CDlg::GetVirtualKeyCode(TCHAR x)
{
if(x >= 'a' && x <= 'z')
x -= ('a' - 'A');
return((int)x);
}
正しく実行されれば、SendStrの内容の文字列が、
Yahoo!JAPANトップページの検索テキストボックスに挿入される筈です。
実行すると、CDlg::SendBrowserからCDlg::SendKey、CDlg::GetVirtualKeyCodeを
それぞれトレースするのですが、肝心のフォーカスが当たっているインプットボックスに
文字列がインサートされません。
WM_KEYDOWNとWM_CHAR、WM_KEYUPにより擬似的にそのキーを入力するように
しているのですが…。
現在フォーカスの当たっている部分の指定方法が違うのでしょうか?
0166デフォルトの名無しさん
NGNG0167デフォルトの名無しさん
NGNG知ることができますか?
0168165
NGNGBOOL CDlg::SendBrowser(CString SendStr)
{
CWnd* BrowseWnd;
int i;
if(SendStr.IsEmpty())
return FALSE;
BrowseWnd = FindWindow(NULL, TEXT("Yahoo! JAPAN - Microsoft Internet Explorer"));
if(BrowseWnd == NULL){
return FALSE;
}
BrowseWnd->SetForegroundWindow();
INPUT srINP[3];
srINP[0].type = INPUT_KEYBOARD;
srINP[0].ki.wVk = '0';
srINP[0].ki.dwFlags = 0;
srINP[1].type = INPUT_KEYBOARD;
srINP[1].ki.wVk = '1';
srINP[1].ki.dwFlags = 0;
srINP[2].type = INPUT_KEYBOARD;
srINP[2].ki.wVk = '2';
srINP[2].ki.dwFlags = 0;
for(i = 0; i < 3; i++){
SendInput(3, &srINP[i], sizeof(srINP));
}
return TRUE;
}
上のように書いてみましたが、SendInputでも送信されないようです。
クリップボードか何かを使い、インプットボックスに文字列の値が
一括して挿入できれば最良なのですが…。
0169デフォルトの名無しさん
NGNGCREATE_SUSPENDEDでAfxBeginThread
CWinThread::m_bAutoDeleteをFALSEに
CWinThread::m_hThreadがシグナル状態になるまでWaitForSingleObjectで待つ
スレッドオブジェクトをdeleteする
0170デフォルトの名無しさん
NGNG謝謝
0171165
NGNGSendInputを利用して書き換えました。
INPUT srINP[16];
for(i = 0; i < 16; i++){
srINP[i].type = INPUT_KEYBOARD;
srINP[i].ki.wVk = WORD(SendStr.GetAt(i));
srINP[i].ki.dwFlags = 0;
srINP[i].ki.time = 0;
SendInput(1, &srINP[i], sizeof(srINP));
}
このようにして、CString型のSendStrに格納された文字列を
一文字ずつSendInputにて出力するように記述したところ、成功しました。
…成功したのですが、1回目と2回目ではなぜか値が異なります。
SendStrの値
1254002369000541
一回目
1254002369000541 (問題なし)
二回目
1254023690541 (0が2個以上続くと、2個目以降が表示されない)
WORD()の型変換をchar()にしたり、外してみたりしましたが、改善されませんでした。
1回目に正常な出力が行われているので、何が原因になっているのか見当がつきません。
どなたか気付いた点がございましたら、ご教授下さい。
0172165
NGNGINPUT srINP[16];
for(i = 0; i < 16; i++){
//キーを押す
srINP[i].type = INPUT_KEYBOARD;
srINP[i].ki.wVk = WORD(SendStr.GetAt(i));
srINP[i].ki.dwFlags = 0;
srINP[i].ki.time = 0;
SendInput(1, &srINP[i], sizeof(srINP));
//キーを離す
srINP[i].ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &srINP[i], sizeof(srINP));
}
単純に離すのを忘れていただけのようでした。
SendInputの情報がWebに殆ど載ってない…。
0173デフォルトの名無しさん
NGNG水平スライダーコントロールの値がうまく取得できないんです。
VC++6.0でMFCでやってんすけどググって調べたとおり
OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
から
int iPos = pScrollBar->GetScrollPos();
で値取得して
switch(nSBCode) {
で条件分岐してるんだけど
case SB_PAGELEFT:
case SB_PAGERIGHT:
のとき、つまりスライダーのつまみをドラッグせずにつまみの近辺をクリック
したときにiPosに入ってくる値が無茶苦茶なんですよ。他の条件の時は
いいみたいなんですけど。
ちなみに同じことをスクロールバーコントロールでやると思ったとおりの
動きになります。
誰か教えて下さい。おながいします。
0174デフォルトの名無しさん
NGNGCScrollBar*はCSliderCtrl*にキャストしないとダメでは?
CSliderCtrl* pSliderCtrl = (CSliderCtrl*)pScrollBar;
int iPos = pSliderCtrl->GetPos();
あと、SB_**ってのはTB_** (同じ値がdefineされてるけど)
0175デフォルトの名無しさん
NGNG0176デフォルトの名無しさん
NGNG以下スルーでよろぴく
0177デフォルトの名無しさん
NGNGたくさんのところに助けを求めたほうが
解決が早いことに疑問を挟む余地はないじゃん
おまいらばか?
0178デフォルトの名無しさん
NGNG0179デフォルトの名無しさん
NGNG調べるべき範囲は非現実的だし、途中でやめて帰ってきた報告が誰の役に立つのかも疑問だ
結局、自分の個人的な好みでじたばた喚いてるがきんちょそのまんまやん
腐ってもム板の住人が恥を知れやまったく
0180デフォルトの名無しさん
NGNG0181デフォルトの名無しさん
NGNGスルーしとけばいいだろ。
いちいち報告してる奴の方がウザイ。
0182デフォルトの名無しさん
NGNGだから、それはオマエ個人のブックマークだろうがよwww
0183デフォルトの名無しさん
NGNGだから「こいつはマルチ(つまり関わるとDQNレスが返ってくる)なのでスルーしろ」と各スレの住人に報告されます。
0184デフォルトの名無しさん
NGNGマルチうさい
0185デフォルトの名無しさん
NGNG禿藁
0186デフォルトの名無しさん
NGNG0187デフォルトの名無しさん
NGNG0188デフォルトの名無しさん
NGNG逆切れと言うからには、自分が正だという前提があるらしいな。
誰がどこで何を聞こうが、それは個人の主権だぞ。
仮にあんたが科学的な統計調査を行っていてそこから得た相関係数に基づいて発言していても、
173という個人がこのあと無礼を働くと決めてかかるのはステレオタイプであり、
人格に対するそれを行う者こそ無礼者のレッテルを免れない。
と、ずいぶん買いかぶってやったが
おおかた某コミュニティの流行に乗って喜んでるだけの軽薄野郎だろw
0189デフォルトの名無しさん
NGNG0190デフォルトの名無しさん
NGNG2行目は読んだか?
あと俺は173じゃないぜ
0191デフォルトの名無しさん
NGNG0192デフォルトの名無しさん
NGNG・・・もともと定型句のみが骨子でハリボテが吹っ飛んだだけだが・・・
0193マイク ◆yrBrqfF1Ew
NGNG0194デフォルトの名無しさん
NGNG0195デフォルトの名無しさん
NGNG0196デフォルトの名無しさん
NGNG0.1違う
0197デフォルトの名無しさん
NGNGどうすればいいの?
クラシックだとOnCtlColor()でCTLCOLOR_STATICの時、色を変えたら変わったんだけど..
ラジオボタンの絵の部分はスタイルに連動させたいんで、オーナードローは使えないし。
0198デフォルトの名無しさん
NGNGラジオボタンの文字を使わず、そこにStaticTextを貼り付ける。
イベント処理をどこまで真面目にやるかはお好みで。
0199デフォルトの名無しさん
NGNGプロジェクトのアプリケーションウィザードで
MDI、基本クラスをCFormViewクラスにしてFormViewダイアログに
ボタンを配置して、OwnerDrawをtrueにして
CAboutDialogにプライベートメンバを追加して、
オーバーライドしたOnInitDialogで
VERIFY(m_editRec.AutoLoad(IDC_REC, this));
としたのですが、FormViewである子ウインドウに
ボタンが描写されません。
どうしたらようでしょうか?
0200デフォルトの名無しさん
NGNGオーナードローなんだから、自分で描画処理を記述する必要があるんでしょ。
0201デフォルトの名無しさん
NGNG0202デフォルトの名無しさん
NGNGオーナードローではなくて、CBitmapButtonでした。
0203デフォルトの名無しさん
NGNG0204デフォルトの名無しさん
NGNGを利用してパケットを自作するプログラムをMFCで作りたいのですが、
このCBuildPacketクラスを利用するためにはどのように設定すればいいでしょうか?
コンパイルがうまくできなくて困っています。
0205204
NGNGhttp://www.codeguru.com/dbfiles/get_file/CBuildPacket.zip?id=6861&lbl=CBUILDPACKET_ZIP&ds=20040331
0206デフォルトの名無しさん
NGNG0207デフォルトの名無しさん
NGNGだから何?
0208デフォルトの名無しさん
NGNGどうしたらよいでしょうか?
0209デフォルトの名無しさん
NGNGOnDestroy()をオーバーライド
0210デフォルトの名無しさん
NGNG0211デフォルトの名無しさん
NGNG気のせいです
0212デフォルトの名無しさん
NGNGCChildFrmのデクストラクタで解放したのでいいのでしょうか?
0213デフォルトの名無しさん
NGNGCWndの関数のようですが、
MDIの子ウインドウなのでCMDIChildWndかCFrameWndに関係した関数だと思うのですが。
どうでしょうか?
0214デフォルトの名無しさん
NGNGMFCの継承図をよく見ましょう。
つーか、これだけヒントがあればMSDNでも解説サイトでも見つかるだろうに。
0215デフォルトの名無しさん
NGNGプロパティウインドウからでないとオーバーライドできないと思い込んでました。
アドバイスありがとうございます。
CMDIChildWndもCFrameWndもCWndから派生しているということですね。
0216デフォルトの名無しさん
NGNGどうすれば良いのでしょうか?
0217デフォルトの名無しさん
NGNGメッセージループじゃなくて?
0218デフォルトの名無しさん
NGNGコンソールか? afx.h
0219デフォルトの名無しさん
NGNG1 プログレスバーあり
2 途中キャンセル可能
3 その間アニメーションが動く
を実現しようとしてます
12まではどうにかできたんですが、3のやり方がいまいちわかりません
参考になるサイト等を教えてもらえませんか
ちなみに1,2は進捗表示用のダイアログを作って、
時間のかかる処理を別スレッドで起動、
スレッドから進捗ダイアログに進捗状況を送るようにしています
こういうやり方でいいんですかね
0220デフォルトの名無しさん
NGNG再生しているだけじゃないのか?そういうことではなくて?
0221デフォルトの名無しさん
NGNGCScrollViewから派生させたCGLChartViewをメインに使ってるのですが
やっぱり、CFormViewから派生させなきゃいけないの?
0222デフォルトの名無しさん
NGNG0: void CChildView::OnPaint()
1: {
2: CPaintDC dc(this); // 描画のデバイス コンテキスト
3:
4: // TODO : ここにメッセージ ハンドラ コードを追加します。
5:
6: // 夜空を表示する
7: CBrush NightBrush;
8: CBrush *pOldBrush;
9: NightBrush.CreateSolidBrush(RGB(0, 0, 128));
10: pOldBrush = dc.SelectObject(&NightBrush);
11: dc.Rectangle(0, 0, 400, 400);
12: dc.SelectObject(pOldBrush);
13: NightBrush.DeleteObject();
14: }
というコードが載っていて、解説によるとNightBrushオブジェクトを作成し、紺色のブラシとして初期化し
10行目でNightBrushをデバイス・コンテキストの「現在のブラシ」として選択してpOldBrushに以前のブラシの
ポインタを保存して、11行目で紺色を塗り、12行目で以前のブラシに戻す。とあるのですが10行目のようにすると
紺色になってしまった状態をpOldBrushに代入してしまうのではないのでしょうか?
0223デフォルトの名無しさん
NGNG0224デフォルトの名無しさん
NGNGそういう仕様になってるから大丈夫。
喩えて言えばこんなコード。
int setValue(int newValue)
{
int oldValue = getSystemValue();
setSystemValue(newValue);
return oldValue;
}
0225デフォルトの名無しさん
NGNG本来はこんな流れ
紺.CreateSolidBrush();
白 = dc.SelectObject(紺);
紺 = dc.SelectObject(白);
紺.DeleteObject();
紺 = を省略しているから
この流れが見えにくくなっている
入門書にあるまじき怠慢なコード
0226デフォルトの名無しさん
NGNGカード [] deck = new カード("全部"); // 配列の中にカードを全部生成
for (int n = 0;n < (deck.length - 1);m += 1) {
m = n 以上 deck.length 未満の乱数;
deck[m] と deck[n] を swap; // m == n の場合も気にせず実行。
}
※ deck を class として定義して、
swap を private なメソッド化としておいて、
shaffle を呼ぶようにすると綺麗になるかも。
693 名前:M.B. :04/11/06 09:53:09
【雑談】JavaっぽいけどJVMで走らず【ぬるぽ】
……狙いすぎたか。orz
0227デフォルトの名無しさん
NGNGそんなすっとこどっこいなコードの方が問題だろ。
0228デフォルトの名無しさん
NGNG0229デフォルトの名無しさん
NGNG0230デフォルトの名無しさん
NGNG0231222
NGNGふむふむ、別にきにしなくていいんですね。ありがとうございました
0232デフォルトの名無しさん
NGNGよっぽど悔しかったんだね (プププ
まあせいぜいマルチ叩きにがんばれや
1人も逃すなよ、どうやって検出するのかは謎だがw
0233デフォルトの名無しさん
NGNGそのようなコントロールをしりませんか?
0234デフォルトの名無しさん
NGNG無理矢理やるとすればCListCtrlでグリッドラインを表示するとか
波形表示とか言ってる時点で自分で描くしかないビューのような気がする
0235デフォルトの名無しさん
NGNG少しきついかもしれません。
よく画像編集ソフトや波形編集そふとで画面上方にルーラーがついているのを
見るのですが、あれはActiveXコントロールなのですか?
0236デフォルトの名無しさん
NGNG0237デフォルトの名無しさん
NGNG問題は描いた画面を保存(jpg,tif,bmpなど)したいのですが、、
方法をご存知の方、お教えくださいm(__)m
また複数描いて動画(aviなど)にもしたいのです。
環境はVC.net2003です
0238デフォルトの名無しさん
NGNG0239デフォルトの名無しさん
NGNG0240デフォルトの名無しさん
NGNG0241デフォルトの名無しさん
NGNG0242デフォルトの名無しさん
NGNG何か設定が必要なのでしょうか?
そのままではクリックしてもOnNotifyがコールされないのですが、
どなたか教えてください
0243デフォルトの名無しさん
NGNGListCtrlをクラスにして、LVN_CLUMNCLICKメッセージからイベント関数を作る。
0244本田
NGNGClasses to read and write BMP, JPEG and JPEG 2000
By Tony Lin
http://www.cis.pku.edu.cn/teacher/vision/lintong/webpages/The%20Code%20Project%20-%20Classes%20to%20read%20and%20write%20BMP,%20JPEG%20and%20JPEG%202000%20-%20Bitmaps%20&%20Palettes.htm
0245デフォルトの名無しさん
NGNG0246本田
NGNG>>245
>MFCでCImage使えなかったっけ。
使えるみたい。
CImage クラス
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/vcrefCImage.asp
0247デフォルトの名無しさん
NGNG0248本田
NGNGGDI+は必須では無いみたい。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vccore/html/vcconCImageLimitationsWithEarlierOperatingSystems.asp
0249デフォルトの名無しさん
NGNGOnPaint()でBitBltするためにCPaintDCを使ってるんですが、
こやつはコンストラクタでBeginPaintを呼び出し無効領域を
クリップしてしまいます。
無効領域の有無によらず常に全領域をクリップするにはどう
すればいいでしょうか?
ちなみに、CDC::IntersectClipRectではダメでした。
0250デフォルトの名無しさん
NGNGCClientDC
0251249
NGNG�d
でも、OnPaint内だとCClientDC, CWindowDCはダメなんですよ。
(WM_PAINTが再発行されてループする感じ)
どうも、this->GetDC()したらダメみたい。
ちなみに環境は
W2K+VC6で、モードレスダイアログです。
0252デフォルトの名無しさん
NGNGCPaintDCはそのままで、追加でCClientDCした?
CPaintDC(BeginPaint, EndPaint)が無効領域をクリアしてるから
消したら駄目よ。
■ このスレッドは過去ログ倉庫に格納されています