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


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


LIST ALL
Posted by 지상현2004-12-19 13:21:58, Hit : 5849
[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
217
   [팁#9] 정보창보여를 알아본 결과
ps.구루 2004/01/07  5619
216
   프로그램 버전업 업데이트....
위자드 2004/02/03  5377
215
   ㅎ메모, 스크롤바 블록으로 자동으로 찾아가기.. [7]
손상진 2004/02/12  5729
214
   [팁#10] 진리형을 사용할 때 유의할 점 [5]
ps.구루 2004/05/16  5338
213
   [알고리즘] 팩토리얼 구하는 프로그램 작성 [4]
느와르닷넷 2004/05/16  6297
212
   [헛소리] 창조에서 동적 메모리 할당에 대해서 -_- [7]
지상현 2004/05/20  5934
211
   '정보창보여'의 미지의 세번째 인자의 비밀 [5]
지상현 2004/05/20  4848
210
   xp에서의 0.76닫기 아이콘 등 제대로 쓰기 [2]
정성우 2004/05/24  5133
209
   객체수에 대한 정보.. [4]
김진일 2004/05/25  4550
208
   URLTODOWNLOAD 사용시... [3]
날개달기 2004/05/28  5466
207
   stream 에대해서 물어본거같은데 - -;; [3]
날개달기 2004/05/28  5064
206
   단축키 만들기... [6]
손상진 2004/06/17  5832
205
   [팁#11] 진리형 팁 두번째 [5]
ps.이진백 2004/06/22  4971
204
   마우스 커서관련팁. [6]
이시영 2004/07/16  5004
203
   [팁#12] 효율적인 반복문 4가지 팁 [11]
ps.이진백 2004/07/16  5852
202
   [tip] 균일한 랜덤재생하기.. [3]
권선중 2004/07/17  4778
201
   [팁#13] 여러 파일을 동시 삭제할때
ps.이진백 2004/07/20  5516
200
   효과음 많은 사이트.. [7]
변혁수 2004/07/25  5689
199
   [Tip] 인터넷 실시간 방송 재생(TV,라디오) [5]
권선중 2004/07/26  5833
198
   [팁!] 넥슨 게임 광고 제거 하자! [5]
위자드 2004/07/26  6934
197
   [tip]mp3가사 사이트 검색 응용 [4]
권선중 2004/08/18  5104
196
   웹사이트 자동 백업 archive [2]
리시 2004/09/05  5318
195
   창조에서 동적 메모리 할당 [3]
지상현 2004/09/25  6000
194
   [팁] 실행파일 용량을 확실하게 줄이자! [19]
황현석 2004/10/30  6799

   [0.9b] "메뉴 항목_" 이여 안녕! [2]
지상현 2004/12/19  5849
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이희철
로그인