검색결과 리스트
2011/11에 해당되는 글 13건
- 2011.11.15 본격 Gtk에서 Cairo 사용하기
- 2011.11.08 헝가리안 표기법!
- 2011.11.07 Nateon Client
- 2011.11.05 예외처리
- 2011.11.04 Lingr API 의 문제점
- 2011.11.03 delete 와 new
- 2011.11.03 C++ 생성자와 소멸자
- 2011.11.03 gtkmm 예제 프로그램
- 2011.11.03 virtual class
- 2011.11.03 C++ 상속
글
본격 Gtk에서 Cairo 사용하기
프로그래밍/Gtk+/binding gtk
2011. 11. 15. 23:11
예제 소스 참조한곳 주소 => http://zetcode.com/tutorials/cairographicstutorial/basicdrawing/
결과창
선긋는 예제인듯.
난 저중에서 소스를 일부를 뽑아내서
라는 함수를 만들었다.
mx, my가 시작위치 lx, ly 가 끝위치로해서 선을 긋는 함수다. 물론 cairo_t 타입으로 cr이라는 변수가 선언되어있어야한다.
마우스가 눌리면 전역변수 x,y값에 마우스가 누른 좌표값을 넣고, 마우스가 떼어지면 함수를 이용해 drawline함수를 사용해서 선을 그어보고싶었지만 마우스를 누르고떼는 이벤트와 그 값이 넘어가는 방식을 몰라서 막혔다. 국내에 Gtk, Cairo로 무언가 만들어본사람의 조언이있으면 좋을텐데... 예제파일이랑 영문문서를 찾아야하는건가... @.@...
#include <cairo.h> #include <gtk/gtk.h> static gboolean on_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data) { cairo_t *cr; cr = gdk_cairo_create (widget->window); cairo_set_source_rgba(cr, 0, 0, 0, 1); static const double dashed1[] = {4.0, 1.0}; static int len1 = sizeof(dashed1) / sizeof(dashed1[0]); static const double dashed2[] = {4.0, 1.0, 4.0}; static int len2 = sizeof(dashed2) / sizeof(dashed2[0]); static const double dashed3[] = {1.0}; cairo_set_line_width(cr, 1.5); cairo_set_dash(cr, dashed1, len1, 0); cairo_move_to(cr, 40, 30); cairo_line_to(cr, 200, 30); cairo_stroke(cr); cairo_set_dash(cr, dashed2, len2, 1); cairo_move_to(cr, 40, 50); cairo_line_to(cr, 200, 50); cairo_stroke(cr); cairo_set_dash(cr, dashed3, 1, 0); cairo_move_to(cr, 40, 70); cairo_line_to(cr, 200, 70); cairo_stroke(cr); cairo_destroy(cr); return FALSE; } int main (int argc, char *argv[]) { GtkWidget *window; GtkWidget *darea; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); darea = gtk_drawing_area_new(); gtk_container_add(GTK_CONTAINER(window), darea); g_signal_connect(darea, "expose-event", G_CALLBACK (on_expose_event), NULL); g_signal_connect(window, "destroy", G_CALLBACK (gtk_main_quit), NULL); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_default_size(GTK_WINDOW(window), 250, 100); gtk_widget_show_all(window); gtk_main(); return 0; }
결과창
선긋는 예제인듯.
난 저중에서 소스를 일부를 뽑아내서
void drawline(mx, my, lx, ly)
{
cairo_set_source_rgba(cr, 0, 0, 0, 1); // color setting
cairo_set_line_width(cr, 1); // line width setting
cairo_move_to(cr, mx, my); // start point
cairo_line_to(cr, lx, ly); // end point
cairo_stroke(cr); // draw?
}
라는 함수를 만들었다.
mx, my가 시작위치 lx, ly 가 끝위치로해서 선을 긋는 함수다. 물론 cairo_t 타입으로 cr이라는 변수가 선언되어있어야한다.
마우스가 눌리면 전역변수 x,y값에 마우스가 누른 좌표값을 넣고, 마우스가 떼어지면 함수를 이용해 drawline함수를 사용해서 선을 그어보고싶었지만 마우스를 누르고떼는 이벤트와 그 값이 넘어가는 방식을 몰라서 막혔다. 국내에 Gtk, Cairo로 무언가 만들어본사람의 조언이있으면 좋을텐데... 예제파일이랑 영문문서를 찾아야하는건가... @.@...
'프로그래밍 > Gtk+/binding gtk' 카테고리의 다른 글
gtkmm 예제 프로그램 (0) | 2011.11.03 |
---|---|
gtkmm! Anjuta! (0) | 2011.11.02 |
gtkbuilder의 사용 (0) | 2011.06.09 |
글
팀프로젝트땐 이 방식으로 코딩한다고한다.
변수, 함수 마다 각 타입이나 기타등등을 이름으로 적고 줄바꿈을 할땐 띄어쓰기 네칸이라던가...
확실히 이렇게하면 보기 좋을 것 같다.
링크해둬야지
http://sarum.tistory.com/85
변수, 함수 마다 각 타입이나 기타등등을 이름으로 적고 줄바꿈을 할땐 띄어쓰기 네칸이라던가...
확실히 이렇게하면 보기 좋을 것 같다.
링크해둬야지
http://sarum.tistory.com/85
'기타' 카테고리의 다른 글
Nateon Client (0) | 2011.11.07 |
---|---|
Lingr API 의 문제점 (0) | 2011.11.04 |
핑퐁 스크립트 (1) | 2011.07.14 |
ざわざわ (0) | 2011.06.07 |
잡담 여러개 (0) | 2011.06.04 |
글
Nateon Client
기타
2011. 11. 7. 17:23
socket 열고 send, recv 함수 쓰고... 뭐 그런건 잘되는데 ticket 값이라고 nateon으로 로그인 할때 필요한 값이 있는데 이 값을 받아오는게 골치다. curl로 받아왔는데 이걸 어떻게 문자열로 저장하고 끊을지 막막.......
글
예외처리를 전문으로 해주는 키워드 try catch....
과거엔 if else로 일일히 예외 처리를 해줘야했는데 C++ 에선 이걸 try catch 문으로 쉽게 처리해 줄 수 있디.
예를들면
try {
...
if(...) throw a
{ ... }
}
catch(int a) {
...
}
이런식으로 try 부분에선 할일, 수행할 코드를 적고 throw는 값을 넘겨주는 역할을, catch 문은 throw로부터 받은 값을 이용해 예외 발생시 할 일을 적는다.
이 키워드는 자바에서도 C#에서도 거의 비슷하게 동작하는것 같다
과거엔 if else로 일일히 예외 처리를 해줘야했는데 C++ 에선 이걸 try catch 문으로 쉽게 처리해 줄 수 있디.
예를들면
try {
...
if(...) throw a
{ ... }
}
catch(int a) {
...
}
이런식으로 try 부분에선 할일, 수행할 코드를 적고 throw는 값을 넘겨주는 역할을, catch 문은 throw로부터 받은 값을 이용해 예외 발생시 할 일을 적는다.
이 키워드는 자바에서도 C#에서도 거의 비슷하게 동작하는것 같다
'프로그래밍' 카테고리의 다른 글
delete 와 new (0) | 2011.11.03 |
---|---|
C++ 생성자와 소멸자 (0) | 2011.11.03 |
virtual class (0) | 2011.11.03 |
C++ 상속 (0) | 2011.11.03 |
프리미티브 타입 (0) | 2011.11.03 |
글
Lingr API 의 문제점
기타
2011. 11. 4. 20:28
API를 설명한 위키페이지에서는
라고 설명되어 있었다. 그러나 api_key값이 정확하게 무엇인지 설명도 나와있지않다. developer 페이지에 가면 key와 secret이 있는데 이 값을 넣어도 도저히 안된다.
그래서 구글링을 통해 API메모 라는 이름으로 된 GitHub 페이지를 발견했다. 그곳에선
session/create
라고 되어있는데
해석하자면 POST방식으로 user값엔 유저 ID를, password라는 값엔 비밀번호를 입력하게 하면 값이 돌아온다 설명해놓고 각 값에 대한 의미를 설명했다.
이 사이트를 보고 나는 다시 이 방식대로 해보고 제대로 값이 돌아오는 걸 볼 수 있었다.
도데체 난..... 왜 뻘짓을 한거냐.... 아무튼... 공식 설명 사이트의 위키 최종 갱신일이 2008년인걸 보면..... 공식 위키는 참조할만한데가 못되는거 아닌가 싶다...
session.create
Creates a new Lingr API session. Once you create a session, you must perform some API call at least once every ten minutes, or the session will time out and be automatically destroyed.
HTTP Method:
- POST
- http://www.lingr.com/api/session/create
Parameters:
api_key * | Your API Key |
client_type | The type of your API client- if provided, must be either human or automaton. If not provided, the default is automaton. For more information, see the client type page. |
(*) Required
Example Response:
<?xml version="1.0" encoding="UTF-8"?></response>
<response>
<status>ok</status>
<session>g5K1smWyhwa</session>
라고 설명되어 있었다. 그러나 api_key값이 정확하게 무엇인지 설명도 나와있지않다. developer 페이지에 가면 key와 secret이 있는데 이 값을 넣어도 도저히 안된다.
그래서 구글링을 통해 API메모 라는 이름으로 된 GitHub 페이지를 발견했다. 그곳에선
session/create
セッションID作成する
リクエスト
POST
user: ユーザ名
password: パスワード
レスポンス
session: セッションID
nickname: ニックネーム
public_id: パブリックID
is_online: online/offline
user.name: 表示名
user.username: ユーザ名
ユーザ名かパスワードが無効のときは
{status: “error”, code: “invalide_user_credentials”, … }
라고 되어있는데
해석하자면 POST방식으로 user값엔 유저 ID를, password라는 값엔 비밀번호를 입력하게 하면 값이 돌아온다 설명해놓고 각 값에 대한 의미를 설명했다.
이 사이트를 보고 나는 다시 이 방식대로 해보고 제대로 값이 돌아오는 걸 볼 수 있었다.
도데체 난..... 왜 뻘짓을 한거냐.... 아무튼... 공식 설명 사이트의 위키 최종 갱신일이 2008년인걸 보면..... 공식 위키는 참조할만한데가 못되는거 아닌가 싶다...
글
delete 와 new
프로그래밍
2011. 11. 3. 16:24
new는 객체를 메모리에 할당, delete는 할당된 객체를 삭제... 인듯 하다
그런데 new [] 와 delete[] 라는 키워드도 존재하는 듯하다.
좀더 자세히 풀어보면
new -> 객체 한개를 동적으로 할당하고 초기화
delete -> 할당된 객체 한개를 삭제
new [] -> 객체 배열을 동적으로 할당하고 초기화
delete [] -> 할당된 객체 배열 하나하나를 없애고 배열을 삭제
인듯 하다.
이렇게 new 와 new [] , delete 와 delete [] 키워드로 분리한 이유는
객체 하나의 정보만 저장한다면 배열의 갯수를 표현하는 부분이 필요 없으니까 그 부분을 절약하기 위해 그런듯하다.
new 연산자로 할당한건 객체만, new [] 연산은 배열 갯수 + 객체 X 갯수 로 표현하는듯.
그런데 new [] 와 delete[] 라는 키워드도 존재하는 듯하다.
좀더 자세히 풀어보면
new -> 객체 한개를 동적으로 할당하고 초기화
delete -> 할당된 객체 한개를 삭제
new [] -> 객체 배열을 동적으로 할당하고 초기화
delete [] -> 할당된 객체 배열 하나하나를 없애고 배열을 삭제
인듯 하다.
이렇게 new 와 new [] , delete 와 delete [] 키워드로 분리한 이유는
객체 하나의 정보만 저장한다면 배열의 갯수를 표현하는 부분이 필요 없으니까 그 부분을 절약하기 위해 그런듯하다.
new 연산자로 할당한건 객체만, new [] 연산은 배열 갯수 + 객체 X 갯수 로 표현하는듯.
'프로그래밍' 카테고리의 다른 글
예외처리 (0) | 2011.11.05 |
---|---|
C++ 생성자와 소멸자 (0) | 2011.11.03 |
virtual class (0) | 2011.11.03 |
C++ 상속 (0) | 2011.11.03 |
프리미티브 타입 (0) | 2011.11.03 |
글
C++ 생성자와 소멸자
프로그래밍
2011. 11. 3. 14:09
생성자는 조금 들어봤는데 소멸자는 처음 들어봤다.
class A {
A() // 생성자
{
~~
}
~A() // 소멸자
{
~~
}
}
이런 형태로 쓰이는 거 같다
생성자는 객체를 생성할때, 소멸자는 객체를 없앨때(delete를 이용하는듯) 사용하나보다
class A {
A() // 생성자
{
~~
}
~A() // 소멸자
{
~~
}
}
이런 형태로 쓰이는 거 같다
생성자는 객체를 생성할때, 소멸자는 객체를 없앨때(delete를 이용하는듯) 사용하나보다
'프로그래밍' 카테고리의 다른 글
예외처리 (0) | 2011.11.05 |
---|---|
delete 와 new (0) | 2011.11.03 |
virtual class (0) | 2011.11.03 |
C++ 상속 (0) | 2011.11.03 |
프리미티브 타입 (0) | 2011.11.03 |
글
gtkmm 예제 프로그램
프로그래밍/Gtk+/binding gtk
2011. 11. 3. 13:09
#include <gtkmm.h>
#include <iostream>
#include "config.h"
#ifdef ENABLE_NLS
# include <libintl.h>
#endif
Gtk::Window* main_win = 0;
/* For testing propose use the local (not installed) ui file */
/* #define UI_FILE PACKAGE_DATA_DIR"/gtk_test_1/ui/gtk_test_1.ui" */
#define UI_FILE "src/gtk_test_1.ui"
Glib::RefPtr<Gtk::Builder> builder;
Glib::ustring id;
Glib::ustring pass;
Gtk::Entry* idbox = 0;
Gtk::Entry* passbox = 0;
void destroy()
{
exit(0);
}
void debug_on_console()
{
printf("successed debug\n") ;
}
void test()
{
if(idbox)
{
id = idbox->get_text();
}
if(passbox)
{
pass = passbox->get_text();
}
if(id == "1234" && pass == "1234")
{
Gtk::MessageDialog dialog(*main_win,"로그인 성공!",false);
dialog.run();
}
else
{
}
}
int
main (int argc, char *argv[])
{
//pair < int , int > ttwa ;
Gtk::Main kit(argc, argv);
//Load the Glade file and instiate its widgets:
try
{
builder = Gtk::Builder::create_from_file(UI_FILE);
}
catch (const Glib::FileError & ex)
{
std::cerr << ex.what() << std::endl;
return 1;
}
builder->get_widget("main_window", main_win);
builder->get_widget("pwbox", passbox);
builder->get_widget("idbox", idbox);
if (main_win)
{
Gtk::Button* btnexit = 0;
Gtk::Button* btnok = 0;
Gtk::Button* btnclose = 0;
builder->get_widget("btnexit", btnexit);
if(btnexit)
{
btnexit->signal_clicked ().connect(sigc::ptr_fun (&destroy));
}
builder->get_widget("btnlogin", btnok);
if(btnok)
{
btnok->signal_clicked ().connect (sigc::ptr_fun(&test));
}
kit.run(*main_win);
}
return 0;
}
void testing()
{
printf("TEST");
}
Glade의 도움을 받아 UI를 작성하고 코드에서 불러오는 형태이다.
위에 나온거처럼 signal_type().connect(sigc::ptr_fun(&함수이름)); 의 형식으로 시그널과 함수를 이어주는 역활을 한다. 근데 이상하게 인자값이 존재하는 함수를 해봤을땐 에러가 나서 어떻게 값을 주고받지...하고 고민하다가 결국 Gtk::Entry와 Glib::ustring(Entry에서 텍스트를 뽑아오는 함수 get_text()의 리턴값이 Glib::ustring 이다)을 전역변수로 사용하는 길을 택했다.
기능은 login버튼을 눌렀을때 맨위 상자에 1234, 두번째 상자에도 1234라는 값이 있으면 다이얼로그를 띄우는 형식이다.
Glade의 도움을 받아 UI를 작성하고 코드에서 불러오는 형태이다.
위에 나온거처럼 signal_type().connect(sigc::ptr_fun(&함수이름)); 의 형식으로 시그널과 함수를 이어주는 역활을 한다. 근데 이상하게 인자값이 존재하는 함수를 해봤을땐 에러가 나서 어떻게 값을 주고받지...하고 고민하다가 결국 Gtk::Entry와 Glib::ustring(Entry에서 텍스트를 뽑아오는 함수 get_text()의 리턴값이 Glib::ustring 이다)을 전역변수로 사용하는 길을 택했다.
기능은 login버튼을 눌렀을때 맨위 상자에 1234, 두번째 상자에도 1234라는 값이 있으면 다이얼로그를 띄우는 형식이다.
'프로그래밍 > Gtk+/binding gtk' 카테고리의 다른 글
본격 Gtk에서 Cairo 사용하기 (0) | 2011.11.15 |
---|---|
gtkmm! Anjuta! (0) | 2011.11.02 |
gtkbuilder의 사용 (0) | 2011.06.09 |
글
virtual class
프로그래밍
2011. 11. 3. 12:57
http://kldp.org/node/2182
http://www.winapi.co.kr/clec/cpp3/29-3-3.htm
c++에서
class A
{
int a;
}
class B : public A
{
int b;
}
class C : public A
{
int c;
}
class D : public B, public C
{
}
가 있다면
class D 안에서 a를 사용하면 어느쪽의 a인지 애매해진다. 또한 컴파일러가 에러를 내뱉는다.
이를
class B : virtual public A
class C : virtual public A
로 해주면 에러가 일어나지 않는다
이를 가상 기반 클래스 라고 부르는듯 하다. 이렇게 지정하면 두번 상속되더라도 한번만 상속을 하게 된다고 한다.
http://www.winapi.co.kr/clec/cpp3/29-3-3.htm
c++에서
class A
{
int a;
}
class B : public A
{
int b;
}
class C : public A
{
int c;
}
class D : public B, public C
{
}
가 있다면
class D 안에서 a를 사용하면 어느쪽의 a인지 애매해진다. 또한 컴파일러가 에러를 내뱉는다.
이를
class B : virtual public A
class C : virtual public A
로 해주면 에러가 일어나지 않는다
이를 가상 기반 클래스 라고 부르는듯 하다. 이렇게 지정하면 두번 상속되더라도 한번만 상속을 하게 된다고 한다.
'프로그래밍' 카테고리의 다른 글
delete 와 new (0) | 2011.11.03 |
---|---|
C++ 생성자와 소멸자 (0) | 2011.11.03 |
C++ 상속 (0) | 2011.11.03 |
프리미티브 타입 (0) | 2011.11.03 |
C언어 키워드 (0) | 2011.11.02 |
글
'프로그래밍' 카테고리의 다른 글
delete 와 new (0) | 2011.11.03 |
---|---|
C++ 생성자와 소멸자 (0) | 2011.11.03 |
virtual class (0) | 2011.11.03 |
프리미티브 타입 (0) | 2011.11.03 |
C언어 키워드 (0) | 2011.11.02 |