본문 바로가기

Windows/Windows API

찾기 (FindText)

#include <windows.h>

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
HWND hWndMain;
LPSTR lpszClass="FindDial";
UINT FRMsg;
HWND hDlgFR=NULL;
FINDREPLACE FR;
char szFindWhat[256];

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
     ,LPSTR lpszCmdParam,int nCmdShow)
{
    HWND hWnd;
    MSG Message;
    WNDCLASS WndClass;
    g_hInst=hInstance;
    
    WndClass.cbClsExtra=0;
    WndClass.cbWndExtra=0;
    WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
    WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
    WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    WndClass.hInstance=hInstance;
    WndClass.lpfnWndProc=(WNDPROC)WndProc;
    WndClass.lpszClassName=lpszClass;
    WndClass.lpszMenuName=NULL;
    WndClass.style=CS_HREDRAW | CS_VREDRAW;
    RegisterClass(&WndClass);

    hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
        NULL,(HMENU)NULL,hInstance,NULL);
    ShowWindow(hWnd,nCmdShow);
    hWndMain=hWnd;
    
    while(GetMessage(&Message,0,0,0)) {
        if (!IsWindow(hDlgFR) || !IsDialogMessage(hDlgFR,&Message)) {
            TranslateMessage(&Message);
            DispatchMessage(&Message);
        }
    }
    return Message.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;
    char Mes[]="찾기 대화상자를 보여줍니다";
    FINDREPLACE *pFR;
    static int Count=1;
    static char str[10000];
    char sTmp[256];
    RECT crt;

    if (iMessage == FRMsg) {
        pFR=(FINDREPLACE *)lParam;
        // 대화상자 종료
        if (pFR->Flags & FR_DIALOGTERM) {
            hDlgFR=NULL;
            return 0;
        }

        // 다음 찾기
        if (pFR->Flags & FR_FINDNEXT) {
            wsprintf(sTmp,"%s 문자열을 %s 방향으로 대소문자 구분%s %s검색합니다\r\n",
                szFindWhat, (pFR->Flags & FR_DOWN ? "아래쪽":"위쪽"),
                (pFR->Flags & FR_MATCHCASE ? "하여":"없이"),
                (pFR->Flags & FR_WHOLEWORD ? "단어단위로 ":""));
            strcat(str,sTmp);
            InvalidateRect(hWnd,NULL,TRUE);
        }
        return 0;
    }

    switch(iMessage) {
    case WM_CREATE:
        // 메시지 등록
        FRMsg=RegisterWindowMessage(FINDMSGSTRING);
        return 0;
    case WM_LBUTTONDOWN:
        // 대화상자 호출
        if (hDlgFR == NULL) {
            memset(&FR,0,sizeof(FINDREPLACE));
            FR.lStructSize=sizeof(FINDREPLACE);
            FR.hwndOwner=hWnd;
            FR.lpstrFindWhat=szFindWhat;
            FR.wFindWhatLen=256;

            hDlgFR=FindText(&FR);
        }
        return 0;
    case WM_PAINT:
        hdc=BeginPaint(hWnd, &ps);
        GetClientRect(hWnd,&crt);
        crt.left=10;
        crt.top=30;
        TextOut(hdc,10,10,Mes,strlen(Mes));
        DrawText(hdc,str,-1,&crt,0);
        EndPaint(hWnd, &ps);
        return 0;
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

'Windows > Windows API' 카테고리의 다른 글

리스트 박스 추가, 삭제, 선택 (listbox)  (0) 2013.10.01
리스트 박스 (listbox)  (0) 2013.10.01
폰트 선택 (ChooseFont)  (0) 2013.10.01
폰트 선택 (ChooseFont)  (0) 2013.10.01
색상 선택기 (ChooseColor)  (0) 2013.10.01