winapi 텍스트 에디터 관련 질문입니다.,
새나
#include windows.h
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
HWND hWndMain;
LPCTSTR lpszClass=TEXT(TabCtrl);
#define ID_R1 101
#define ID_R2 102
#define ID_R3 103
#define ID_R4 104
#define ID_R5 105
#define ID_R6 106
#define ID_R7 107
#define ID_R8 108
#define ID_R9 109
#define ID_R10 110
#define ID_R11 111
#define ID_R12 112
#define ID_R13 113
#define ID_R14 114
#define ID_R15 115
#define ID_R16 116
#define ID_R17 117
#define ID_R18 118
#define ID_EDIT 100
#define ID_COMBOBOX 100char Items[][30]={지정문자입력,日付 9999/99/99,日付 99/99/99,日付 9999年99月99日,9999,西暦年99,和暦年99,月99,日99,時間99};
char str[128];
HWND r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,hEdit,hCombo;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)(COLOR_BTNFACE+1);
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 | WS_CLIPSIBLINGS,
10,10,930,700,
NULL,(HMENU)NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);
hWndMain=hWnd;
while(GetMessage(&Message,0,0,0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return (int)Message.wParam;
}
#include commctrl.h
#include resource.h
HWND hTab;
HWND hStatic;
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
TCITEM tie;
int i;
switch(iMessage) {
case WM_CREATE:
InitCommonControls();
hTab=CreateWindow(WC_TABCONTROL,,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS,0,0,0,0,hWnd,(HMENU)0,g_hInst,NULL);
tie.mask=TCIF_TEXT;
tie.pszText=one;
TabCtrl_InsertItem(hTab,0,&tie);
CreateWindow(button,속성(텍스트),WS_CHILD | WS_VISIBLE |
BS_GROUPBOX,25,50,520,260,hWnd,(HMENU)0,g_hInst,NULL);
CreateWindow(static,텍스트,WS_CHILD | WS_VISIBLE,
30,80,70,25,hWnd,(HMENU)-1,g_hInst,NULL);
hCombo=CreateWindow(combobox,NULL,WS_CHILD | WS_VISIBLE | CBS_DROPDOWN,
100,80,150,200,hWnd,(HMENU)ID_COMBOBOX,g_hInst,NULL);
for (i=0;i9;i++)
SendMessage(hCombo,CB_ADDSTRING,0,(LPARAM)Items[i]);
hEdit=CreateWindow(edit,Preview,WS_CHILD | WS_VISIBLE | WS_BORDER |
ES_AUTOHSCROLL,100,110,350,25,hWnd,(HMENU)ID_EDIT,g_hInst,NULL);
CreateWindow(static,문자간,WS_CHILD | WS_VISIBLE,
30,140,70,25,hWnd,(HMENU)-1,g_hInst,NULL);
hEdit=CreateWindow(edit,0,WS_CHILD | WS_VISIBLE | WS_BORDER |
ES_AUTOHSCROLL,100,140,70,25,hWnd,(HMENU)ID_EDIT,g_hInst,NULL);
CreateWindow(button,스타일,WS_CHILD | WS_VISIBLE |
BS_GROUPBOX,35,170,500,60,hWnd,(HMENU)0,g_hInst,NULL);
r1=CreateWindow(button,강조,WS_CHILD | WS_VISIBLE |
BS_AUTOCHECKBOX | WS_GROUP,
50,190,80,30,hWnd,(HMENU)ID_R1,g_hInst,NULL);
r2=CreateWindow(button,이탤릭,WS_CHILD | WS_VISIBLE |
BS_AUTOCHECKBOX,
130,190,100,30,hWnd,(HMENU)ID_R2,g_hInst,NULL);
r3=CreateWindow(button,반전,WS_CHILD | WS_VISIBLE |
BS_AUTOCHECKBOX,
230,190,80,30,hWnd,(HMENU)ID_R3,g_hInst,NULL);
r4=CreateWindow(button,밑선,WS_CHILD | WS_VISIBLE |
BS_AUTOCHECKBOX,
310,190,80,30,hWnd,(HMENU)ID_R4,g_hInst,NULL);
r5=CreateWindow(button,취소선,WS_CHILD | WS_VISIBLE |
BS_AUTOCHECKBOX,
390,190,100,30,hWnd,(HMENU)ID_R5,g_hInst,NULL);
CreateWindow(button,정렬,WS_CHILD | WS_VISIBLE |
BS_GROUPBOX,35,240,500,60,hWnd,(HMENU)0,g_hInst,NULL);
r6=CreateWindow(button,기준,WS_CHILD | WS_VISIBLE |
BS_AUTORADIOBUTTON | WS_GROUP,
50,260,80,30,hWnd,(HMENU)ID_R6,g_hInst,NULL);
r7=CreateWindow(button,좌,WS_CHILD | WS_VISIBLE |
BS_AUTORADIOBUTTON,
130,260,80,30,hWnd,(HMENU)ID_R7,g_hInst,NULL);
r8=CreateWindow(button,중앙,WS_CHILD | WS_VISIBLE |
BS_AUTORADIOBUTTON,
210,260,80,30,hWnd,(HMENU)ID_R8,g_hInst,NULL);
r9=CreateWindow(button,우,WS_CHILD | WS_VISIBLE |
BS_AUTORADIOBUTTON,
290,260,80,30,hWnd,(HMENU)ID_R9,g_hInst,NULL);
CreateWindow(button,속성2,WS_CHILD | WS_VISIBLE |
BS_GROUPBOX,25,330,520,210,hWnd,(HMENU)0,g_hInst,NULL);
CreateWindow(static,X측,WS_CHILD | WS_VISIBLE,
50,370,70,25,hWnd,(HMENU)-1,g_hInst,NULL);
hEdit=CreateWindow(edit,0,WS_CHILD | WS_VISIBLE | WS_BORDER |
ES_AUTOHSCROLL,100,370,50,25,hWnd,25,hWnd,(HMENU)ID_EDIT,g_hInst,NULL);
CreateWindow(static,Y측,WS_CHILD | WS_VISIBLE,
160,370,70,25,hWnd,(HMENU)-1,g_hInst,NULL);
hEdit=CreateWindow(edit,0,WS_CHILD | WS_VISIBLE | WS_BORDER |
ES_AUTOHSCROLL,210,370,50,25,hWnd,(HMENU)ID_EDIT,g_hInst,NULL);
CreateWindow(static,횡사이즈,WS_CHILD | WS_VISIBLE,
270,370,70,25,hWnd,(HMENU)-1,g_hInst,NULL);
hEdit=CreateWindow(edit,0,WS_CHILD | WS_VISIBLE | WS_BORDER |
ES_AUTOHSCROLL,340,370,50,25,hWnd,(HMENU)ID_EDIT,g_hInst,NULL);
CreateWindow(static,종사이즈,WS_CHILD | WS_VISIBLE,
400,370,70,25,hWnd,(HMENU)-1,g_hInst,NULL);
hEdit=CreateWindow(edit,0,WS_CHILD | WS_VISIBLE | WS_BORDER |
ES_AUTOHSCROLL,470,370,50,25,hWnd,(HMENU)ID_EDIT,g_hInst,NULL);
CreateWindow(button,회전,WS_CHILD | WS_VISIBLE |
BS_GROUPBOX,35,400,500,60,hWnd,(HMENU)1,g_hInst,NULL);
r10=CreateWindow(button,기준,WS_CHILD | WS_VISIBLE |
BS_AUTORADIOBUTTON | WS_GROUP,
50,420,80,30,hWnd,(HMENU)ID_R10,g_hInst,NULL);
r11=CreateWindow(button,90도,WS_CHILD | WS_VISIBLE |
BS_AUTORADIOBUTTON,
130,420,80,30,hWnd,(HMENU)ID_R11,g_hInst,NULL);
r12=CreateWindow(button,180도,WS_CHILD | WS_VISIBLE |
BS_AUTORADIOBUTTON,
210,420,80,30,hWnd,(HMENU)ID_R12,g_hInst,NULL);
r13=CreateWindow(button,-90도,WS_CHILD | WS_VISIBLE |
BS_AUTORADIOBUTTON,
290,420,80,30,hWnd,(HMENU)ID_R13,g_hInst,NULL);
r14=CreateWindow(button,入力,WS_CHILD | WS_VISIBLE |
BS_AUTORADIOBUTTON,
370,420,80,30,hWnd,(HMENU)ID_R14,g_hInst,NULL);
CreateWindow(button,테두리,WS_CHILD | WS_VISIBLE |
BS_GROUPBOX,35,470,500,60,hWnd,(HMENU)1,g_hInst,NULL);
r15=CreateWindow(button,없음,WS_CHILD | WS_VISIBLE |
BS_AUTORADIOBUTTON | WS_GROUP,
50,490,80,30,hWnd,(HMENU)ID_R10,g_hInst,NULL);
r16=CreateWindow(button,있음,WS_CHILD | WS_VISIBLE |
BS_AUTORADIOBUTTON,
130,490,80,30,hWnd,(HMENU)ID_R11,g_hInst,NULL);CheckRadioButton(hWnd, ID_R6, ID_R9, ID_R6);
CheckRadioButton(hWnd, ID_R10, ID_R14, ID_R10);
CheckRadioButton(hWnd, ID_R15, ID_R16, ID_R16);
CreateWindow(button,,WS_CHILD | WS_VISIBLE |
BS_GROUPBOX,565,25,350,580,hWnd,(HMENU)0,g_hInst,NULL);
CreateWindow(button,추가,WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
580,40,100,25,hWnd,(HMENU)0,g_hInst,NULL);
CreateWindow(button,클리어,WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
800,40,100,25,hWnd,(HMENU)1,g_hInst,NULL);
hEdit=CreateWindow(edit,NULL,WS_CHILD | WS_VISIBLE | WS_BORDER |
ES_AUTOHSCROLL,580,130,320,470,hWnd,(HMENU)ID_EDIT,g_hInst,NULL);
CreateWindow(button,,WS_CHILD | WS_VISIBLE |
BS_GROUPBOX,565,600,350,60,hWnd,(HMENU)0,g_hInst,NULL);
CreateWindow(button,프린트,WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
700,630,100,25,hWnd,(HMENU)1,g_hInst,NULL);
break; case WM_NOTIFY:
switch (((LPNMHDR)lParam)-code) {
case TCN_SELCHANGE:
SetWindowText(hStatic,NULL);
break;
}
return 0;
case WM_SIZE:
MoveWindow(hTab,10,10,550,650,TRUE);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
//API로 텍스트 에디터를 만들고 있는데.. 그냥 기능은 한글이나 워드에 있는 문자열 에 특수효과 주는 거 정도??
인데요.. 일단 껍데기는 이렇게 만들었는데..위에 Preview란에 문자를 입력받아서 속성을 정하고
추가 버튼을 누르면 추가버튼 밑에 있는 EDIT창에 적용된 문자가 나왔으면 하는데요..
저기 강좌 같은것에는 전부 체크박스던 라디오 버튼이던 1개씩만 사용 하고 있어서 여러개의 속성을 어떻게 받는지가
궁금하네요.. 문자 찍어 낼때는 CreateFont로 해서 받아온 속성들을 인수로 사용 하면 될듯한데.. ;;