Windowsのシニアエンジニアになるには、MFCコントロール(フルバージョン)を知っている必要があります

MFC制御:

Windows標準コントロール:

Windowsの標準コントロールはWindowsオペレーティングシステムによって提供され、いくつかの新しいコントロールはWindows95でも提供されます。これらのコントロールオブジェクトはすべてプログラム可能です。VisualC++が提供するダイアログエディターを使用して、それらをダイアログに追加できます。Microsoft Foundation Class Library(MFC)は、これらのコントロールをカプセル化するクラスを提供します。これらは表6.1にリストされています。

MFCでは、クラスCWndはすべてのウィンドウクラスの基本クラスであり、当然、コントロールクラスの基本クラスでもあります。

Windows標準コントロールは、次の環境で提供されます。

Windows 95

Windows NT3.51以降のバージョン

win32s 1.3

注:Visual C ++ 4.2以降のバージョンは、Win32をサポートしなくなりました。

MFCの基本的な共通コントロールの基本的な使用法

VC ++制御ツールボックス:

ボタン

ユーザーコマンドを受信するために使用されます。アプリケーションがユーザーコマンドを受信した後、通常、バックグラウンド作業を実行する必要があります。ボタンは、クリックまたはダブルクリックアクションに応答できます。ボタンは、マウスアクションを受信すると、対応する制御通知を親ウィンドウに送信します。ユーザーは、これらの制御通知に対してメッセージマッピングを実行して、対応する処理を実行できます。

ダイアログボックスでは、ボタンのプロパティで[デフォルト]オプションを選択している限り、デフォルトのボタンを定義できます。ダイアログがアクティブなときにEnterキーを押すと、デフォルトのボタンをクリックするのと同じです。MFCは、ボタンコントロールをサポートするCButtonクラスを提供します。

チェックボックス

特定の可能な選択肢を表示するために使用されます。選択肢は独立しており、ユーザーはオプションを選択またはキャンセルできますオプションを選択するとチェックマークが表示され、オプションをキャンセルするとチェックマークが消えます。このチェックボックスは、MFCのCButtonクラスでサポートされています。ユーザーは、SetCheck()関数とGetCheck()関数を使用して、チェックボックスの現在の状態を設定または取得できます

BST_UNCHECKED==((CButton*)GetDlgItem(IDC_CHECK_RES1))->GetCheck()
((CButton*)GetDlgItem(IDC_CHECK_RES1))->SetCheck(true);		

コントロールの編集

ユーザーが入力した文字列受け取るために使用されます編集ボックスのオプションを選択することにより、編集ボックスは文字列、数字、パスワードなどを受け取ることができます。編集ボックスは複数行の文字列を受け取るように設定することもできます。大文字と小文字は自動的に変換されます。編集ボックスは複数の制御通知を親ウィンドウ送信する場合があり、ユーザーは必要に応じてこれらの制御通知を処理できます。MFCは、編集ボックスコントロールをサポートするCEditクラスを提供します

GetDlgItem(IDC_***)->SetWindowText(Cstring);
 
GetDlgItem(IDC_***)->GetWindowText(Cstring);

コンボボックス

リストボックスと編集ボックスの組み合わせにより、ユーザーはリスト内の既存のオプションを選択できるだけでなく、新しい選択肢を入力することもできます。MFCは、コンボボックス制御をサポートするCComboBoxクラスを提供します。

CComboBox * AAA = (CComboBox*)(GetDlgItem(IDC_***));
 
AAA->AddString(_T("***"));
 
AAA->SelectString(0, _T("***"));
 
AAA->SetCurSel(0);
 
 
int nSel = AAA->GetCurSel();
 
AAA->GetLBText(nSel, Cstring);
 
if(strType.Trim() == _T("***"))

リストボックス

一連の可能なオプション選択するために使用され、ユーザーはスクロールバーを介してこれらのオプションを参照できます。リストボックスでは、コントロールのプロパティダイアログボックスでのユーザーの設定に応じて、単一の選択または複数の選択を行うことができます。MFCは、リストボックスコントロールをサポートするCListBoxクラスを提供します。

グループボックス

コントロールのグループを論理的な関係で囲み、これらのコントロールの周囲に境界線とタイトルを追加するために使用されますコンポジションボックスは、視覚効果の観点からコントロールを「グループ化」するためだけのものであることに注意してください。実際の「グループ化」作業には、追加の作業が必要です。コードを追加せずに、一連の論理関係のみを視覚的に表示します

ラジオボタン

特定の可能なオプション選択するために使用されます。(チェックボックス)チェックボックスとは異なり、このオプションは独立していません

一般的に、いくつかのラジオボタンは、グループを形成しそして唯一のラジオボタンで同一のグループが選択されます

MFCは、CButtonクラスを使用して、ラジオボタンコントロールをサポートします

SetCheck()関数とGetCheck()関数は、ラジオボタンにも適用できます。

静的テキスト

指定された場所に特定の文字列表示するために使用されます通常近くにある別のコントロールのコンテンツを識別するために使用されます静的テキストコントロール表示される文字列は通常変更されませんが、必要に応じて、別の食品ID番号割り当て、対応する関数を呼び出して設定する必要がありますMFCは、静的制御をサポートするCStaticクラスを提供します

画像制御

ビットマップ(ビットマップ)とアイコン(アイコン)、グラフィックスの描画と表示を表示します。主に正方形の領域が表示に適しています。同じ正方形の領域でも(静的テキスト)静的テキストボックスを使用できます。

スクロール・バー

これには、水平スクロールバーと垂直スクロールバーが含まれます。さまざまな視覚効果に加えて、水平スクロールバーはスクロール時にWM_HSCROLLメッセージを生成し垂直スクロールバーはスクロール時にWM_VSCROLLメッセージを送信しますMFCはCScrollBarのサポートを提供します

スライダーコントロール(スライダーコントロール)

通常、プログラムで一連の離散値受け入れるために使用されます

ユーザーはスライダーコントロールの値の範囲を設定したり、コントロールにチェックマークを追加して特定の位置の意味を示すことができます。

MFCは、CSliderCtrlクラスのサポートを提供します

スピンボタン

上向き矢印と下向き矢印のペアを近づけて、微調整ボタンを使用して特定の値を増減します。

ボタンを微調整するには、多くの場合、「バディ」コントロールが必要ですこれは通常、編集ボックスです。

微調整ボタンの上矢印をクリックすると、編集ボックスの数値が増加します。それ以外の場合は、減少します。MFCは、サポート用のCPinButtonCtrlクラスを提供します

プログレスバー(プログレスコントロール)

で、動作時には、現在の進行状況を反映するために長い時間がかかります

操作の進行状況が進み続けると、進行状況バーが進行状況バーのフレームを独特の色で塗りつぶします。ユーザーは、プログレスバーの範囲と現在の位置を設定できます。

MFCは、サポート用のCProgressCtrlクラスを提供します

CProgressCtrl* progressbar = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS_1);
 
progressbar->SetRange(0, 4);
 
progressbar->SetPos(0);

ホットキーコントロール(ホットキー)

ホットキーコントロールは編集ボックスのように見えますが、ホットキーコントロールはユーザーが押しばかりのキーの組み合わせすぐに反映できます。これは、プログラムのホットキーを設定するときに特に便利です。

ホットキーコントロールは「ビジュアル」にキーの組み合わせのみを表示し、ホットキーを設定する作業では、ユーザーがコードを追加して完了する必要があります。

MFCは、サポート用のCHotKeyクラスを提供します

リストコントロール

アイコン付きの一連の文字列を特定の順序で表示します。

リストコントロールには、大きいアイコン(アイコン)、小さいアイコン(小さいアイコン)、リスト(リスト)、レポート(レポート)の4つの表示モードがあります

ユーザーは、リストコントロールに新しいアイテムを追加したり、リストコントロールの表示モードを制御したりできます。

MFCは、サポート用のCListCtrlクラスを提供します

初期化:

 struct INFO { int id; CString time; CString type; }info; CString id; int nRow=0; id.Format(_T("%d"), info.id); m_ListCtrl.InsertItem(nRow,id); m_ListCtrl.SetItemText(nRow, 1, info.time); m_ListCtrl.SetItemText(nRow, 2, info.type); nRow ++;


レコードを追加:

 
struct INFO
 
{
 
int id;
 
CString time;
 
CString type;
 
}info;
 
CString id;
 
int nRow=0;
 
id.Format(_T("%d"), info.id);
 
m_ListCtrl.InsertItem(nRow,id);
 
m_ListCtrl.SetItemText(nRow, 1, info.time);
 
m_ListCtrl.SetItemText(nRow, 2, info.type);
 
nRow ++;

ツリーコントロール

ディスプレイの階層関係のアイテムのシリーズを最も典型的な例は、ディスク上のファイルとフォルダを表示することです

サブアイテムがある場合は、ツリーコントロールのアイテムをクリックして、そのサブアイテムを展開または縮小します

MFCは、サポート用のCTreeCtrlクラスを提供します

初期化

   void CConfigDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); // TODO: 在此处添加消息处理程序代码  CRect rcWnd; GetClientRect(&rcWnd);  CRect rcChild = rcWnd; rcChild.top = rcWnd.top+10; rcChild.bottom -=10; rcChild.left += 160; rcChild.right -= 10; CRect laneRect = rcChild;  if(::IsWindow(m_1Dlg)) m_1Dlg.MoveWindow(rcChild);  if(::IsWindow(m_2Dlg)) m_2Dlg.MoveWindow(rcChild);   if ( ::IsWindow( pTree.GetSafeHwnd() ) ) { pTree.MoveWindow(rcWnd.left+10,rcWnd.top+30,130,350,1); } }

ツリーノードの切り替え

   void CConfigDlg::OnTvnSelchangedTree(NMHDR *pNMHDR, LRESULT *pResult) { LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR); // TODO: 在此添加控件通知处理程序代码 HTREEITEM hSelected=pNMTreeView->itemNew.hItem; if(hSelected!=NULL) { pTree.SelectItem(hSelected); int nDat = pTree.GetItemData(hSelected);  switch(nDat) { case 1: /*MessageBox(_T("YNAME"));*/ if(m_pPreWnd) m_pPreWnd->ShowWindow(SW_HIDE);  m_1Dlg.ShowWindow(SW_SHOW); m_pPreWnd = &m_1Dlg; break; case 3: /*MessageBox(_T("XNAME"));*/ if(m_pPreWnd) m_pPreWnd->ShowWindow(SW_HIDE);  m_2Dlg.ShowWindow(SW_SHOW); m_pPreWnd = &m_2Dlg; break;  default: break; } } *pResult = 0; }

位置を変える

   void CConfigDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); // TODO: 在此处添加消息处理程序代码  CRect rcWnd; GetClientRect(&rcWnd);  CRect rcChild = rcWnd; rcChild.top = rcWnd.top+10; rcChild.bottom -=10; rcChild.left += 160; rcChild.right -= 10; CRect laneRect = rcChild;  if(::IsWindow(m_1Dlg)) m_1Dlg.MoveWindow(rcChild);  if(::IsWindow(m_2Dlg)) m_2Dlg.MoveWindow(rcChild);   if ( ::IsWindow( pTree.GetSafeHwnd() ) ) { pTree.MoveWindow(rcWnd.left+10,rcWnd.top+30,130,350,1); } }

タブコントロール

多数のコントロールが含まれており、大量のデータ分類と表示を表示または取得するユーザーの要件を満たすことができます。典型的な例は、Windowsタスクバーの各プログラムラベルです。

各プロパティシートはいくつかのプロパティページに分割されています。これらのプロパティページはそれぞれのタグで区別され、これらのプロパティページには他のコントロールを含めることができます

プロパティシートを表示する場合、一度に表示できるのは1つのプロパティページのコンテンツ全体であり、他のプロパティページのラベルも同時に表示されます。ユーザーはラベルをクリックして対応するプロパティページを開きます。

MFCは、サポート用のCTabCtrlクラスを提供します

バインド変数を初期化します

m_tab_Light.DeleteAllItems();
 
m_LightParkingDlg.DestroyWindow();
 
m_LightStatusDlg.DestroyWindow();
 
m_tab_Light.InsertItem(0, _T("0001")); // 插入第一个标签
 
m_tab_Light.InsertItem(1, _T("0002")); // 插入第二个标签
 
 
CRect tabRect; // 标签控件客户区的位置和大小
 
m_tab_Light.GetClientRect(&tabRect); // 获取标签控件客户区Rect
 
// 调整tabRect,使其覆盖范围适合放置标签页
 
tabRect.left += 2;
 
tabRect.right -= 1;
 
tabRect.top += 21;
 
tabRect.bottom -= 2;
 
m_LightParkingDlg.Create(IDD_DIALOG_LIGHT_PARKING, &m_tab_Light); // 创建第一个标签页
 
m_LightStatusDlg.Create(IDD_DIALOG_LIGHT_STATUS, &m_tab_Light); // 创建第二个标签页
 
//m_LightParkingDlg.InitData();
 
m_LightParkingDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(),SWP_SHOWWINDOW);

制御ページの切り替え

 CRect tabRect; // 标签控件客户区的位置和大小
 
m_tab_Light.GetClientRect(&tabRect); // 获取标签控件客户区Rect
 
// 调整tabRect,使其覆盖范围适合放置标签页
 
tabRect.left += 2;
 
tabRect.right -= 1;
 
tabRect.top += 21;
 
tabRect.bottom -= 2;
 
switch (m_tab_Light.GetCurSel())
 
{
 
 
case 0:
 
m_LightStatusDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
 
m_LightParkingDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);
 
break;
 
case 1:
 
m_LightParkingDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
 
m_LightStatusDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);
 
break;
 
 
}

アニメーションコントロール(アニメーション):

AVI形式のビデオクリップ再生するために使用されますユーザーはビデオクリップの再生、停止、および配置を制御できますが、これらの機能にも制限されますアニメーションコントロール設定ではオーディオクリップを再生できません。ユーザーがより高いレベルのビデオまたはオーディオのサポートを必要とする場合は、MCIWndコントロールを使用してください

MFCは、アニメーションコントロールをサポートするCAnimateCtrlクラスを提供します

高度な編集ボックス(リッチエディット)

編集制御機能の拡張。、高度な編集ボックス、簡単な入力と文字列の編集に加えて、ユーザーはまた、文字や段落のための特定のフォーマットを指定することができ、ユーザーがさえ、高度な編集ボックスにOLEアイテムを挿入することができます

高度な編集ボックスは基本的にフォーマットされたテキストエディタ機能を実装し、ユーザーがいくつかのインターフェイスを追加するだけで済みます。

MFCは、サポート用のCRichEditCtrlクラスを提供します

日付/時刻ピッカー(日付時刻ピッカー)

日付と時刻を直感的に選択する方法をユーザーに提供します。日付/時刻セレクターは、外観はコンボボックスに似ていますが、ユーザーがドロップダウン矢印をクリックすると、カレンダーコントロールが展開され、ユーザーが選択できるようになります。選択すると、日付/時刻セレクターは自動的に新しい日付/時刻を表示します。MFCは、CDateTimeCtrlクラスのサポートを提供します。

SYSTEMTIME times_1; //开始时间日期
 
SYSTEMTIME timee_1; //结束时间日期
 
 
CDateTimeCtrl* dtPickctrs_1 = (CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKER_START1); //获取时间控件句柄
 
CDateTimeCtrl* dtPickctre_1 = (CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKER_END1);
 
 
memset(×_1,0,sizeof(times_1)); //时钟初始化
 
memset(&timee_1,0,sizeof(timee_1));
 
 
dtPickctrs_1->GetTime(×_1); //获取控件所选时间,保存至变量
 
dtPickctre_1->GetTime(&timee_1);
 
 
 
CString strTimeStart; //将时间转换为字符串
 
strTimeStart.Format(_T("%04d-%02d-%02d %02d:%02d:%02d"), times_1.wYear,times_1.wMonth,times_1.wDay,times_2.wHour,times_2.wMinute,times_2.wSecond);
 
CString strTimeEnd;
 
strTimeEnd.Format(_T("%04d-%02d-%02d %02d:%02d:%02d"), timee_1.wYear,timee_1.wMonth,timee_1.wDay,timee_2.wHour,timee_2.wMinute,timee_2.wSecond);
 


システム時刻を取得する

SYSTEMTIME time;
 
::GetLocalTime(&time);

カレンダーコントロール(月間カレンダー)

下図のように、実際のカレンダーと操作が似ており、直感的に現在の日付確認・表示することができますMFCは、サポート用のCMonthCalCtrlクラスを提供します

IPアドレス制御(IPアドレス)

IPアドレスコントロールは、IPアドレスの入力と編集に使用されます。MFCは、サポート用のCIPAddressCtrlクラスを提供します

このコントロールの外観は編集ボックスに似ていますが、3つのグループで入力された文字を自動的に区別し、間隔を空けたドットを追加できます。IPアドレス制御は、インターネット技術をサポートするプログラムを開発するための便利さを提供します。

 拡張コンボボックス(拡張コンボボックス)

通常のコンボボックス(コンボボックス)に加えて、画像リストもサポートしています

コンボボックスに特定のアイコンを表示して、テキストを表示するだけでなく、対応する選択を示すことができます。

MFCは、サポート用のCComboBoxExクラスを提供します

カスタムコントロール 

 コントロールを使用する場合、そのクラスには、このウィンドウクラスとVCクラスをサポートするクラス(Button、Editなど)が必要です。CEditクラスのメンバー変数を追加します。CEditm_Text(つまり、右クリックして変数を追加します) 、次に編集コントロールに従って使用します。

 

 ハイパーリンク制御(SysLink制御):

1. htmlのハイパーリンクと同様に、MFCアプリケーションにハイパーリンクを追加するために使用されます。クリックしてWebページにリンクできます。コントロールをページにドラッグし、変数(m_linkCtrl)をバインドします。内部のコンテンツはすべて、標準htmlのhrefの使用法に従って書き込まれます。間違って書かれていると、自然なリンクを作ることができません。

htmlのhref属性がどのように設定されているかを確認できます。また、文字列内の二重引用符の処理に注意し(エスケープ文字\を追加することを忘れないでください)、クリック応答メッセージを追加します。

m_linkCtrl.SetWindowTextW(_T("<a href=\"http://blog.csdn.net/miko_xiaoming\">Miko's Note</a>"));
 
PNMLINK pNMLink = (PNMLINK) pNMHDR;
 
ShellExecuteW(NULL, L"open", pNMLink->item.szUrl, NULL, NULL, SW_SHOWNORMAL); //在浏览器中打开

2. Buttonコントロールと同様に、対応するメッセージに応答します                                  

 

スプリットボタンコントロール(スプリットボタンコントロール)

下図のように、複数選択ボタン選択機能を実現し、使用時に対応するメニューを追加します。

 

 ネットワークアドレス制御(ネットワークアドレス制御):

inet_addr(ip)の入力として直接使用できます。区切り文字はコンマ(、)です。

コマンドボタンコントロール

ボタンに対応するコマンドを追加できるだけでなく、コマンドにコメントを付けることもできます

すべてのコントロールに共通のプロパティ:

ID:コントロールのリソース識別子。

Visiable:コントロールが表示されているかどうか。

無効:コントロールが禁止されているかどうかに関係なく、禁止されているコントロールはキーボードとマウスの入力を受け入れることができません。

グループ:このスペースから新しいグループを開始するかどうか。

タブストップ:プログラムの[Tab]キーでこのコントロールに切り替えることができるかどうか。

ヘルプID:ヘルプIDをコントロールに割り当てるかどうかに関係なく、ヘルプIDはコントロール自体のリソースIDに基づいています。

クライアントエッジ:コントロールにくぼんだ境界線を追加して、コントロール全体がくぼんだように見せます。

静的エッジ:コントロールに境界線を追加します。

モーダルフレーム:コントロールに3Dフレームを追加します。クライアントエッジとは異なり、突出しています。

透明:この属性を持つウィンドウは透明であり、その下のウィンドウはそれによって隠されません。

ファイルの受け入れ:この属性を持つウィンドウは、ドラッグアンドドロップファイルを受信できます。ファイルがこのコントロールにドラッグされると、コントロールはWM_DROPFILESメッセージを受信します。

親通知なし:コントロールがWM_PARENTNOTIFYメッセージを親ウィンドウに送信しないことを示します。

右揃えのテキスト:テキストが右揃えであることを示します。

上記のプロパティは、コントロールのプロパティダイアログボックスから設定できます。プロパティダイアログボックスで、[F1]キーを押して、プロパティのヘルプ情報を表示します。

各タイプのコントロールは、MFCコントロールクラスによって管理されます。リソースエディターを使用してダイアログボックスにコントロールが追加されると、visualC ++はコントロールクラスのインスタンス、つまりオブジェクトを自動的に生成し、コンストラクターを呼び出します。ダイアログボックスの場合が閉じている場合、そのさまざまな子コントロールオブジェクトは自動的に破棄されます。

リソースエディタを使用せずにプログラムでコードを記述して、コントロールを作成および表示したり、コントロールのプロパティを設定したりすることもできます。

すべてのコントロールクラスはCWndから取得されます。コントロールの一部の操作とプロパティ設定では、CWnd自体のメンバー関数を使用する必要があります。CWndの一部の関数は、コントロールを操作してコントロールプロパティを設定するためによく使用されます。

SetWindowText:コントロールに表示されるキャプションテキストを設定します。これは、コントロールのキャプションプロパティを設定するために使用されます。

GetWindowText:コントロールのタイトルテキストを取得します

EnableWindow:コントロールのDisabledプロパティ、つまり、ソーシャルコントロールがキーボードとマウスの入力を受信できるかどうかを設定します

SetWindowPos:ウィンドウのサイズ、位置、およびZ軸の順序を変更します。

MoveWindow:ウィンドウのサイズと位置を変更します

GetWindowRec:ウィンドウのサイズと位置を取得します(情報は長方形の構造で保存されます)。

GetClientRect:ウィンドウクライアント領域のサイズを取得します(情報は長方形の構造に格納されます)

ShowWindow:ウィンドウの可視性(つまり、ウィンドウが表示されているかどうか)を設定します

SetWindowText / GetWindowTextを使用して、ダイアログボックスのタイトルテキストを設定/取得することもできます。

メリットが来ています〜

学習は一人の問題ではありません。お互いを監督するパートナーが必要です。C/ C ++に興味がある場合は、エディターをフォローして、バックグラウンドでプライベートメッセージを送ってください。[プログラミング交換]一緒に学びましょう!!C / C ++プロジェクト学習ビデオ資料を受け取ることができます!

 

おすすめ

転載: blog.csdn.net/Python6886/article/details/111405398