DEFINE WINDOW [<oWnd>]
                       [ FROM <nTop>, <nLeft> TO <nBottom>, <nRight> ]     ;
                       [ TITLE <cTitle> ]                                  ;
                       [ COLOR <nClrFore> [,<nClrBack>] ]                  ;
                       [ BRUSH <oBrush> ]                                  ;
                       [ CURSOR <oCursor> ]                                ;
                       [ ICON  <oIcon> ]                                   ;
                       [ MENU <oMenu> ]                                    ;
                       [ STYLE <nStyle> ]                                  ;
                       [ BORDER <border: NONE, SINGLE> ]                   ;
                       [ NOSYSMENU, NO SYSMENU ]                           ;
                       [ NOCAPTION, NO CAPTION, NO TITLE> ]                ;
                       [ NOICONIZE, NOMINIMIZE ]                           ;
                       [ NOZOOM, NO ZOOM, NOMAXIMIZE, NO MAXIMIZE ]        ;
                       [ VSCROLL, VERTICAL SCROLL ]                        ;
                       [ HSCROLL, HORIZONTAL SCROLL ]                      ; 

윈도우에 메뉴를 설정하는 방법은 MEMU Command를 이용해 Menu Object를 생성 후 Window에 지정을 해주면 됩니다. 명령어는 아래와 같습니다

          MENU [ <oMenu> ] ;
                 [ <popup: POPUP> ] 

          MENUITEM [ <oMenuItem> PROMPT ] [<cPrompt>] 			;
                      [ MESSAGE <cMsg> ] 					;
                      [ <checked: CHECK, CHECKED, MARK> ] 			;
                      [ <enable: ENABLED, DISABLED> ] 			;
                      [ <file: FILE, FILENAME, DISK> <cBmpFile> ] 		;
                      [ <resource: RESOURCE, RESNAME, NAME> <cResName> ] 	;
                      [ ACTION <uAction,...> ] 				;
                      [ <of: OF, MENU, SYSMENU> <oMenu> ] 			;
                      [ ACCELERATOR <nState>, <nVirtKey> ] 			;
                      [ <help: HELP> ] 					;
                      [ <HelpId: HELP ID, HELPID> <nHelpId> ] 

          SEPARATOR [<oMenuItem>] 

          ENDMENU 

메뉴는 위와 같은 기본적인 문법을 가지고 있습니다.

위 메뉴를 도식화하면 아래와 같이 표현할 수 있겠습니다.

 

다음의 표의 메뉴 구성 예를 보면 일정한 규칙을 발견할 수 있습니다.

MENU , ENDMENU는 한 쌍을 이루고 이 안에 메뉴내용은 MENUITEM이라는 명령어를 통해 프로그램 합니다.

 

oMenu 메뉴 객체명

MENU oMenu라는 변수가 정보를 가지고 있겠다는 뜻이 됩니다.

MENU oMenu
     MENUITEM "독립라이브러리“
     MENU 
        MENUITEM "독립라이브러리 정보“
        MENU
            MENUITEM "버전“
            MENUITEM "만든이“
            MENUITEM "정보“
        ENDMENU
     ENDMENU
ENDMENU

메뉴 구성예

MENUITEM    아래 같이 구성됩니다.

<oMenuItem>   MENUITEM의 정보를 담을 object이름입니다. 그러나 MENUITEM의 단순한 목적, 즉, 사용자로 하여금 어떠한 지시를 내리게 해주고 그 지시를 실행해 주기 위한 단순한 메뉴로 쓰일 때는 사용되지 않습니다.

<cPrompt>    메뉴에 표시될 말

<cMsg>     윈도우 하단에 메시지 상자가 있을 때 나타날 간단한 도움말.

CHECK, CHECKED, MARK   체크 표시된 메뉴구성

ENABLED, DISABLED     ENABLED : MENUITEM을 선택할 수 있게 합니다.

               (활성화:Enable)

               DISABLED : MENUITEM을 선택할 수 없게 합니다.

               (비 활성화: Disable)

cBmpFile    FiveWin 1.95이상에서는 16×16그림을 MENUITEM 왼쪽에 메뉴와 같이 표시해주는 (Ms-Office Look)기능이 추가되었습니다. FILE은 cBmpFile은 cBmpFile이라는 이름을 가진 BITMAP을 FILE로부터 읽어 오겠다는 것입니다. ( 예 : FILE “My.bmp” )

RESOURCE, RESNAME, NAME <cResName> 16×16그림을 Resource로부터 읽어 옵니다.

<uAction,…>  메뉴를 선택했을 때 실행되는 함수

         (예 : MENUITEM “윈도우종료” ACTION oWnd:End() )

<oMenu>   어떤 MENU(oMENU)의 Sub메뉴인가? 자주 사용되는 것은 아니나 Case-Tool같은 프로그램을 하시는 분들께는 아주 주요한 기능일 것입니다.

<nState>, <nVirtKey>   일종의 핫키(Hot-Key), 단축키를 지정합니다. nState는 ALT나 SHIFT같이 확장을 위한 키보드 값을 설정하는 것으로 아래와 같습니다.

정의된 값 원래값 설명
ACC_NORMAL 1 확장키를 사용 안합니다.
ACC_SHIFT 4 SHIFT키와 같이 사용합니다.
ACC_CONTROL 8 CONTROLL키와 같이 사용합니다.
ACC_ALT 16 ALT키와 같이 사용합니다.

                    < nStatus값 >

nVirtKey키는 일반적으로 사용되는 키로 NextWin\include의 VKEY.CH를 참고바랍니다.

 

<help: HELP> 도움말을 사용할 것입니다.

<HelpId: HELP ID, HELPID> <nHelpId> nHelpID는 도움말 File의 HELP ID Number로 해당 메뉴에서 F1키를 누르면 해당 ID의 도움말이 나오게 됩니다.

SEPARATOR [<oMenuItem>] 는 아래 그림에서 보듯이 MENUITEM과 MENUITEM간의 경계선을 표시해줍니다.

 

 NSAMPLES\WINDOW\TESTMENU.PRG 참조

#include "npp.ch"

Static oWnd
Function Main()
    SET _3DLOOK ON
    SET RESOURCES TO "MENU.DLL"

    DEFINE WINDOW oWnd               	;
           MENU  MenuCreate()        	;
           TITLE "메뉴 예제"         	;
           COLOR CLR_BLACK, CLR_CYAN

    ACTIVATE WINDOW oWnd
    SET RESOURCES TO

Return Nil

Function MenuCreate()

    MENU oMenu
         MENUITEM "독립라이브러리"
         MENU
             MENUITEM "독립라이브러리 정보"
             MENU
                MENUITEM "만든때(&T)"  			;
                         RESOURCE "B_TIME" 		;
                         ACTION MsgInfo("2000년","만든떄")

                MENUITEM "만든이(@M)"  			;
                         RESOURCE "B_MAKE" 		;
                         ACTION MsgInfo("독립개발자","만든이")	;
                         ACCELERATOR ACC_ALT,77

                MENUITEM "정  보(^I)"  			;
                         RESOURCE "B_INFO" 		;
                         ACTION MsgInfo("독립 2000년","정 보")	;
                         ACCELERATOR ACC_CONTROL,73
             ENDMENU
             SEPARATOR
             MENUITEM "종료"
         ENDMENU
         MENUITEM "인사관리"
         MENUITEM "급여관리"
         MENUITEM "회계관리"
    ENDMENU

Return oMenu

 

동적메뉴 : 사용자에 따라서 메뉴의 구성을 다르게 하는 예제입니다.

NSAMPLES\WINDOW\DYMENU.PRG 참조

#include "npp.ch"

static nUser:=1
FUNCTION Main()
        MsgGet("사용자","한국(1), 영어(2) : ", @nUser )
        SAMMENU()
Return Nil

FUNCTION SAMMENU()
   LOCAL oWnd
   LOCAL oMenu := MenuBuild()

   DEFINE WINDOW oWnd TITLE "동적 메뉴 예제"   ;
          COLOR CLR_BLACK,CLR_CYAN             ;
          MENU oMenu

   ACTIVATE WINDOW oWnd

RETURN NIL

FUNCTION MenuBuild()
   Local oMenu
   Local ni      := 0
   Local aMenus1 := {"파일","편집","검색" }
   Local aMenus2 := {"FIle","Edit","Seek","Pass" }

   MENU oMenu
        iF nUser == 1
           FOR nI := 1 TO LEN ( aMenus1 )
               MenuAdd ( aMenus1[ nI ], nI )
           NEXT
        Else
           FOR nI := 1 TO LEN ( aMenus2 )
               MenuAdd ( aMenus2[ nI ], nI )
           NEXT
        End
    ENDMENU

RETURN oMenu

FUNCTION MenuAdd( cMenu, nI )
       MENUITEM cMenu ACTION MsgInfo( nI )
RETURN NIL

 

그림 메뉴 만들기

홈페이지에서와 같이 그림의 특정 부분을 클릭하면 그에 따른 동작을 하게 할 수 있습니다.

만드는 방법

 1. 메뉴에 사용할 그림을 그립니다.

 2. 자원 편집기에서 그림을 얹을 다이얼로그를 만듭니다.

 3. 에니메이션 콘트롤(class : “Tdrani3”)를 만듭니다.

 4. 아래 예제에서 oMenu:AddRect을 제거 후 실행파일을 만들어 실행 후 그림에서 버튼기능을 할 사각영역을

  생각 후 사각박스 좌측상단을 Ctrlt+마우스오른쪽버튼 클릭하여 좌표를 알아내고, 우측하단을 Ctrl+마우스

  오른쪽버튼 클릭하여 좌표를 알아냅니다.

 5. 아래 예제와 같은 방법으로 코딩합니다.

 

NSAMPLES\WINDOW\BTMMENU.PRG 참조

#include "npp.ch"

FUNCTION Main()
    LOCAL oWnd

    DEFINE WINDOW oWnd TITLE "Test Menu"   ;
           COLOR CLR_BLACK,CLR_WHITE      ;
           STYLE WS_POPUP
           xDrawMenu ( oWnd )
    ACTIVATE WINDOW oWnd MAXIMIZED
RETURN NIL


STATIC FUNCTION xDrawMenu( oWnd )
    LOCAL oDlg
    LOCAL oMenu

    DEFINE DIALOG oDlg RESOURCE "D_MENU" OF oWnd ;
           COLOR CLR_BLACK, CLR_WHITE
           // DIALOG의 옵션은 chield로 설정
          oMenu := TDrAni3():Redefine ( 501, oDlg, "B_MENU", 1, 0 )
          oMenu:AddRect ( 192,   5,  212,  32, {|| MsgInfo(“태극기 입니다.”) } )
          //태극기 그림 클릭
          oMenu:AddRect ( 244, 367,  411, 628, {|| oDlg:End(), oWnd:End()  } )
          //종료(문) 그림 클릭

/*
         그림의 사각박스 좌측상단을 Ctrl+마우스 클릭
                         우측하단을 Ctrl+마우스 클릭하여 좌표를 파악
*/
    ACTIVATE DIALOG oDlg CENTER NOWAIT

RETURN NIL


INIT FUNCTION App_Init()
    SET RESOURCES TO "BTMMENU.DLL"
    SET _3DLook ON
    SetHandleCount( 45 )
RETURN NIL

 

DrZwin을 이용한 그림 메뉴 만들기

그림을 자유롭게 이동시킬 수 있으며 그림의 특정 부분을 클릭하면 그에 따른 동작을 하게 할 수 있습니다.

만드는 방법

 1. 메뉴에 사용할 그림을 3장 그립니다.  2. 에니메이션 콘트롤(class : Dr_ZWin)를 만듭니다.  3. 아래 예제에서 oMenu:AddRect을 제거 후 실행파일을 만들어 실행 후 그림에서 버튼기능을 할 사각영역을 생각 후 사각박스 좌측상단을 Ctrlt+마우스오른쪽버튼 클릭하여 좌표를 알아내고, 우측하단을 Ctrl+마우스오른쪽버튼 클릭하여 좌표를 알아냅니다.  4. 아래 예제와 같은 방법으로 코딩합니다.

NSAMPLES\WINDOW\BTMMENU.PRG 참조

Hello에 마우스를 가져가면 글자 색상이 바뀌고, 다시 Hello글자를 클릭하면 색상이 바뀌며 지정한 행동을 실행하게 됩니다.

#include "npp.ch"

FUNCTION Main()
    LOCAL oWnd
    LOCAL oDrZwin

    DEFINE WINDOW oWnd FROM 5,5 TO 20,40 ;
           TITLE "Zwin"                  ;
           STYLE (WS_POPUP)              ;
           COLOR CLR_BLACK, CLR_BLACK

           oDrZwin := Dr_ZWin( oWnd, {"menu1.bmp","menu2.bmp","menu3.bmp"},
nRGB(255,0,255) )
                     // wow1.bmp : 처음상태 보여줄 그림
                     // wow2.bmp : 마우스가 옮겨 졌을때 보여줄 그림
                     // wow3.bmp : 마우스 클릭을 했을 때 보여줄 그림
                     // nRGB(255,0,255) : 투명색상

           oDrZwin:AddRect ( 043, 032, 090, 152, {|| MsgInfo( "Hello" ) } )
           oDrZwin:AddRect ( 111, 061, 143, 149, {|| MsgInfo("Cool") } )
           oDrZwin:AddRect ( 284, 067, 309, 146, {|| oWnd:End() } )

    ACTIVATE WINDOW oWnd

    oDrZwin:End()

RETURN NIL
 

Link categories 1

Link categories 2