앞서 기본적인 트리뷰 생성법에 대해서는 아래 링크를 참고하시구요. https://modu-print.tistory.com/938 [Go언어 윈도 GUI] walkmgr에 트리뷰(TreeView) 추가 1편 이번에 모두의 PDF에 책갈피 기능을 추가하면서 PDF의 책갈피 기능이 Parent, Children 을 이용한 무한 계층구조 인지라 이런 형태를 다루는데 가장 적합한 UI요소는 아무래도 트리뷰(TreeView)라서 관련 modu-print.tistory.com 몇가지 예제를 가지고 추가 사용법을 알려드리도록 하겠습니다. 트리뷰에서 선택된 아이템의 이름을 변경하는 예제입니다. 현재 선택된 아이템의 객체를 얻는 방법과 명칭을 변경하는 방법입니다. func TestTreeView3(t *testing.T)..
이번에 모두의 PDF에 책갈피 기능을 추가하면서 PDF의 책갈피 기능이 Parent, Children 을 이용한 무한 계층구조 인지라 이런 형태를 다루는데 가장 적합한 UI요소는 아무래도 트리뷰(TreeView)라서 관련 기능을 walkmgr 에 추가해 봅니다. MFC나 윈도 API를 다루던 시절에도 사실 트리뷰는 진짜 쓰기 싫어라 하던 놈중 하나인데요 가능하면 리스트컨트롤로 대충 땜빵해서 쓰곤 했는데 .. 계층구조를 리스트 컨트롤로 다루는건 매우 비효율적인지라 미루고 미루다 추가해 봅니다. 이런놈을 보통 트리뷰라고 하지요.. 우리가 가장 흔히 접하는 경우를 보자면 윈도 탐색기의 폴더구조를 들 수 있겠습니다. 대표적인 계층구조의 트리뷰를 사용하고 있는 놈입니다. 기존에 pirogom/walk 나 piro..
윈도 GUI 프로그래밍시 메뉴와 함께 있으면 유용한 기능중 하나가 툴바(ToolBar)입니다. 흔히 이런 것들로 보통 타이틀바나 메뉴 바로 아래즈음에 아이콘들로 주르륵~ 하니 놓여지는 .. 열기, 자르기, 저장 같은 기능들을 모아두는 것들을 툴바라고들 하지요.. 제가 클론해서 수정중인 lxn/walk 에도 기본적으로 제공을 하고 있는 기능입니다만.. walkmgr 구조에 포함시켜 보았습니다. 원래 윈도의 툴바는 수직 방향으로도 구성이 가능하고 lxn/walk 에서도 파라메터 상으로는 수직을 지정가능하게 되어 있긴 한데 제대로 동작하진 못하는것 같아서 우선 전통적인 툴바에 대해서만 다뤄 보도록 하겠습니다. pirogom/walkmgr 에 추가된 코드는 아래 링크를 참고하시구요 https://github.c..
https://github.com/pirogom/walkmgr_example/blob/master/menu_test.go GitHub - pirogom/walkmgr_example: walkmgr example project walkmgr example project . Contribute to pirogom/walkmgr_example development by creating an account on GitHub. github.com walkmgr 에 메뉴관련 기능과 예제는 한참 전에 추가를 해두긴 했습니다만.. 메뉴와 관련된 글은 작성을 제대로 안한것 같아서 예제도 조금더 보강을 하고 관련 글을 작성해봅니다. 관련 예제는 위의 링크 참고 하시면 됩니다. 윈도 프로그래밍을 하다보면 진짜 유용하고 친숙..
walkmgr 에 Link Label 을 추가 하였습니다. 쉽게 말해서 URL 링크를 포함하는 텍스트 라벨을 사용할 수 있도록 추가 하였습니다. walkmgr 에 link_label.go 파일이 추가 되었구요. /** *LinkLabel **/ func (wm *WalkUI) LinkLabel(text string, at ...AlignType) *walk.LinkLabel { ne, _ := walk.NewLinkLabel(wm.Parent()) ne.SetText(text) if len(at) == 0 { ne.SetAlignment(walk.AlignHVDefault) } else { switch at[0] { case ALIGN_LEFT: ne.SetAlignment(walk.AlignHNearV..
업데이트된 패키지는 walkmgr, walkmgr_example 2개 입니다. https://github.com/pirogom/walkmgr GitHub - pirogom/walkmgr: for easy window native gui programming on go. enhanced pirogom/walk. for easy window native gui programming on go. enhanced pirogom/walk. - GitHub - pirogom/walkmgr: for easy window native gui programming on go. enhanced pirogom/walk. github.com https://github.com/pirogom/walkmgr_example GitH..
오랜만에 Go언어 관련된 글을 작성합니다. 모두의 프린터, 모두의 PDF등을 비롯한 대부분의 프로그램을 lxn/win, lxn/walk 를 클론해서 조금씩 손보고 해가면서 쓰고 있는데요, 관련 코드는 제 깃헙에 공개를 하고 있습니다. 1일1고 카테고리의 글들을 참고하시면 Go언어로 윈도 GUI 프로그래밍을 하는 것과 관련된 여러 글들을 보실 수 있을겁니다. 이번에 추가한 기능은 .. 자주 쓰이진 않지만 특정 목적의 툴을 만들거나 할때에는 은근 유용한 상태바(StatusBar)를 만들어 넣는방법입니다. walk 자체에 대부분 기본적으로 제공하던 기능이긴 합니다만 .. 그래도 walkmgr 라고 랩퍼를 만들어서 쓰고 있다보니 같은 체계(?)안으로 좀 끌어 넣고 예제코드도 같이 포함해서 올려 두었습니다. 우선..
https://github.com/pirogom/walk GitHub - pirogom/walk: Walk is a "Windows Application Library Kit" for the Go Programming Language. Clone from lxn/walk. Walk is a "Windows Application Library Kit" for the Go Programming Language. Clone from lxn/walk. - GitHub - pirogom/walk: Walk is a "Windows Application Library Kit" for the Go... github.com https://github.com/pirogom/walkmgr GitHub - pirogom/w..
walkmgr 에 progress bar 기능 추가했습니다. walkmgr_example 저장소에도 예제 적용 되었습니다. 설치나 다운로드시에 진행률을 표시할때 사용하기 좋은 기능입니다. walk 에 기본 내장되어 있었으나 제가 사용빈도가 거의 없어서 추가하지 않았던 기능인데.. 필요하시다는 분들이 계셔서 추가 했습니다. package main import ( "testing" "time" "github.com/pirogom/walkmgr" ) // 프로그래스바 테스트 func TestProgressBar(t *testing.T) { wm := walkmgr.NewWin("Progressbar 테스트", 640, 480) pb := wm.ProgressBar(0, 100, 0) wm.Starting(fu..
최근에는 lxn/walk, lxn/win 등을 클론해서 따로 필요한 부분을 수정해서 깃헙에 올려두고 있습니다. walk 를 통한 윈도 GUI 프로그래밍을 조금 수월하게 하고자 walkmgr 이라는 패키지를 만들어 쓰고 있구요.. 이와 관련된건 이 1일1고 카테고리의 이전 글들에 간단히 강좌 비슷한 글을 작성해 두었으니 참고 하시구요 .. 이 walkmgr 은 제가 만드는 모두의 프린터, 모두의 PDF등을 비롯한 윈도 GUI 프로그래밍에 모두 사용되고 있는 패키지들 입니다. 기존 walkmgr에는 checkbox 는 제공을 하고 있었으나 walk 에서 제공하는 radio button 은 아직 지원을 하지 않고 있었습니다. 라디오 버튼을 잘 쓸일이 없었던 것도 있고 walkmgr 작업하기 귀찮아서 check..
Go언어를 사용하거나 공부하면서 참고하기 좋을 .. 교제(?) 삼기 좋은 패키지 하나 소개해봅니다. https://owncast.online/ Owncast Owncast is your self-hosted live streaming solution. owncast.online https://github.com/owncast/owncast GitHub - owncast/owncast: Take control over your live stream video by running it yourself. Streaming + chat out of the box. Take control over your live stream video by running it yourself. Streaming + chat o..
https://youtu.be/gpY6iqjKoRM
https://youtu.be/ZeJMlBEIuxU
우선 앞서 lxn/walk 와 win 을 제 깃헙으로 클론해서 따로 관리한다고 글 올렸으니 참고하시구요. https://modu-print.tistory.com/731 Go언어 윈도 GUI 개발관련 win/walk 패키지 분리 기존에 Go언어로 윈도 GUI 개발과 관련하여 lxn/win, lxn/walk 패키지를 이용한 개발 방법을 글로 작성 했었는데요.. 작성한 글중중에도 .. WebView 의 자바스크립트 오류와 관련해서 이 패키지들을 수정 modu-print.tistory.com 창이나 특정 UI 객체에 드래그앤드랍을 통한 파일처리가 필요한 경우가 있습니다. 예를들어 파일리스트에 파일을 드래그앤 드랍으로 던지면 던진 파일들이 추가가 된다던지.. LineEdit 에 파일을 드래그앤드랍하면 해당 파일의..
특정 데이터의 유효성 검증을 위해서 만든 메소드들입니다. 원래 ECDSA 를 사용하는 놈으로 만들었다가 키를 만드는데 사용되는 P256.. 등의 P시리즈 커브들이 이래저래 말들이 많아서 ED25519를 사용하는 방식으로 변경하였습니다. ED25519 나 ECDSA는 데이터를 암호화하고 복호화하는데 사용되는게 아니라 특정 데이터에 개인키로 서명(Sign)을 하고 공개키로 서명이 유효한지를 검증해주는 방식으로 사용합니다. 예를들어 데이터가 "피로곰"인 경우에 서버에서 "피로곰"에 개인키로 서명을하고 서명되고 암호화된 데이터를 클라이언트에 전송하면 클라이언트에서는 "피로곰"과 서버에서 보내준 서명된 데이터를 가지고 공개키로 검증을 합니다. 애초에 사인하기 전의 원본 데이터를 모르거나 원본데이터를 알아도 서명이..
암호화 관련된 자료들은 워낙 찾아보면 많이 나오는 편이라서;; 근데 또 막상 찾아서 쓸라 하면 또 GPL이고 그래서 짜려니 귀찮고 그런경우가 많다 말이죠 .. 그런이유로 -_-;; 간단히 막 짜서 쓸려고 만든것좀 공유해 봅니다. // // Author: PIROGOM // https://modu-print.tistory.com // mop.pirogom@gmail.com // MIT License // package main import ( "crypto/rand" "crypto/rsa" "crypto/x509" "encoding/hex" "encoding/pem" "errors" "io/ioutil" ) type RSAHelper struct { PriKey *rsa.PrivateKey PubKey *..
앞서 강좌?? 까진 아니어도 여튼간에.. Go언어에서 윈도 Gui를 구성하는 법에 대한 글들 중 웹뷰를 설명한 적 있는데요. 이 웹뷰를 사용함에 있어서 한 가지 눈에 거슬리는 부분이 생기실겁니다. 보시면.. 창이 뜨고 잠시후에 웹뷰가 표시되는 걸 보실 수 있는데요.. 이건 이 IWebBrowser2라는 놈이 OLE/COM 그러니까 흔히 말하는 OCX로 만들어진 놈이라.. 원래 MFC로 다이얼로그 베이스의 프로그램을 만들거나 할 경우에는 프로그램의 생성자 즈음에 이 OCX객체의 초기화 관련 코드도 진행을 하기 때문에 .. 창이 표시되기 전에 웹뷰 관련 초기화가 이미 진행이 된 상태라 창이 표시되는 시점과 웹뷰가 준비된 시점이 거의 비슷하지만.. 이 lxn/walk의 웹뷰는.. 기본적으로 lxn/win 패키..
앞서 Go언어의 lxn/win, lxn/walk 그리고 제가 막 만든(강조합니다 막 만든겁니다) walk_wrap.go 를 이용해서 윈도 GUI 프로그래밍을 할때.. 웹뷰를 추가 가능한데요.. 이 웹뷰는 .. IE기반의 OLE 객체를 끌어다 동작을 하는지라 최신 웹 브라우저에 비해선 기능이 조금 ;; 제한적이긴 합니다. 그중 가장큰 문제는 .. 자바스크립트 오류가 발생시에는 .. 이런식으로 스크립트 오류창이 뜬다는 것이지요. 최신 브라우져들의 경우엔 개발자도구를 지원하기 때문에 이런식으로 자바스크립트 오류가 뜬다해서 메시지 창을 띄워가며 실행을 하네마네를 묻지 않습니다. 이게 상당히 거슬리는데 .. 아마 인터넷에 뒤져보시면 .. iwebbrowser2 javascript error 대충 이런 검색을 해보..
앞서 12개의 글을 쓰면서 작성한 예제 코드를 올립니다. 포함된 파일들에 대해서 설명 드리자면 DEMO.ico, test.ico 아이콘 파일입니다. img0.png, img1.png, img3.png ImageView 예제에서 사용된 이미지 파일입니다. list_model.go, list_sample.go, test_table_cbmodel.go TableView 예제를 포함한 소스파일 main.go main 함수가 존재하고 대부분의 예제에 사용된 함수들이 있습니다. Makefile make 명령을 위한 Makefile walk_wrap.go 피로곰이 막 만든 walk 랩퍼 WALK_WRAP.manifest syso 파일을 만들기 위한 메니페스트 파일 WALK_WARP.syso rsrc 명령으로 만들어진..
아마 walk와 제가 대충 만든 walk_wrap.go 를 이용한 윈도 gui 프로그래밍에 대한 글은 이게 마지막? 이지 않을까 싶은데요 응용법이나 그런걸 좀더 세세하게 글을 더 쓸지는 모르겠지만. 이번에 다룰 내용은 특정 GUI요소에 대한게 아니라 Go와 Walk를 가지고 윈도GUI를 함에 있어서 가장 주의해야할 사항을 말씀드리겠습니다. Go언어의 가장큰 장점은 동시성 프로그래밍이 매우 단순하다는 것이지요.. 흔히 윈도 프로그래밍을 할때 스레드(Thread)를 생성할때는 위의 CreateThread나 _beginthread 같은 함수를 사용하는데 인자도 많고 복잡해 보입니다.. Go언어의 경우 그냥 앞에 go만 붙여서 쓰면 스레드로 동작을 하는 매우 단순한 구조를 가지고 있는데다 Managed 언어이니..
이번에는 .. 얼마전에 모두의 프린터 업데이트 하면서 추가시킨 웹뷰(WebView)를 다뤄보도록 하겠습니다. 한가지 주의 하실점은 윈도 API에서 지원하는 WebView는 흔히 IWebBrowser2 라고 불리는 COM+로 오랜세월 윈도에 내장된 레거시 브라우져 컴포넌트를 이용하게 됩니다. 그말은 현재 우리가 많이쓰는 HTML5 기반의 크롬이나 엣지나 파이어폭스 같은 브라우저보다 몇세대 전 기술을 사용하는 .. 그냥 쉽게 IE라고 보시면 됩니다. 그렇다 보니 너무 최신의 CSS나 HTML, Javascript 를 사용한 페이지 에서는 스크립트 오류나 기타 여러 증상이 나타날 순 있습니다. 크로미움 엣지 기반의 WebView2를 MS에서 발표 했습니다만 아직 윈도10에서는 런타임을 추가로 설치하지 않으면 ..
오랜만입니다.. 이래저래 벌린일이 많다보니 .. 이번에는 PushButton 과 ImageView 를 다뤄 보겠습니다.. 푸쉬 버튼의 경우에는 워낙 오만 예제에서 이미 다 등장을 햇던 놈이라 굳이 설명을 하지 않더라도 대충;; 뭔지 아실테지만 .. 간단하게나마 설명하고 넘어가겠습니다. /** *PushButton **/ func (m *WinResMgr) PushButton(text string, clickFunc func()) *walk.PushButton { btn, _ := walk.NewPushButton(m.GetParent()) btn.SetText(text) btn.Clicked().Attach(clickFunc) m.addObj(btn) return btn } 이렇게 생겨 먹은 놈이구요 ...
이번엔 가장 활용도가 높은 편인 테이블뷰에 대해서 알려드리겠습니다. 우선;; interface{}를 사용해서 조금 고급지게 리스트박스를 위한 모델구조를 잡고 하면 보긴 좋긴 하겠으나 애초에 그냥 막 짜서 적용해서 쓰기 바쁜 와중에 만들어 쓴 코드고.. lxn/walk 의 샘플 코드에 존재하는 것들을 크게 건드리지 않고 사용하다보니 그닥 맘에 드는 구조는 아니라는 점은 미리 말씀드립니다. 우선 테이블을 구성하기 위해서는 2개의 구조체와 몇가지 메소드를 미리 작성하셔야 합니다. /** *TestListItem **/ type TestListItem struct { Name string Level int Sex int Class string checked bool } /** *TestListModel **/ ..
이번엔 각종 설정창 등을 만드는데 어찌보면 가장 유용하게 사용하는 체크박스(Checkbox)에 대해서 다뤄보도록 하겠습니다. func (m *WinResMgr) CheckBox(text string, checked bool, attachFunc func()) *walk.CheckBox CheckBox 메소드를 사용하시면 되구요. text string 인자는 체크박스 옆의 라벨 텍스트를 지정하는거고 checked bool 은 초기 기본 체크 상태입니다. true 면 생성시 체크가 된 상태로, false 이면 생성시 체크가 안된 상태로 생성됩니다. attachFunc func() 인자는 체크박스의 체크 상대가 변경될 시에 호출되는 이벤트 핸들러 함수를 지정하면 됩니다. func checkBoxTest1() ..
이번엔 EditText? EditBox? 여튼;; 텍스트고 숫자고 입력을 받는 놈을 다뤄보겠습니다. func (m *WinResMgr) NumberEdit() *walk.NumberEdit func (m *WinResMgr) LineEdit(ro bool) *walk.LineEdit func (m *WinResMgr) TextEdit(ro bool) *walk.TextEdit func (m *WinResMgr) TextArea(ro bool) *walk.TextEdit 이정도 되겠습니다.. ro bool 인자가 있는 놈들은 read only 에 대한 flag입니다. ro 값이 true 이면 수정이 불가능한 놈이 되겄지요. 각 함수의 차이점을 말씀 드리자면 .. NumberEdit - 숫자만 입력 가능한 ..
이번에는 각 UI구성 요소들에 대한 부분을 진행 해보도록 합시다. 대충 일반적으로 말하는 라벨(Label, Static Text), 에디트박스, 체크박스, 리스트박스, 이미지컨트롤, 콤보박스 이딴 것들에 대해 논해보도록 합니다. 이러한 놈들은 얼찌 배치 할지는 이전 시간에 다뤘으니까 이전글들 참고 하시고요, 그런 부분들은 직접 해보시면 충분할 거구요.. 그정도 코드도 직접 안짜보고 이해할꺼면 개발자 때려 쳐야죠.. 어디 ㅋㅋ 그런 정신 머리로 개발자 나부랭이를 해보겠다고 크앙! 우선 가장 많이 쓰이는 놈중 하나인 라벨을 먼저 갑시다. /** *MultiLineLabel **/ func (m *WinResMgr) MultiLineLabel(text string) *walk.Label { ne, _ := w..
Go로 윈도 네이티브 GUI 줘 패기... 4번째 입니다. 이번엔 레이아웃에 대한 부분을 다뤄보도록 합니다. 앞서 C/C++에서 윈도 API를 가지고 GUI 어플리케이션을 만드는게 매우 비효율적인 노가다 개삽질이라는 식의 표현을 한적이 있는데요. 그 이유는 .. API에서 모든 UI객체는 전부다 윈도입니다. 창도 윈도 버튼도 윈도 에디트 박스도 체크박스도 스크롤바도 스크롤바 안의 상하단 버튼도 죄~~다 윈도입니다. 그 말은 그 하나하나를 다 CreateWindow 를 하고 그 각 객체별로 WndProc 같은 메시지 프로시저를 한땀 한땀 다 등록을 시켜야 한단 소리죠 그래야 키보드 입력이던 마우스 클릭이던 내용을 그리고 지우고 지지고 볶고 .. 가 가능합니다. 그렇게 수 없이 많은 반복적인 코드를 생성해야..
Go언어로 윈도GUI .. 3번째 글입니다. 우선 관련 글들을 작성하면서 계속 사용하게될 소스파일 하나 먼저 던져 놓고 시작하겠습니다. walk_wrap.go 라고 매번 치기 귀찮으니 이놈, 저놈, 랩퍼 등등으로 쓸수 있으니 알아서 잘 보시기 바랍니다. 이놈에 대해 이래저래 쓰기 앞서서.. 웹 프로그래밍을 할때도 그렇고 GUI 프로그래밍을 할때도 그렇고 콘솔 프로그램과 달리 프로그램을 만들다 보면 메시지 박스를 띄워서 뭔가를 하거나 확인 창을 띄워야 하거나 하는 경우가 있습니다. 이런 놈들이죠.. 앞에 놈은 자바스크립트의 alert 같은 놈이고 뒤엣놈은 confirm 같은 놈입니다. 이렇게 메시지 박스나 확인창을 생성해주는 두 함수에 대해서 먼저 설명을 하고 넘어 가겠습니다. func MsgBox(msg..
Go로 윈도 네이티브 GUI 프로그램만들기 2번째 입니다. 앞서 lxn/win, walk 2개 패키지는 go get 하셨을 테구요.. 보통 윈도 API 프로그래밍은 C/C++ 에서도 노가다의 최 정점에 놓여진 그런 놈입니다 ㅋㅋ 그게 싫어서 쓰는게 go 같은 언어들인거고 .. 그런 이유로 이 lxn/walk 의 경우에도 좀더 편하게 GUI를 만들수 있는 방법을 제공하는데요. 그게 lxn/walk 패키지에 포함된 declarative 라는 패키지 입니다. package main import ( "github.com/lxn/walk" . "github.com/lxn/walk/declarative" "strings" ) func main() { var inTE, outTE *walk.TextEdit MainW..