• ベストアンサー

CColorDialogの拡張について

始めまして。質問させて下さい。 VC++ 2005 MFCで開発しております。 CColorDialogのサブクラスを作成しています。 ダイアログ上にあるコントロールのVisibleを変更させようと思い、 サブクラスのOnInitDialogで CButton *pBtnOK = ( CButton* )GetDlgItem( IDOK ); CButton *pBtnCancel = ( CButton* )GetDlgItem( IDCANCEL ); if( pBtnOK != NULL ){ pBtnOK->ShowWindow( SW_HIDE ); } if( pBtnCancel != NULL ){ pBtnCancel->ShowWindow( SW_HIDE ); } としています。 「色の作成」ボタンのも同様の処理をしたいのですが、 コントロールIDがわからないため実装できません。 IDをご存じの方はいますでしょうか? また、別の方法等ございましたらご教授お願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

 こんにちは。  Includeのフォルダ内辺りに  COLOR.DLG  COLORDLG.H  と言うコモンダイアログリソースが見つかれば、其れがカラーダイアログのリソースです。開いて確認出来ると思います。  COLOR_ADD=712ではないでしょうか。

youdoukou
質問者

お礼

machongola様 ありがとうございます。 COLORDLG.Hにありました。 COLOR_MIXでした。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

色の作成(D) >> ボタンなら COLOR_MIX じゃないでしょうか

youdoukou
質問者

お礼

php504様 ありがとうございます。 COLORDLG.Hにありました。 COLOR_MIXでした。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ウィンドウにボタンを配置するには?

    VC++6.0、WinXPです CMainFrame::CMainFrame() { CButton myButton1; myButton1.Create( _T("Button"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, CRect(10,10,100,100),this, 100); myButton1.ShowWindow(SW_SHOW); myButton1.UpdateData(); } としてますがビルドはできますが実行中にエラーがでます。何がおかしいのでしょうか? よろしくお願いします。

  • MFCタブコントロールのグラデーション描画

    現在、VC++2010・MFC環境でMFCのタブコントロールのウィンドウ部(?)をグラデーション描画にしたいと考えています。 完成予想としては、Excelのメニュー(?)みたいな感じでグラデーションがかかるような感じにしたいのですが、現在、グラデーションの描画は何とか(たぶん無理やり)できましたが、タブを切替たり、ダイアログ自体が非アクティブ/アクティブを繰り返すとちらついてしまいます。 ソースは以下のようになっています。 ----------------------------------------------------------------- void CTabGradDlg::OnTcnSelchangeTab(NMHDR *pNMHDR, LRESULT *pResult) { // TODO: ここにコントロール通知ハンドラー コードを追加します。 int sel = m_xcTab.GetCurSel(); m_edit1.ShowWindow(SW_HIDE); m_edit2.ShowWindow(SW_HIDE); m_button1.ShowWindow(SW_HIDE); m_button2.ShowWindow(SW_HIDE); switch(sel) { case 0: m_edit1.ShowWindow(SW_SHOW); m_button1.ShowWindow(SW_SHOW); break; case 1: m_edit2.ShowWindow(SW_SHOW); m_button2.ShowWindow(SW_SHOW); break; } Invalidate(); *pResult = 0; } void CTabGradDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) { CDialogEx::OnActivate(nState, pWndOther, bMinimized); // TODO: ここにメッセージ ハンドラー コードを追加します。 switch( nState ) { case WA_INACTIVE : // 非アクティブ break; case WA_ACTIVE : // (マウスをクリックする以外の方法) アクティブ case WA_CLICKACTIVE : // (マウス クリック)アクティブ Invalidate(); break; } } ----------------------------------------------------------------- Invalidate();が原因でちらついていることまでは分かっているのですが、 なぜちらつくのか?ということと、対処方法もしくは別の方法はないのか? 別の方法があればどういったことなのか?ということが知りたいです。 初心者(小学生並み)にもわかるように教えていただければ幸いです。 宜しくお願いします。

  • ウィンドウハンドルの取得方法について

    よろしくお願いします。 WIN98 VC++6.0 MFC にて 色々勉強しておりますが、今だにウィンドウハンドルの取得方法が良く分かりません。 SDKのサンプルを見ると、なるほどそうするのか。と思いますが、MFCになると分からなくなります。 たとえば、 ウィザードのデフォルトに従いダイアログベースでのプロジェクトを作成し、ボタン1と2を配置します。 以下のコードでボタン1を非表示にできます。 void CPppDlg::OnButton2() { CWnd* pButton1 = GetDlgItem (IDC_BUTTON1); pButton1->ShowWindow(SW_HIDE); } このコードにおいて、 1.SDKの BOOL ShowWindow( HWND hWnd, // handle to window int nCmdShow // show state of window ); を用いて引数が2個の形式に書きかえることは可能でしょうか? 2.可能であれば、具体的にはどう記述すれば良いのでしょうか?

  • 解像度が変わるとEditコントロールの位置がずれる

    いつも皆様、お世話になっております。 一つ教えてください。 解像度が変わるとエディット・コントロールの位置がずれるのですが、 ずばりクリックした行にエディット・コントロールを張り付かせたいです。 EditCellShow 関数は、セルを↑↓←→で移動した場合 や リストコントロールをスクロールした時などに呼び出されます。 (最後にクリックした行、列は、正しく拾えているものとします。) (そして、workRow、workColumnに代入されます。) 例えば、1280 × 800 ピクセル (Windows Vista 32bit)では、以下のコードで正常に動作します。 1920 × 1080 ピクセル (Windows7 64bit)では、上にずれます。 もし解像度の問題でなければすみません、でも他のXPマシンや Windows7 マシンでも正常に動作しました。 void CFileListCreatorDlg::EditCellShow(int workRow,int workColumn) {   if (m_xvChkEditCellMode == TRUE){     CFileListCreatorDlg::StatusStringSet(_T("ファイル名 や 備考欄 の 編集モードになりました (セルをクリックするか、クリック後 矢印キーで素早く移動、Enterで確定)"),0,FALSE);     //StatusStringSet()関数は、ステータス文字を画面上部に表示し、警告音を鳴らすユーザー関数   }   ::ShowWindow(::GetDlgItem(m_hWnd,IDC_EDIT_Item),SW_HIDE);   ::ShowWindow(::GetDlgItem(m_hWnd,IDC_STATIC_Arrow),SW_HIDE);//追加2011.10.08   ::SetWindowText(::GetDlgItem(m_hWnd,IDC_EDIT_Item),_T(""));   //m_xcListは、IDC_LISTの変数名   m_xcList.SetItemState(workRow, // フォーカス&非選択状態にしたいアイテムのインデックス   !LVIS_FOCUSED | !LVIS_SELECTED, // 状態   LVIS_FOCUSED | LVIS_SELECTED); // マスク   //UpdateWindow(); HWND hWnd1 = ::GetDlgItem (m_hWnd,IDC_LIST); RECT rect;   int nItem;   int nSubItem;   //何回も代入していますが、特に意味はありません、参考サイトのまま ソースコードを使いたかったので、それに合わせました。 nItem = workRow; nSubItem = workColumn;   LastSelectedRow = nItem;   LastSelectedColumn = nSubItem;   ////0:ファイル重複識別ナンバー 1:通し番号 2:フルパス 3:ファイル名 4:おおよそのデータサイズ 5:データサイズ 6:修正日 7:修正時間 8:備考欄 9:書式情報   if((nSubItem == 0 || nSubItem == -1 || nItem == -1) || (nSubItem != 3 && nSubItem != 8)){ //2011.09.22変更     //ファイル名と備考欄のみ編集可能に、他のカラムがクリックされた場合は、ファイル名編集欄に移動     nSubItem = 3;     LastSelectedColumn = nSubItem;   }   CFileListCreatorDlg::m_xcList.EnsureVisible(nItem, FALSE);   CString str = m_xcList.GetItemText(nItem,nSubItem);   ListView_GetSubItemRect(hWnd1,nItem,nSubItem,LVIR_BOUNDS,&rect);   if(nItem != -1)     ::SetWindowPos(::GetDlgItem(m_hWnd,IDC_EDIT_Item),     HWND_TOP,rect.left + (18),rect.top + 4 + ( 16*5+2 ), //追加2011.09.22 //(18)と( 16*5+2 )は、帳尻あわせ //HWND_TOPは、IDC_LISTのTOPを取っているのか? rect.right-rect.left - 3, rect.bottom-rect.top -1,NULL);   ::ShowWindow(::GetDlgItem(m_hWnd,IDC_EDIT_Item),SW_SHOW);   ::SetFocus(::GetDlgItem(m_hWnd,IDC_EDIT_Item));   ::SetWindowText(::GetDlgItem(m_hWnd,IDC_EDIT_Item),str);   ::SetWindowPos(::GetDlgItem(m_hWnd,IDC_STATIC_Arrow),//追加2011.10.08     HWND_TOP,rect.left + (18) -17 ,rect.top + 4 + ( 16*5+2 ), //追加2011.09.22 //(18)と( 16*5+2 )は、帳尻あわせ //HWND_TOPは、IDC_LISTのTOPを取っているのか? 17, 12 ,NULL);   ::ShowWindow(::GetDlgItem(m_hWnd,IDC_STATIC_Arrow),SW_SHOW);//追加2011.10.08 } 参考サイト: http://www.codeproject.com/KB/list/editing_subitems_in_listcontrol.aspx?display=Print (主に、項番10を参考にしました。) 画像を初めて添付しますが、文字が小さいなどの不具合があったら、すみません。 (画像は帳尻あわせをして、正常に動いている時のものです。)

  • 「ファイルを開く」のダイアログ作成

    ファイルを開くのダイアログを作成しています。 CEdit *wdit; FileDialog wdlg(TRUE,NULL,NULL,OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_HIDEREADONLY, "A系ファイル(*.a)|*.a|" "A系ファイル(*.b)|*.b|" "A系ファイル(*.c)|*.c||"); if(wdlg.DoModal()==IDOK){  wdit = (wdit*)GetDlgItem(IDC_EDIT1);  wdit->SetWindowText(wdlg.GetPathName()); } 上のようなプログラムだと、A系ファイルを選択したときに対象となる拡張子が1つになります。 利便性を考えて、A系ファイルを選択すると、*.aと*.bと*.cの3つの拡張子が対象となる様に書き換えたいのですが、どのようにすればよいでしょうか? VC6.0で奮闘しています。 よろしくお願いします。

  • ウインドウの最前面表示

    指定された日時になると、メッセージウインドウを表示するソフトを作成中ですが、そのウインドウのOnInitDialog()でShowWindow(SW_SHOW)をコールしても、その時に起動しているアプリケーションによっては、最前面に表示されません。(エクスプローラやIEの前面には表示されるが、VC++では背面に表示されます。) アプリケーションによっては無理なのでしょうか? (警告ウインドウとしても使用したいので、最前面に表示したいのですが...。) 環境  WindowsXP  Visual C++6.0

  • タスクトレイのアイコンが消えてしまう。

    こんにちは。 今、タスクトレイに常駐するプログラムを作成しています。 プログラム起動するとすぐ、メインウインドウとタスクトレイにアイコンが 表示されます。 メインウインドウ右上の最小化ボタンまたは、終了ボタンを押すと メインウインドウが消えてタスクトレイのアイコンだけが残るように したいと考えています。 最小化ボタンの場合はWM_SIZEをキャッチして、ShowWindow(hwnd, SW_HIDE) で、メインウインドウだけ消え、タスクトレイのアイコンは残ります。 しかし、終了ボタンの場合は、WM_DESTROY をキャッチし、同じくShowWindow(hwnd, SW_HIDE) でメインウインドウを消しているのですが、メインウインドウだけでなく、 アイコンも消えてしまいます。アイコンを消さずに残すようにしたいのですが、 どうしたらよいでしょうか。WM_DESTROYでは、PostQuitMessage(0)はポストして おらず、最後にreturn 0;を返しています。 どうぞよろしくお願いします。 環境 BCC、WindowsXP、C言語、Win32 API

  • CreateProcess関数について

    ■CreateProcess関数で実行フアイル(.exe)を呼ぶプログラムを作成しています。 ■CreateProcess関数はプロセスを作成すると直に呼出側に戻って来るが、起動したプログラムの実行結果ではない。 ■その様な事を踏まえてプログラム下記にコーテイングしました(概要) ■「呼び出し側」も「呼び出される」もCD-ROM内に有ります。 ■問題はCreateProcess関数で呼んでから、実際に画像が表示されるまでに、時間が掛かる事です。、 ■「質 問」「やりたい事」 CreateProcess関数で呼んでから、実行画面が表示される時間の間に 「その旨のなんだかのメッセージを表示したい」 例えば、Webでのダウンロードやインストールの時の様な... この様な事を、実現するのはどの様にしますか、宜しくお願いします。 STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si,sizeof(si)); si.cb=sizeof(si); ZeroMemory(&pi,sizeof(pi)); if(CreateProcess(NULL,(LPTSTR)cmdline,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)){ CloseHandle(pi.hThread); //CD-ROMから直ぐ表示出来ない場合に備えて //この間で表示に時間を要している事をメッセージ出来ないか? ShowWindow(hWnd,SW_MINIMIZE);//タスクトレイに入れる。 WaitForSingleObject(pi.hProcess,INFINITE); CloseHandle(pi.hProcess); ShowWindow(hWnd,SW_RESTORE););//タスクトレイから出す。 }

  • C++でタスクマネージャーを最小化

    C++Win32コンソールアプリケーションを作成しています。 タスクマネージャーを最小化させるプログラムを考えているのですが、上手くできません。 #include<iostream> #include<windows.h> using namespace std; int main() { for (;;) { HWND hwnd = FindWindow("TaskManagerWindow", NULL); if (hwnd != NULL) { cout << "成功" << endl; ShowWindow(hwnd,SW_MINIMIZE); } else cout << "失敗" << endl; Sleep(300); } return 0; } のようにしているのですが上手くできません。 Notepadのようなファイルは最小化できるのですが、タスクマネージャーに限ってできないのです。 どのようにすればよいでしょうか。 又、一時的に見えなくすればいいので終了や透明化等の他の方法でも構いません。 ご教授お願いします。

  • 不思議な現象が起こるプログラムで悩んでいます。

    よろしくお願いします。 不思議な現象が起こるプログラムで悩んでいます。 『猫でもわかる第2版』を参考にして、『メモ帳』を作成しているのですが、コンパイルして作られた メモ帳の動作を理解できません。 詳しい方、アドバイスをお願いします。 1、メニューを付けない『メモ帳』の時は、『直接入力、半角入力、全角入力』が可能、漢字変換も可能 問題点 1、メニューを付けない『メモ帳』の時、『コーディングしていないのに』右クリックでポップアップメニューが表示でき、切り取り、削除、貼り付け、その他が使える。 2,メニュー項目を付けると『直接入力が出来ない』、半角入力、全角入力は可能、但し、Enterキーを押すと、入力した文字が消えてしまう 3、コンパイルには、BCC, VC++の両方でテストしたが、結果は同じ /*ウィンドウプロシージャ*/ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { int id; RECT rc; static HWND hEdit; switch (msg){ case WM_CREATE: hEdit = CreateWindow("EDIT", NULL, WS_CHILD | WS_VISIBLE | ES_WANTRETURN | ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL, 0, 0, 0, 0, hWnd, (HMENU)ID_EDIT, hInst, NULL); strcat(szTitle, "「無題」"); SetWindowText(hWnd, szTitle); break; case WM_SIZE: MoveWindow(hEdit, 0, 0, LOWORD(lp), HIWORD(lp), TRUE); break; SetWindowText(GetParent(hEdit), "メモ帳[無題]"); case WM_SETFOCUS: SetFocus(hEdit); break; /*case WM_COMMAND: switch (LOWORD(wp)){ case IDM_NEW: MyNew(hEdit); break; } break;*/ case WM_CLOSE: id = MyConfirm(hEdit); if(id == IDCANCEL) break; id = MessageBox(hWnd, "終了してもいいですか", "確認", MB_YESNO | MB_ICONQUESTION); if(id == IDYES){ DestroyWindow(hEdit); DestroyWindow(hWnd); } break; case WM_DESTROY: PostQuitMessage(0); break; default: return (DefWindowProc(hWnd, msg, wp, lp)); } return 0; } /*新規作成 int MyNew(HWND hEdit) { int id; id = MyConfirm(hEdit); if(id == IDCANCEL){ return -1; } Edit_SetText(hEdit, ""); SetWindowText(GetParent(hEdit), "メモ帳[無題]"); strcpy(szFile, ""); return 0; }*/ //文書保存の確認 int MyConfirm(HWND hEdit) { int id; if(SendMessage(hEdit, EM_GETMODIFY, 0, 0) == TRUE){ id = MessageBox(hEdit, "文書が更新されています。\n変更を保存しますか?", "メモ帳", MB_YESNOCANCEL | MB_ICONEXCLAMATION); if(id == IDYES){ MySaveAs(hEdit); }else if (id == IDCANCEL){ return IDCANCEL; }else if (id == IDNO){ return IDNO; } } return 0; }