앞서 기본적인 트리뷰 생성법에 대해서는 아래 링크를 참고하시구요. 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..
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
특정 데이터의 유효성 검증을 위해서 만든 메소드들입니다. 원래 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 **/ ..
이번에는 .. 드롭다운박스를 다뤄보도록 하겠습니다. func comboTest1() { mgr, _ := NewWindowMgrNoResize("콤보박스 테스트", 640, 200, GetIcon()) dd1 := mgr.DropDownBox([]string{"1.하하", "2.호호", "3.ㅋㅋ", "4.ㅎㅎ"}) dd1.CurrentIndexChanged().Attach(func() { fmt.Printf("선택된 인덱스 : %d, 선택된 값 : %s\n", dd1.CurrentIndex(), dd1.Text()) }) mgr.StartForeground() } 요래 DropDownBox 메소드를 사용하시면 되구요 인자는 []string 배열로 지정 됩니다. 보통 드롭다운박스는 보여지는 텍스트 값 또..
이번엔 각종 설정창 등을 만드는데 어찌보면 가장 유용하게 사용하는 체크박스(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 같은 메시지 프로시저를 한땀 한땀 다 등록을 시켜야 한단 소리죠 그래야 키보드 입력이던 마우스 클릭이던 내용을 그리고 지우고 지지고 볶고 .. 가 가능합니다. 그렇게 수 없이 많은 반복적인 코드를 생성해야..
원래 유튭 영상으로만 어떻게 해보려고 몇 번 녹화도 해보고 라이브도 진행해보고 했으나.. 영상보단 글로써 전달하는 게 효율적이란 생각이 들어서 .. 영상 대본 등을 이용해서 먼저 글을 올립니다. 영상은 포스트 작성후 이 글의 내용에 대해 간단히 설명하는 정도로 넘어가도록 하겠습니다. 유튜브 피로곰TV채널의 구독자와 시청시간이 충족돼서 광고도 달수 있게 되고 커뮤니티 기능도 사용 가능해지면서 전부터 생각하던 대리코딩과 관련한 글을 작성했고 한분께서 크롤링과 관련된 문의를 하셨습니다. 솔직히 별로 하고 싶지 않은 류의 프로그램이라 대리코딩 콘텐츠를 할까 말까 고민한 가장 큰 이유 중 하나가 이놈 때문인데 그래도 요청이 왔으니 진행을 해보겠습니다. 크롤러를 별로 하고 싶지 않았던 이유를 짧게 말해보자면.. 크..
얼마전부터 관련 이야기들이 고퍼 커뮤니티들에서 나오곤 했는데 실제 발표가 났네요. https://www.zdnet.co.kr/view/?no=20200611172153 MS·구글, 손잡았다…VS코드에서 ‘고’ 지원 경쟁관계인 구글과 마이크로소프트(MS)가 프로그래밍 언어 지원을 위해 협력한다.미국 지디넷은 10일(현지시간) 마이크로소프트가 오픈소스 코드편집기 비주얼스튜디오코드(VS코드)에서 고를 www.zdnet.co.kr "어? VS Code에서 Go언어 지원하는거 아니었나요?" 하실 분들이 계실텐데. VS Code가 Atom을 비롯한 꽤 많은 놈에 사용된 Eletron 프레임워크를 기반으로 만들어 진건 많이들 아실텐데요 사실 원류가 같다보니 VS Code가 출시된 초기에는 Sublime Text 등..
1일1GO 10번째 시간에서 작업한 프로젝트 파일은 위 압축파일을 다운로드 받으시면 됩니다. 추가된 파일은 baseapp.png baseapp_icon.ico 수정된 파일은 Makefile main.go 입니다. 영상중 png 이미지를 ico 파일로 변경하는데 사용한 사이트 링크입니다. https://icoconvert.com/ ICO Convert - Create Icons From PNG & JPG Images Online ICO Convert is a free online icon maker and favicon generator, with it you can make icons from png or jpg images, just upload a photo of yourself, resize and..