모두의 프린터는 어떠한 경우에도 본인인증, 회원가입, 카드결제를 요구하지 않습니다.
다운로드를 유도하는 애드센스 광고를 피로곰이 배포하는 프로그램들의 다운로드 링크로 착각하지 않도록 주의하시기 바랍니다. 피로곰이 배포하는 모든 프로그램은 본인인증, 회원가입, 이용료 결제 없이 무료로 사용가능합니다.
많이 찾는 글들...
  1. Ghostscript/GhostPCL 설치 안내
  2. 파일 다운로드가 차단되는 경우
  3. 내 컴퓨터의 32비트,64비트 여부 아는법
  4. 'Windows의 PC 보호' 문제
  5. 모두의 프린터 실행후 환경설정창 뜨지 않고 무반응
  6. Ghostscript PDF변환 불가. Can't load Ghostscript DLL
  7. 대법원 인터넷 등기소, 전자소송, 경매,전자공탁등 대법원계열 사이트관련
  8. 모두의 프린터 사용후 네트워크 장애가 발생하는경우. (대법원 인터넷등기소 등)
  9. 출력시 모두의 프린터가 강제종료 되는 경우.'지원하지 않는 PDF또는 가상 프린터입니다.'
  10. 오픽(OPic), 연결상태 확인 불가 프린터, 등록되지 않은 프린터(MarkAny e-PageSAFER)
  11. YBM 토익성적표 관련(정상적인 프린터로 출력을 진행하시기 바랍니다)
  12. 리포트뷰어(ReportViewer) 관련(특수목적프린터, 문서변환 프로그램을 제거해주세요)
  13. 인터넷증명발급센터 서트피아(Certpia) 관련 안내
  14. 인강사이트 관련 - 출력에 매우 오래 걸림, PDF파일 버벅거림, PDF여는데 오래걸림 등등
  15. '잘못된 프린터 데이터를 수신하였습니다.' 문제
  16. MS서피스, 삼성 갤럭시북 등 ARM기반 랩탑, '잘못된 프린터 데이터를 수신하였습니다.' 문제

[Go언어 윈도 GUI] walkmgr에 툴바(ToolBar) 추가

윈도 GUI 프로그래밍시 메뉴와 함께 있으면 유용한 기능중 하나가 툴바(ToolBar)입니다.

흔히 이런 것들로 보통 타이틀바나 메뉴 바로 아래즈음에 아이콘들로 주르륵~ 하니 놓여지는 .. 열기, 자르기, 저장 같은 기능들을 모아두는 것들을 툴바라고들 하지요..

제가 클론해서 수정중인 lxn/walk 에도 기본적으로 제공을 하고 있는 기능입니다만.. walkmgr 구조에 포함시켜 보았습니다. 원래 윈도의 툴바는 수직 방향으로도 구성이 가능하고 lxn/walk 에서도 파라메터 상으로는 수직을 지정가능하게 되어 있긴 한데 제대로 동작하진 못하는것 같아서 우선 전통적인 툴바에 대해서만 다뤄 보도록 하겠습니다.

pirogom/walkmgr 에 추가된 코드는 아래 링크를 참고하시구요

walkmgr_example 에 추가된 예제 코드는 아래 링크를 참고하십시요.

간단한 설명을 붙여봅니다.

Go
func TestDefToolBar(t *testing.T) {
	wm := walkmgr.NewWin("툴바 테스트(기본)", 640, 480)

	wm.NewToolBar()
	wm.AddTool("", "icon\\icon1.ico", func() {})
	wm.AddTool("수한무", "icon\\icon2.ico", func() {})
	wm.ToolBarEnd()

	wm.Start()
}

툴바는 기본적으로 윈도 객체에 붙는 놈이라 NewWin 으로 생성한 WalkUI객체로 다루시면 됩니다.

툴바 객체 생성(NewToolBar) -> 툴 추가(AddTool) -> 툴바 생성 종료(ToolBarEnd)

크게 3단계로 보시면 되겠습니다. 이 구조는 walkmgr의 다른 객체들의 사용과 비슷합니다. GroupBox나 Composite 같은 것들도 시작지점에 특정함수를 호출하고 중간에 객체 추가 함수들을 나열한 뒤 End() 메소드로 마무리 하는 것과 비슷한 구조입니다.

툴바 객체를 생성하는 함수는 총 3가지 입니다.

NewToolBar, NewToolBarWithText, NewToolBarWithText2 이름에서 알수 있듯이 이미지만 있거나 타이틀 텍스트가 같이 표시되는 정도의 구분입니다. 나머지는 예제 설명을 하면서 진행 하도록 하겠습니다.

툴을 추가하는 함수는 AddTool로 첫번째 인자는 타이틀 텍스트, 두번째 인자는 아이콘 파일의 경로, 마지막 인자는 해당 툴이 클릭 되었을때 실행될 콜백함수를 지정하시면 됩니다. 콜백 함수의 파라메터는 없습니다.

앞서 보여드린 첫 TestDefToolBar 함수를 실행하면

Go
wm.NewToolBar()

이 NewToolBar 함수는 아이콘 이미지만으로 구성된 툴바를 생성하기 때문에 아이콘만 노출됩니다. AddTool 메소드로 생성한 툴의 타이틀 텍스트는 아이콘에 마우스를 올리고 있으면 뜨는 툴팁 텍스트로 표시됩니다.

이런식으로 동작 합니다.

이번에는 NewToolBarWithText 메소드로 생성된 툴바의 예를 보도록 하겠습니다.

Go
func TestTextToolBar(t *testing.T) {
	wm := walkmgr.NewWin("툴바 테스트(기본 텍스트)", 640, 480)

	wm.NewToolBarWithText()
	wm.AddTool("", "icon\\icon1.ico", func() {})
	wm.AddTool("수한무", "icon\\icon2.ico", func() {})
	wm.ToolBarEnd()

	wm.Start()
}

기본적으로 다 같지만 NewToolBar -> NewToolBarWithText 로 툴바의 생성메소드만 변경되었습니다.

첫 예제와 달리 좌측에 아이콘, 우측에 타이틀 텍스트가 표시됩니다.

Go
func TestTextToolBar2(t *testing.T) {
	wm := walkmgr.NewWin("툴바 테스트(하단 텍스트)", 640, 480)

	wm.NewToolBarWithText2()
	wm.AddTool("", "icon\\icon1.ico", func() {})
	wm.AddTool("수한무", "icon\\icon2.ico", func() {})
	wm.ToolBarEnd()

	wm.Start()
}

이번에는 NewToolBarWithText2 메소드로 바꿔서 동작 시켜 봅니다.

텍스트가 우측이 아닌 아이콘의 하단에 표시됩니다. 필요에 따라 원하는 스타일로 호출해서 사용하시면 되겠습니다.

툴바의 경우 한줄에 여러 기능들이 배치되다 보면 그 기능들의 목적에 맞게 구분을 해줘야 하는 경우가 생깁니다. 그런 경우 메뉴에서 AddSeparator라는 메소드를 사용한것 처럼 AddToolSeparator 메소드를 사용하면 구분선을 추가할 수 있습니다.

Go
func TestToolbarWithLine(t *testing.T) {
	wm := walkmgr.NewWin("툴바 테스트(구분선)", 640, 480)

	wm.NewToolBar()
	wm.AddTool("", "icon\\icon1.ico", func() {})
	wm.AddTool("수한무", "icon\\icon2.ico", func() {})
	wm.AddToolSeparator()
	wm.AddTool("거북이", "icon\\icon1.ico", func() {})
	wm.AddTool("두루미", "icon\\icon2.ico", func() {})
	wm.AddToolSeparator()
	wm.AddTool("삼천갑자", "icon\\icon1.ico", func() {})
	wm.AddTool("동방삭", "icon\\icon2.ico", func() {})
	wm.AddTool("치치카포", "icon\\icon1.ico", func() {})
	wm.AddToolSeparator()
	wm.AddTool("사리사리", "icon\\icon2.ico", func() {})
	wm.AddTool("센타", "icon\\icon1.ico", func() {})
	wm.AddTool("워리워리", "icon\\icon2.ico", func() {})
	wm.AddToolSeparator()
	wm.AddTool("세브리깡", "icon\\icon1.ico", func() {})
	wm.AddTool("무두셀라", "icon\\icon2.ico", func() {})
	wm.ToolBarEnd()

	wm.Start()
}

func TestToolbarWithLineAndText(t *testing.T) {
	wm := walkmgr.NewWin("툴바 테스트(구분선+텍스트)", 640, 480)

	wm.NewToolBarWithText()
	wm.AddTool("", "icon\\icon1.ico", func() {})
	wm.AddTool("수한무", "icon\\icon2.ico", func() {})
	wm.AddToolSeparator()
	wm.AddTool("거북이", "icon\\icon1.ico", func() {})
	wm.AddTool("두루미", "icon\\icon2.ico", func() {})
	wm.AddToolSeparator()
	wm.AddTool("삼천갑자", "icon\\icon1.ico", func() {})
	wm.AddTool("동방삭", "icon\\icon2.ico", func() {})
	wm.AddTool("치치카포", "icon\\icon1.ico", func() {})
	wm.AddToolSeparator()
	wm.AddTool("사리사리", "icon\\icon2.ico", func() {})
	wm.AddTool("센타", "icon\\icon1.ico", func() {})
	wm.AddTool("워리워리", "icon\\icon2.ico", func() {})
	wm.AddToolSeparator()
	wm.AddTool("세브리깡", "icon\\icon1.ico", func() {})
	wm.AddTool("무두셀라", "icon\\icon2.ico", func() {})
	wm.ToolBarEnd()

	wm.Start()
}

func TestToolbarWithLineAndText2(t *testing.T) {
	wm := walkmgr.NewWin("툴바 테스트(구분선+텍스트)", 640, 480)

	wm.NewToolBarWithText2()
	wm.AddTool("", "icon\\icon1.ico", func() {})
	wm.AddTool("수한무", "icon\\icon2.ico", func() {})
	wm.AddToolSeparator()
	wm.AddTool("거북이", "icon\\icon1.ico", func() {})
	wm.AddTool("두루미", "icon\\icon2.ico", func() {})
	wm.AddToolSeparator()
	wm.AddTool("삼천갑자", "icon\\icon1.ico", func() {})
	wm.AddTool("동방삭", "icon\\icon2.ico", func() {})
	wm.AddTool("치치카포", "icon\\icon1.ico", func() {})
	wm.AddToolSeparator()
	wm.AddTool("사리사리", "icon\\icon2.ico", func() {})
	wm.AddTool("센타", "icon\\icon1.ico", func() {})
	wm.AddTool("워리워리", "icon\\icon2.ico", func() {})
	wm.AddToolSeparator()
	wm.AddTool("세브리깡", "icon\\icon1.ico", func() {})
	wm.AddTool("무두셀라", "icon\\icon2.ico", func() {})
	wm.ToolBarEnd()

	wm.Start()
}

이런식으로 구분선을 추가하고 싶은 위치에 AddToolSeparator 메소드를 호출해 주시면 툴의 목적대로 분리해서 구성이 가능합니다.

툴바는 기본적으로 윈도 창의 크기가 변경 되더라도 알아서 크기에 맞춰 변화 됩니다. 그런 이유로 NewWin으로 창을 생성할때 지정하는 창의 크기는 툴바가 차지하는 면적은 제외하고서 따지는 크기입니다. 이건 만들어 가면서 익숙해 지시면 될 문제 겠구요 ..

윈도 크기가 변하더라도 크기에 맞춰서 배치가 따라 당기는걸 보실 수 있습니다.

이상입니다.

많이 찾는 글들...
  1. Ghostscript/GhostPCL 설치 안내
  2. 파일 다운로드가 차단되는 경우
  3. 내 컴퓨터의 32비트,64비트 여부 아는법
  4. 'Windows의 PC 보호' 문제
  5. 모두의 프린터 실행후 환경설정창 뜨지 않고 무반응
  6. Ghostscript PDF변환 불가. Can't load Ghostscript DLL
  7. 대법원 인터넷 등기소, 전자소송, 경매,전자공탁등 대법원계열 사이트관련
  8. 모두의 프린터 사용후 네트워크 장애가 발생하는경우. (대법원 인터넷등기소 등)
  9. 출력시 모두의 프린터가 강제종료 되는 경우.'지원하지 않는 PDF또는 가상 프린터입니다.'
  10. 오픽(OPic), 연결상태 확인 불가 프린터, 등록되지 않은 프린터(MarkAny e-PageSAFER)
  11. YBM 토익성적표 관련(정상적인 프린터로 출력을 진행하시기 바랍니다)
  12. 리포트뷰어(ReportViewer) 관련(특수목적프린터, 문서변환 프로그램을 제거해주세요)
  13. 인터넷증명발급센터 서트피아(Certpia) 관련 안내
  14. 인강사이트 관련 - 출력에 매우 오래 걸림, PDF파일 버벅거림, PDF여는데 오래걸림 등등
  15. '잘못된 프린터 데이터를 수신하였습니다.' 문제
  16. MS서피스, 삼성 갤럭시북 등 ARM기반 랩탑, '잘못된 프린터 데이터를 수신하였습니다.' 문제

모두의프린터에서 더 알아보기

지금 구독하여 계속 읽고 전체 아카이브에 액세스하세요.

계속 읽기