リストビューの排他制御

  ミューテックスの作成



  
		case WM_CREATE:
			CreateMutex(
				NULL,
				false,
				"MyMutex"
			);
			Win = new LboxWin( hWnd );
			Win->StatusCreate( 0 );
			Lview = new LboxListview(
				hWnd,
				LBOX_LISTVIEW_CREATE
			);
			Lview->Grid( );
			Lview->SetFont( 0, 10, false );
			Lview->AddColumn( "パス" );
			Lview->Fit();

			Lview2 = new LboxListview(
				hWnd,
				LBOX_LISTVIEW_CREATE
			);
			Lview2->Grid( );
			Lview2->SetFont( 0, 10, false );
			Lview2->AddColumn( "" );
			Lview2->AddColumn( "テキスト" );
			Lview2->AddColumn( "ファイル名" );
			Lview2->Fit();

			break;
  



  データ追加時



  
void StringSearch( LboxString *Path, LboxString *Target )
{
	LboxTextFile Txt;
	LboxString Buffer;
	Buffer.Resize( 10000 );
	int nRow;

	if ( !(Txt.ReadOpen( Path )) ) {
		return;
	}
	nRow = 0;

	while( Txt.Get( &Buffer ) ) {
		nRow++;
		if ( Buffer.Search( Target ) ) {
			HANDLE hMutex;
			hMutex = OpenMutex( SYNCHRONIZE, false, "MyMutex" );
			if ( hMutex != NULL ) {
				WaitForSingleObject( hMutex, INFINITE );
				Lview2->AddRow();
				Lview2->SetColumnPrintf( 0, "%lu", nRow );
				Lview2->SetColumnText( 1, &Buffer );
				Lview2->SetColumnText( 2, Path );
				ReleaseMutex( hMutex );
				CloseHandle( hMutex );
			}
		}
	}

	Txt.Close();

}
  



  データ取得時

  
		case LBOX_LV_DBLCLK:
			if ( Lview2->IsHandle( (HWND)wParam ) ) {
				// 行が選択されている
				if ( LVROW(lParam) != -1 ) {
					LboxString TargetFile;
					LboxString TargetRow;

					HANDLE hMutex;
					hMutex = OpenMutex(
					   SYNCHRONIZE, false, "MyMutex" );
					if ( hMutex != NULL ) {
					   WaitForSingleObject( hMutex, INFINITE );
					   Lview2->SetCurrentRow( LVROW(lParam) );
					   Lview2->GetColumnText( 2, &TargetFile );
					   Lview2->GetColumnText( 0, &TargetRow );
					   ReleaseMutex( hMutex );
					   CloseHandle( hMutex );

					   LboxTool Tool;
					   LboxString Command;
					   Command.Printf( "\"%s\" /jl=%s \"%s\"",
					      "C:\\Program Files\\tpad\\TeraPad.exe",
					      TargetRow.szLboxString,
					      TargetFile.szLboxString
					   );
					   Tool.Execute( &Command, NULL );
					}
				}
			}
			break;
  


※ 厳密には、リストビューオブジェクトの内部処理が考慮されていないので (イベント処理等)
Lview3 を作成して使用する必要があります

  
Lview3 = new LboxListview();
Lview3->hWnd = Lview2->hWnd;
  












  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ