10) マルチラインエディトコントロールの特定文字列を選択状態にする

  選択テスト

  
case IDM_FIND:
	SendMessage( hMedit, EM_SETSEL, 10, 15 );
	break;

  



  Find.cpp (検索関数)



  
#include "stdafx.h"
#define INCLUDE_TYPE extern
#include "Global.h"

DWORD
FindFirst( HWND hWnd, LPSTR lpTarget )
{

	GetWindowText( hMedit, mem, 64000 );

	DWORD	ret;
	DWORD	len,i;
	DWORD	KenLen;

	KenLen = lstrlen( lpTarget );

	len = lstrlen( mem );

	ret = -1;
	for( i = 0; i < len; i++ ) {
		if ( memcmp( mem+i, lpTarget, KenLen ) == 0 ) {
			ret = i;
			break;
		} 
	}

	return ret;

}

  



  Global.h (関数宣言)

  
DWORD FindFirst( HWND hWnd, LPSTR lpTarget );

  



  関数の実行テスト

  
case IDM_FIND:
	DWORD ret;
	ret = FindFirst( hWnd, "インクルード" );
	if ( ret != -1 ) {
		SendMessage( hMedit, EM_SETSEL, ret, ret + lstrlen("インクルード") );
	}
	break;

  



  選択した文字列がウインドウに表示されるようにする

  
case IDM_FIND:
	DWORD ret;
	ret = FindFirst( hWnd, "インクルード" );
	if ( ret != -1 ) {
		SendMessage( hMedit, EM_SETSEL, ret, ret + lstrlen("インクルード") );
		SendMessage( hMedit, EM_SCROLLCARET, 0, 0 );
	}
	break;
  



  FindFirst の別バージョン

但し、逆検索する場合は mem の加工が必要なので前述の方法のほうが理解しやすいでしょう。

  
DWORD
FindFirst( HWND hWnd, LPSTR lpTarget )
{

	GetWindowText( hMedit, mem, 64000 );

	LPSTR	lpRet;
	DWORD	ret;

	lpRet = strstr( mem, lpTarget );
	if ( lpRet == NULL ) {
		return -1;
	}
	if ( lstrlen( lpTarget ) == 0 ) {
		return -1;
	}

	ret = (DWORD)lpRet - (DWORD)mem;

	return ret;

}

  










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





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

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ