|
저는 도스프롬프트(CMD) 에서 배치파일을 만들어서 폴더(하위폴더 모두포함) 속의 파일들의 경로가포함된 전체 경로가 사용자로부터 입력받은 수치 이상의 길이를 가지는 파일명들만 출력을 하도록하는 유틸을 만들려고 합니다.
기본적은 배치파일로 작성해야 될부분을 모두 만들었고 또 잘 작동되나 한가지 빠진것은 사용자로 부터 입력받은 길이 이상의 파일명들만 출력시킬 커트라인이 될 숫자 길이값을 입력받는 것이 아니라 배치파일 내에서 고정된 값을 할당하여야 되는 단점이 있습니다. 물론 배치파일의 'SET /P CUTLIN_NUM=커트라인될 파일의 길이를 입력하세요?'라는 기능을 이용해도 되지만 이것은 비쥬얼한 것이 아니라서 사실 보기도 싫고 사용도 불편합니다.
그래서 제가 잘 아는 배치파일을 최대로 살리면서 또 배치로는 단점이 있는 최소 부분만 C++빌더로 구현을 할려고 합니다.
즉 배치파일에서 C++빌더로 컴파일된 .EXE를 호출하여 커트라인될 숫자값을 사용자로 부터 비쥬얼하게 입력받고 그값을 배치로 리턴을 해주는 방식입니다.
아래는 구체적으로 알고자 하는부분입니다.
C++빌더에서 사용자로부터 숫자값을 입력받는 인풋 박스를 출력하려고 합니다. 비베나 비베스크립트나 자바스크립에서는 InputBox() 혹은 Propmpt() 함수와 같이 간단하게 해결이 되는데 C++빌더에서는 찾기가 좀힘드네요.
혹시 API로도 해결이 가능한가요 아니면 MFC까지 구현해야 하나요?
이왕이면 제가 이해가 잘아는 API로만 구현을 해보았으면 하는데요.
헤드파일이나 리소스(RC) 파일를 포함해야 하는 프로젝트 파일을 만들어야 한다면 소스를 첨부파일이나 이메일로도 좀 올려 주십시오. Borland나 VC++이나 DEV C++,Relo2.0 등등 어떻한 형태의 프로젝트 팔일소스라도 상관없어니 좀 부탁드립니다.
저의 이메일은 ssforyah@yahoo.co.kr 입니다.
그럼 답변 부탁드립니다.
아래는 추가적으로 제가 웹검색으로 기본 골격 까지만 겨우 만들어본 것인데 Inputbox의 겉모습은 만들었는데
OK버턴을 클릭했을때 텍스트박스에 입력되어있는 숫자값을 Return을 해야 하는데 어떻게 해야 하나요?
=========================================================================================
#include <WINDOWS.H>
#include "Project1_res.h"
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
LPSTR lpszClass="SubEdit";
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_QUESTION);
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=(WNDPROC)WndProc;
WndClass.lpszClassName=lpszClass;
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
hWnd=CreateWindow(lpszClass,TEXT("검색할 파일명길이의 커트라인을 입력"),WS_CAPTION|WS_SYSMENU,
300,200,370,110,
NULL,(HMENU)NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);
while(GetMessage(&Message,0,0,0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam;
}
#define ID_EDIT1 100
#define ID_EDIT2 101
HWND hEdit1, hEdit2;
WNDPROC OldEditProc;
LRESULT CALLBACK EditSubProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
switch (iMessage) {
case WM_KEYDOWN:
if (wParam==VK_RETURN) {
return 10;
}
if (wParam==VK_TAB) {
SetFocus(hEdit2);
}
break;
// case WM_LBUTTONDOWN:
// SendMessage(hWnd,EM_SETSEL,0,-1);
// return 0;
}
return CallWindowProc(OldEditProc,hWnd,iMessage,wParam,lParam);
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
char Mes[]="입력된 수치 이상의 파일명들을 출력합니다.";
switch(iMessage) {
case WM_CREATE:
hEdit1=CreateWindow("edit",NULL,WS_CHILD | WS_VISIBLE | WS_BORDER |
ES_AUTOHSCROLL,
10,10,150,25,hWnd,(HMENU)ID_EDIT1,g_hInst,NULL);
hEdit2=CreateWindow("button","확인",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
260,10,50,25,hWnd,(HMENU)0,g_hInst,NULL);
SetFocus(hEdit1);
OldEditProc=(WNDPROC)SetWindowLong(hEdit1,GWL_WNDPROC,(LONG)EditSubProc);
return 0;
case WM_COMMAND:
if(LOWORD(wParam) == 0) {
MessageBox(hWnd,"입력된 이 값을 리턴해야 함.","Button",MB_OK);
PostQuitMessage(34);
return 0;
break;
}
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd, &ps);
TextOut(hdc,10,40,Mes,strlen(Mes));
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
SetWindowLong(hEdit1,GWL_WNDPROC,(LONG)OldEditProc);
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
|