・Edit Box に勝手に改行させない方法(99/3/8)
Edit Box はなかなか便利なものなんですが、そのままだと勝手に改行とかされて 使いにくい場合があります。例えばデフォルトの設定では 英語の単語ごとに区切られて改行されてしまいます。 そういう時は EditWordBreakProc() という コールバック関数を使って自分で改行の仕方を指定しましょう。 詳しくは下のソースと MSDN ライブラリの EditWordBreakProc() を 見て下さい。
// ワードブレークプロシージャのテスト // (c) tokai@fides.dti.ne.jp 3/6/1999 // リソースエディタで IDD_DIALOG というダイアログを作って // 複数行のテキストボックス IDC_EDIT1 を貼り付けておく #include < windows.h> #include < commctrl.h> #include "resource.h" LRESULT CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM); int CALLBACK MyEditWordBreakProc(LPTSTR,int,int,int); //------------------------------------------------------------------- // メイン int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPreInst, LPSTR lpszCmdLine, int nCmdShow){ DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG),NULL,(DLGPROC)DlgProc); return 0; } //------------------------------------------------------------------- // ダイアログプロシージャ LRESULT CALLBACK DlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { switch (msg) { case WM_INITDIALOG: // 初期化 // コモンコントロール初期化 InitCommonControls(); // ワードブレークプロシージャセット SendMessage(GetDlgItem(hWnd,IDC_EDIT1), EM_SETWORDBREAKPROC,0,(LPARAM)MyEditWordBreakProc); break; case WM_CLOSE: // クローズ EndDialog(hWnd,IDOK); break; default: return FALSE; } return TRUE; } //----------------------------------------------------- // ワードブレークプロシージャ // 本当は code の値によって処理を変えなければいけないが // 面倒なので割愛。詳しくは MSDN ライブラリの EditWordBreakProc 参照 int CALLBACK MyEditWordBreakProc(LPTSTR lpch,int ichCurrent, int cch, int code){ return 0; }
Mule の場合ならテキストファイルの複数行を選択するには Ctrl+スペースでマークをセットして目的の位置にカーソルを 移動すれば複数行を選択した事になりますが、VC のエディタには マークという概念は無さそうです(いや、ちゃんと調べてませんが)。 そこで複数行を選択するには SelectLine コマンド(デフォルト設定 では Ctrl+F8)で行選択モードを起動して、起動した位置から 選択したい位置まで行ってクリックすれば複数行が選択されます、ってこんな 基本的な事も今まで知らなかったんか > 私 (^^;
#いやどうも Mule のくせが抜けなくてねえ… (^^;
また、GoToMatchBraceExtend コマンド(デフォでは Ctrl+Shift+]) で ある括弧から対応する括弧まで選択範囲を広げる事が出来ます。
それとマークは無いと書きましたが、範囲指定を開始したいところに カーソルを置いて、終了地点でシフトキーを押しながら左クリック しても複数行の範囲指定が出来ます。
普通、タイマー処理をしようとすると SetTimer() を使うのが常套手段だと思うのですが、 WinNT のはともかく、Win95/98 のタイマーはかなり精度が悪いです。 つーか、終わってます。1 回の呼び出しで平気で 5/1000 秒位狂うのでまともに 使う事は出来ません。
従って Win95/98 で出来るだけ正確なタイマーを使用したいならば、自分で タイマー用のスレッドを作って動かす必要があるでしょう。
普通にウィンドウを作成するとタスクトレイにそのウィンドウの 名前が表示されてしまいますが、拡張ウィンドウスタイルとして WS_EX_TOOLWINDOW を指定するとタスクトレイに登録されなくなります。 詳しくは CreateWindowEx() のヘルプをみて下さい。
ファイルのサイズを取得するときは普通は GetFileSize() を使いますが、 他のアプリケーションがそのファイルを開いていてロックされている場合は GetFileSize() は使えません。その場合は FindFirstFile() を使います。 具体的には次のようにします。
// FindFirstFile() でファイルサイズ取得サンプル // (c) 2000,tokai@fides.dti.ne.jp #include<windows.h> #include<stdio.h> #include<stdlib.h> int main(int argc,char* argv[]){ FILE *f; char szFile[] = "test.txt"; HANDLE hFind; WIN32_FIND_DATA findData; // 試しにファイルにロックをかけてみる if((f=fopen(szFile,"r")) != NULL){ // ファイルサイズ取得 if((hFind = FindFirstFile(szFile,&findData)) != INVALID_HANDLE_VALUE){ fprintf(stdout,"%d byte\n", findData.nFileSizeHigh*MAXDWORD+findData.nFileSizeLow); FindClose(hFind); } fclose(f); } else fprintf(stderr,"%s が見つかりません\n",szFile); return 0; }