창조유저그룹-커즈닷컴
Window close
ID :     PASS :   
   
  처음으로
  창조
  창조 소개
창조 다운로드
CUGz.com 소개
온라인 도움말
  커뮤니티
  가입인사
자유게시판 (2/0)
Q/A게시판 (0/4)
TIP/TECH
열린강좌
자주하는질문
아이디어게시판
  자료실
  소스자료실
프로그램자료실
기타자료실
명예의 전당
이미지 자료실
  지원/기타
  표준용어재정
구글 웹서치  
관리자 전용


창조 팁
- '창조' 에 관한 팁을 올리는 곳입니다. 다수의 이미지가 필요하시면 아래 '이미지 자료실' 에 업로드 후 불러와 주세요..


LIST ALL
Posted by 지상현2004-12-19 13:21:58, Hit : 5836
[0.9b] "메뉴 항목_" 이여 안녕!
Homepage : http://myhome.naver.com/bc88c
Post URL : http://cugz.sjworks.net/bbs/zboard.php?id=tip&no=219
이번에 소개해드리려는 팁은 0.9b 에서 메뉴에 자동으로 붙는 단축키를 제거하는 방법입니다.
임시 방편으로 "메뉴 항목&" 과 같이 하는 방법이 있었으나, 특정 OS에는 그마저도 "메뉴 항목_" 이라고 뜨기 때문에 더 보기 싫다고 하시는 분이 계셨죠.

따라서 이 팁은
결국 모든 메뉴에 단축키 지정 하는 것을 포기하시고, 끝끝내 이 "_"를 파괴해버리고 싶은 분들깨 유용합니다.

불행하게도
쉬운 방법은 아닙니다.
혹시나 메뉴0.자동단축키 := 거짓; 같은 것이 있을까 찾아봤는데 못찾겠더군요.
그래서 결국 API의 힘을 빌려 해결합니다. 따라서 귀찮습니다.

필요한 API
GetMenu - 창에서 메인 메뉴의 핸들을 얻기 위해 사용합니다(메뉴.핸들은 안되는 것 같습니다).
GetSubMenu - 어떤 메뉴에서 하위 메뉴의 핸들을 얻기 위해 사용합니다.
ModifyMenu - 메뉴의 속성을 변경하기 위해 사용합니다.

실수함수:GetMenu(실수:핸들);
메뉴가 있는 창의 핸들을 넣으면 메인 메뉴의 핸들을 알려줍니다.
실수함수:GetSubMenu(실수:메뉴핸들,위치);
메뉴 핸들과 그 메뉴의 위치를 넣으면 하위 메뉴의 핸들을 알려줍니다.
실수함수:ModifyMenuA(실수:메뉴핸들,메뉴위치,옵션,새항목;문자:제목);
메뉴 핸들과 알맞는 옵션과 값을 넣으면 메뉴의 속성을 바꿔줍니다.

사용 방법
 I. 바꾸고자 하는 메뉴의 핸들을 구합니다.
II. 구한 핸들로 메뉴의 제목을 원하는대로 바꿉니다.

간단해보이죠? 하지만 귀찮습니다.

메뉴 핸들을 구하려면 메뉴의 위치를 알아야 합니다. 한가지 예를 들어볼까요.
어떤 프로그램에서 메뉴를 다음과 같이 두었습니다.




그림이 안뜨면 클릭해서 보세요.


메뉴는 이런식으로 하위 메뉴가 여럿 있을 수 있습니다.
실은 각각 하위 메뉴는 각각 다른 핸들을 가진 덩어리입니다.

메뉴에는 깊이 라는 것이 있습니다.
얼마나 밑으로 내려가느냐에 따라 다릅니다.

파일,보기 는 레벨 0입니다.
이것은 레벨0메뉴 := GetMenu(창0.핸들); 으로 구하실 수 있습니다.

{새로 만들기, 열기, 저장, 끝내기}{도구 모음, 환경 설정} 메뉴는 레벨 1 입니다.
예를 들어 {새로 만들기, 열기, ...} 의 메뉴를 구하려면

파일하위메뉴 := GetSubMenu(레벨0메뉴,0); 하시면 됩니다.

{도구 모음, 환경 설정} 이라면

보기하위메뉴 := GetSubMenu(레벨0메뉴,1); 하시면 됩니다.

뒤에 붙는 숫자가 무엇을 의미하는지 알겠죠? 메뉴의 인덱스입니다. 0부터 시작함을 잊지 마세요.

이 메뉴에는 레벨 2 메뉴도 있습니다.
{메인, 그리기 도구}가 그것입니다.
이것은 다음과 같이 구해야 합니다.

도구모음하위메뉴 := GetSubMenu(보기하위메뉴,0); // "도구 모음"이 0번째에 있으므로

만약, "환경 설정"의 하위 메뉴를 구하려고 하면 0이 아닌 1을 넣어야 할 것입니다(이 예에서 환경 설정의 하위 메뉴는 없으므로 0이 반환됩니다).



자, 이렇게 각 메뉴 덩어리의 핸들을 구하는 방법을 알았습니다.
이제 실제적으로 강제로 메뉴의 제목을 바꿀 차례입니다.
한번 "저장(S)" 을 바꿔볼까요?

* "저장"을 바꾸기 위해서는 "저장" 메뉴가 들어있는 메뉴 덩어리, 즉 "파일"의 하위 메뉴의 핸들을 구하면 됩니다.

따라서, 일단 "파일"의 하위 메뉴의 핸들을 구해보죠. (창은 창0 이라고 가정합니다)

실수: 메뉴핸들;
메뉴핸들 := 사용자함수.GetMenu(창0.핸들); // "메뉴핸들"에는 {파일,보기} 의 메뉴가 있습니다.
메뉴핸들 := 사용자함수.GetSubMenu(메뉴핸들, 0); // "메뉴핸들"에는 {새로 만들기, ...} 가 있습니다.
// 메뉴 핸들을 여기까지 구하면 됩니다

사용자함수.ModifyMenuA(메뉴핸들, 3, 1024, 0, "저장하기(&S)");



소스는 이렇습니다.
그럼 여기서 ModifyMenu 의 인자를 살펴 볼까요.

첫번째 인자... 메뉴핸들 이란 것은 보시다시피 바꾸고자 하는 메뉴가 포함되어있는 핸들입니다. 여기선 "저장" 메뉴를 바꾸고자 했으니 "파일" 의 하위 메뉴가 되겠죠?

두번째 인자, 3...이란 값은 인덱스입니다. "저장" 메뉴는 3번이죠. 이 것도 0번부터 시작합니다. 왜 그런고 하면,

0번: 새로 만들기
1번: -
2번: 열기
3번: 저장
...


이해가 되시죠?

세번째 인자, 1024 란 값은 MF_BYPOSITION 이라는 상수 값입니다.
원래 특정 메뉴를 지정하기 위해서 각각 메뉴에게 ID를 붙여놓고 지금처럼 인덱스를 부르는 대신, ID를 불러 그 메뉴를 지정합니다. 우리는 메뉴의 ID를 모르므로 인덱스로 하기 위해 저 상수를 사용했습니다.
(선생님이 출석을 부를 때 이름을 부르느냐, 번호를 부르느냐의 차이입니다. 우리는 메뉴들의 이름을 모르므로 오른쪽에서 1번째, 앞에서 4번째에 있는 메뉴를 찍을 수 밖에 없습니다.)

네번째 인자, 0은 하위 메뉴의 핸들입니다.
0 을 넣었기 때문에 우리가 바꾸는 중인 "저장" 메뉴에는 하위 메뉴가 붙지 않습니다.
하지만 0 이외에 다른 올바른 메뉴의 핸들(예를 들어, "보기" 메뉴)을 넣는다면 저장 메뉴에 보기의 하위 메뉴가 붙게 됩니다.

다섯번째 인자, 이것은 따로 설명할 필요가 없겠죠?
(원래는 여기에 메뉴 제목만 들어가는게 아니라, 메뉴에 아이콘, 메뉴의 제어[참/거짓], 메뉴 체크(창조에선 "보이기" 속성)[참/거짓] 등등 여러 메뉴의 속성을 지정해줄 수 있고, 세번째 인자에 다른 값을 넣음으로서 가능하지만 이 팁에 주제에서 벗어나므로 설명을 안했다기...보다는 창조에서 사용하기 곤란하여(또, 사용할 필요가 없고) 생략합니다.)



보너스
1. GetMenu 말고 GetSystemMenu 라는 API를 사용하면 {이전 크기로, 이동, 크기 조정, 최소화, 최대화, 닫기} 메뉴를 구할 수 있습니다.
2. GetMenu의 인자 중 창 핸들은...꼭 자신의 프로그램의 창 핸들을 넣을 필요는 없겠죠?

강현구   2004-12-19 PM 2:31:48  
네이버는 링크가 안됩니다.
ps.이진백   2004-12-31 PM 12:05:42  
API에서 메뉴 부분이 확실히 어렵기는 해요.
LIST ALL               GO TO THE TOP


N
   Subject
Posted by
Date
H
292
   창조에서 핸들 다루기 - 꼭 알아두어야 할 중요한 사항 (rev.1) [3]
지상현 2006/05/21  5809
291
   [버그보고] "문을수" 함수 버그... [8]
지상현 2006/01/14  5592
290
     [re] 나른한 일요일 오후에의 잡설 [1]
지상현 2005/11/13  4825
289
   확실한 시스템/윈도우/임시 폴더 알아오기 [6]
지상현 2005/10/28  6321
288
   창조에서 음수를 사용할 때 주의하자! [1]
지상현 2005/10/08  6832
287
   창조 도움말이 뻥을 쳤다! [5]
지상현 2005/10/08  5324
286
   [팁#3] 파일에 정수값 쓰기, 또 다른 방법!
지상현 2005/10/05  5551
285
   [팁#2] 파일에서 정수값 읽기!
지상현 2005/10/05  5763
284
   [팁] 파일에 정수값 쓰기
지상현 2005/10/05  5502
283
   "문을실수" 함수 완성! [10]
지상현 2006/01/15  5251
282
   음수형 -> 양수형 간단한 방법
지상현 2007/01/23  5665

   [0.9b] "메뉴 항목_" 이여 안녕! [2]
지상현 2004/12/19  5836
280
   창조에서 동적 메모리 할당 [3]
지상현 2004/09/25  5996
279
   '정보창보여'의 미지의 세번째 인자의 비밀 [5]
지상현 2004/05/20  4843
278
   [헛소리] 창조에서 동적 메모리 할당에 대해서 -_- [7]
지상현 2004/05/20  5927
277
   함수 선언할때 문자, 실수, 진리형 다 넣어보기 [4]
지상현 2003/02/27  5120
276
   XP 루나 인터페이스 사용하기 [0.7도 가능] [12]
지상현 2003/02/26  6989
275
   창조 단축키 하나 소개 -_-;
지상현 2003/02/26  4693
274
   [초급] 02. 명령어를 배워보자 - 기본 명령어 (1)
정윤부 2002/11/03  5793
273
   [초급] 01. 창조란 무엇인가? [9]
정윤부 2002/11/01  5947
272
   xp에서의 0.76닫기 아이콘 등 제대로 쓰기 [2]
정성우 2004/05/24  5117
271
   RPG 게임 제작할때 도움이 되는 참고 프로그램들... [1]
장규형 2006/11/19  5379
270
   메모장(제목 없음 - 메모장)이 실행되면 닫아버리고 없으면 ... [5]
이희창[빙고] 2006/03/15  6038
269
     [+] 비슷한 오류(?) 하나더... [7]
이희창(빙고) 2006/02/25  5380
268
   창조에서 사용할수 없는 글자... [7]
이희창(빙고) 2006/02/25  4938
LIST ALL   Prev [1][2] 3 [4][5][6][7][8][9][10]..[14] Next
Copyright 1999-2024 Zeroboard / skin by reedyfox in miniwini style
로그인
지우개 Expert 3.0
제작자 : 천호성 님 [LINK]
로그인
대박로또2005
제작자 : 최재일 님 [LINK]
로그인
1박종훈15292 점
2지상현8809 점
3손상진7388 점
4권선중6060 점
5이진백5174 점
로그인
가입일닉네임
05/31김동률
03/31홍형기
09/01o00pp99oo
12/27이재민
11/20이희철
로그인