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


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


LIST ALL
Posted by 지상현2004-12-19 13:21:58, Hit : 5835
[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

   [0.9b] "메뉴 항목_" 이여 안녕! [2]
지상현 2004/12/19  5835
291
   단축키 만들기... [6]
손상진 2004/06/17  5827
290
   [Tip] 인터넷 실시간 방송 재생(TV,라디오) [5]
권선중 2004/07/26  5825
289
   창조에서 핸들 다루기 - 꼭 알아두어야 할 중요한 사항 (rev.1) [3]
지상현 2006/05/21  5808
288
   버튼이 눌러질때 다른 그림이 뜨도록!!! [2]
Pueding 2002/09/10  5796
287
   [초급] 02. 명령어를 배워보자 - 기본 명령어 (1)
정윤부 2002/11/03  5792
286
   [all] 할당해() 자기대입 주의 (ㅎ문자열)
지상현 2011/02/07  5790
285
   [팁#2] 파일에서 정수값 읽기!
지상현 2005/10/05  5762
284
   메모 가지고 놀기! [3]
지상현 2006/07/25  5749
283
   압축률 안따지고 dll 파일 없이 파일 합치기 ㅡ ㅡ;; [3]
날개달기 2003/04/30  5738
282
   코딩시 키보드 노동 약간 줄이자; [5]
박종훈 2007/01/01  5732
281
   [ㅎ메모] 창조만으로 알수없는 것을 API로 얻기
박종훈 2008/07/19  5722
280
   ㅎ메모, 스크롤바 블록으로 자동으로 찾아가기.. [7]
손상진 2004/02/12  5721
279
   [팁]에디트에 적은 문자를 리스트박스에서 찾기..
김환욱 2002/11/24  5718
278
   [TIP] 프로그램 제작시 프로그램크기는 무시하세요.... [4]
권선중 2005/03/09  5715
277
   시스템 사용을 제한하는 레지스트리 값들[출처:http://delphi... [4]
Pueding 2003/10/12  5709
276
   ㅎ메모, ㅎ리스트박스 등에서, 속도향상 팁 [7]
박종훈 2006/11/11  5706
275
   도스용 백신을 쉽게 실행해 보자!!(좀 어색한데 -_-;) [2]
위자드 2003/10/13  5702
274
   메모 객체 글꼴 크기 조절 [2]
성인e 2009/09/30  5699
273
   [팁#6] 글씨 세로로 쓰기 [3]
ps.구루 2003/09/21  5697
272
   바이러스 백신에 오진되지 않게 하는 법
김대명 2011/04/23  5685
271
   효과음 많은 사이트.. [7]
변혁수 2004/07/25  5685
270
   [팁#8] 콤보박스에 감춰진 팁 [3]
ps.구루 2003/12/18  5685
269
   API에 쓰이는 상수 값 쉽게 알아내기 [1]
지상현 2006/09/24  5667
268
   음수형 -> 양수형 간단한 방법
지상현 2007/01/23  5663
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이희철
로그인