Visual C++

「Visual C++」の編集履歴(バックアップ)一覧はこちら

Visual C++ - (2010/01/27 (水) 10:21:03) の1つ前との変更点

追加された行は緑色になります。

削除された行は赤色になります。

-ENTERキー、ESCキーでアプリが終了しないようにする。 クラスビューでCXXXDlgを選択し、プロパティ-のオーバーライドボタンをクリック PreTranslateMessageをオーバーライドする。 BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg) { if(pMsg->message == WM_KEYDOWN){ if(pMsg->wParam == VK_ESCAPE) return true; if(pMsg->wParam == VK_RETURN) return true; } return CDialog::PreTranslateMessage(pMsg); } -モードレスダイアログ 1. リソースエディタで新規ダイアログを作成  IDを IDD_XX_DIALOG とします。 2. クラスウィザードで新規クラスの作成  クラス名を CXXDialog とします。 3. OnCancel()を変更  void CXXDialog::OnCancel()  {    DestroyWindow();  } 4. PostNcDestroy()を作成  void CXXDialog::PostNcDestroy()  {    delete this;  } 5. 呼び出し  CXXDialog* dlg= new CXXDialog;  dlg->Create(IDD_XX_DIALOG,this);  dlg->ShowWindow(SW_SHOW); #right(){[[VC++6のMFCでモードレスダイアログを作成>http://lesailes.exblog.jp/14424/]]} -CXXXAppのメンバーにアクセスする  CXXXApp *app = (CXXXApp*)AfxGetApp();  app->m_xxx = ... もしくは、  extern CXXXApp theApp;  theApp.m_xxx = ... -CString⇔char*  CString msg;  char str[10];  msg.Format("%s", str);  sprintf_s(str, sizeof(str), "%s", msg); #right(){[[ポインタと文字列とCStringと>http://www.kab-studio.biz/Programing/Codian/MxA/09.html]]} -DoEvents() void DoEvents() { MSG msg; while(::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){ ::TranslateMessage(&msg); ::DispatchMessage(&msg); } } -[[デバイスマネージャからUSBシリアルのポート番号を取得>http://www.usefullcode.net/2006/12/post_19.html]]  2つ以上USB挿してもおけ。 #pragma comment(lib, "setupapi.lib") #include <setupapi.h> int CtestDlg::GetUsbComPort(int port[]) { CString msg; DWORD i; BYTE Buffer[200]; HDEVINFO hDevInfo = 0; SP_DEVINFO_DATA DeviceInfoData; int ret_cnt; BYTE ComName[]="CP210x USB to UART Bridge Controller (COM"; DWORD Length=0; ZeroMemory(&DeviceInfoData,sizeof(SP_DEVINFO_DATA)); DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); //存在するデバイス情報を取得 hDevInfo = SetupDiGetClassDevs(NULL,0,0,DIGCF_PRESENT|DIGCF_ALLCLASSES); ret_cnt = 0; for(i=0; SetupDiEnumDeviceInfo(hDevInfo,i,&DeviceInfoData); i++){ //デバイスのフレンドリーネームの取得 if(!SetupDiGetDeviceRegistryProperty(hDevInfo,&DeviceInfoData,SPDRP_FRIENDLYNAME,NULL,Buffer,sizeof(Buffer),&Length)){ // よく取得できない continue; } //指定したシリアルポートかどうかをコンペア if(strncmp((const char*)Buffer,(const char*)ComName,strlen((const char*)ComName))==0){ CString tmp; tmp.Format("%s", Buffer+strlen((const char*)ComName)); tmp = tmp.Left(tmp.GetLength()-1); port[ret_cnt] = atoi(tmp); ret_cnt++; msg.Format("%s%s\n", msg, Buffer); } } SetupDiDestroyDeviceInfoList(hDevInfo); m_static1.SetWindowText(msg); return ret_cnt; } -ウィンドウを最前面 SetWindowPos(&wndTopMost, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE); -警告音を鳴らす MessageBeep( MB_OK ); (1)標準的な警告音(-1) (2)一般の警告音(MB_OK) (3)情報メッセージ音(MB_ICONASTERISK) (4)問い合わせメッセージ音(MB_ICONQUESTION) (5)警告メッセージ音(MB_ICONEXCLAMATION) (6)システムエラー音(MB_ICONHAND) -プリコンパイル済みヘッダーファイル(stdafx.h) プリコンパイル済みヘッダーファイルが不要なソースコードの場合、 そのファイルのみ不要の設定を行うことができる。( .cファイルなど) ソリューションエクスプローラのファイルを選択し、 プロパティ→C/C++→プリコンパイル済みヘッダー→プリコンパイル済みヘッダーを使用しない -SDK時にTRACE(DebugPrint)する http://www5b.biglobe.ne.jp/~kouta_y/c/c06.html 出力はイミディエイトウィンドウではなくて出力ウィンドウに出力される。 -このアプリケーションの構成が正しくないため・・・の対処方法 A.下記をインストールする http://www.microsoft.com/downloads/details.aspx?FamilyID=200b2fd9-ae1a-4a14-984d-389c36f85647&DisplayLang=ja B.プロジェクトのプロパティを変更する。(gn_commはスレッドを使っているのでランタイム必要) 「構成プロパティ」の中の「C/C++」の中、「コード生成」を選択 マルチスレッドDLL→マルチスレッド(/MT)に変更する。 **外部リンク -[[1日でわかるMFC>http://hp.vector.co.jp/authors/VA011804/mfc_01.htm]] -[[WindowsでRS232Cを使う>http://members.jcom.home.ne.jp/0434383301/vc10.htm]] -[[RS232C シリアル通信>http://www.ys-labo.com/BCB/2007/070512%20RS232C%20zenpan.html]]
-ENTERキー、ESCキーでアプリが終了しないようにする。 クラスビューでCXXXDlgを選択し、プロパティ-のオーバーライドボタンをクリック PreTranslateMessageをオーバーライドする。 BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg) { if(pMsg->message == WM_KEYDOWN){ if(pMsg->wParam == VK_ESCAPE) return true; if(pMsg->wParam == VK_RETURN) return true; } return CDialog::PreTranslateMessage(pMsg); } -モードレスダイアログ 1. リソースエディタで新規ダイアログを作成  IDを IDD_XX_DIALOG とします。 2. クラスウィザードで新規クラスの作成  クラス名を CXXDialog とします。 3. OnCancel()を変更  void CXXDialog::OnCancel()  {    DestroyWindow();  } 4. PostNcDestroy()を作成  void CXXDialog::PostNcDestroy()  {    delete this;  } 5. 呼び出し  CXXDialog* dlg= new CXXDialog;  dlg->Create(IDD_XX_DIALOG,this);  dlg->ShowWindow(SW_SHOW); #right(){[[VC++6のMFCでモードレスダイアログを作成>http://lesailes.exblog.jp/14424/]]} -CXXXAppのメンバーにアクセスする  CXXXApp *app = (CXXXApp*)AfxGetApp();  app->m_xxx = ... もしくは、  extern CXXXApp theApp;  theApp.m_xxx = ... -CString⇔char*  CString msg;  char str[10];  msg.Format("%s", str);  sprintf_s(str, sizeof(str), "%s", msg); #right(){[[ポインタと文字列とCStringと>http://www.kab-studio.biz/Programing/Codian/MxA/09.html]]} -DoEvents() void DoEvents() { MSG msg; while(::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){ ::TranslateMessage(&msg); ::DispatchMessage(&msg); } } -[[デバイスマネージャからUSBシリアルのポート番号を取得>http://www.usefullcode.net/2006/12/post_19.html]]  2つ以上USB挿してもおけ。 #pragma comment(lib, "setupapi.lib") #include <setupapi.h> int CtestDlg::GetUsbComPort(int port[]) { CString msg; DWORD i; BYTE Buffer[200]; HDEVINFO hDevInfo = 0; SP_DEVINFO_DATA DeviceInfoData; int ret_cnt; BYTE ComName[]="CP210x USB to UART Bridge Controller (COM"; DWORD Length=0; ZeroMemory(&DeviceInfoData,sizeof(SP_DEVINFO_DATA)); DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); //存在するデバイス情報を取得 hDevInfo = SetupDiGetClassDevs(NULL,0,0,DIGCF_PRESENT|DIGCF_ALLCLASSES); ret_cnt = 0; for(i=0; SetupDiEnumDeviceInfo(hDevInfo,i,&DeviceInfoData); i++){ //デバイスのフレンドリーネームの取得 if(!SetupDiGetDeviceRegistryProperty(hDevInfo,&DeviceInfoData,SPDRP_FRIENDLYNAME,NULL,Buffer,sizeof(Buffer),&Length)){ // よく取得できない continue; } //指定したシリアルポートかどうかをコンペア if(strncmp((const char*)Buffer,(const char*)ComName,strlen((const char*)ComName))==0){ CString tmp; tmp.Format("%s", Buffer+strlen((const char*)ComName)); tmp = tmp.Left(tmp.GetLength()-1); port[ret_cnt] = atoi(tmp); ret_cnt++; msg.Format("%s%s\n", msg, Buffer); } } SetupDiDestroyDeviceInfoList(hDevInfo); m_static1.SetWindowText(msg); return ret_cnt; } -ウィンドウを最前面 SetWindowPos(&wndTopMost, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE); -警告音を鳴らす MessageBeep( MB_OK ); (1)標準的な警告音(-1) (2)一般の警告音(MB_OK) (3)情報メッセージ音(MB_ICONASTERISK) (4)問い合わせメッセージ音(MB_ICONQUESTION) (5)警告メッセージ音(MB_ICONEXCLAMATION) (6)システムエラー音(MB_ICONHAND) -プリコンパイル済みヘッダーファイル(stdafx.h) プリコンパイル済みヘッダーファイルが不要なソースコードの場合、 そのファイルのみ不要の設定を行うことができる。( .cファイルなど) ソリューションエクスプローラのファイルを選択し、 プロパティ→C/C++→プリコンパイル済みヘッダー→プリコンパイル済みヘッダーを使用しない -SDK時にTRACE(DebugPrint)する http://www5b.biglobe.ne.jp/~kouta_y/c/c06.html 出力はイミディエイトウィンドウではなくて出力ウィンドウに出力される。 -このアプリケーションの構成が正しくないため・・・の対処方法 A.下記をインストールする http://www.microsoft.com/downloads/details.aspx?FamilyID=200b2fd9-ae1a-4a14-984d-389c36f85647&DisplayLang=ja B.プロジェクトのプロパティを変更する。 「構成プロパティ」の中の「C/C++」の中、「コード生成」を選択 マルチスレッドDLL→マルチスレッド(/MT)に変更する。 (gn_commはスレッドを使っているのでランタイム必要) **外部リンク -[[1日でわかるMFC>http://hp.vector.co.jp/authors/VA011804/mfc_01.htm]] -[[WindowsでRS232Cを使う>http://members.jcom.home.ne.jp/0434383301/vc10.htm]] -[[RS232C シリアル通信>http://www.ys-labo.com/BCB/2007/070512%20RS232C%20zenpan.html]]

表示オプション

横に並べて表示:
変化行の前後のみ表示: