1、用GTK开发时,为什么用类时进程回调会提示出错编译通不过?而不用类则不会提示出错?
5 X9 g7 |$ @3 ]4 S
2、运行时,为什么PANGO会提示不能装载中文字体?也不能显示出中文?
; x* B6 M+ Q6 g8 B* R这是编译出错提示:
5 _1 n# o% W4 d+ Ygy.cpp
& @3 w0 B$ Y& d2 R* }gy.cpp: In member function `GtkWidget* GY::csh()':
3 |: V5 i. j6 x1 W4 E" ^gy.cpp:49: error: argument of type `void (GY:

(GtkWidget*, void*)' does not match `void (*)()'
& P0 S1 o/ [/ M' d7 _$ q! t
1.exe - 1 error(s), 1 warning(s)
9 w! N# r! [* a0 m/ j
3 `& G+ _- j# q以下是源程序:
+ \1 [+ U, c/ k5 igy.h
* j# f( I9 C8 V( n#ifndef _GY_H
% H/ H5 g7 Q# v0 g. i# R #define _GY_H
/ b$ Q% i, A$ J/ A3 x. ~
#include <gtk/gtk.h>
7 p( {2 M' P9 h) M
class GY
0 q1 w& y, Q5 h1 ]1 X {
; o$ Q3 C* T7 g& x. ]* b/ m public:
, U# X. f0 L; K5 q GtkWidget *jm;
' [8 U1 o; H3 {: B9 K public:
3 }3 ?. O( T$ p0 `+ {' k1 u GY();
! t2 n5 g: s1 g( z; A8 } ~GY();
& @ Z4 Z" i$ F6 B' S; F
GtkWidget *csh();
, n' R$ k' V0 X% W; G, z- B0 E
void xs();
( C. t+ h3 f2 ?. ? void tc(GtkWidget *kj,gpointer sj);
9 D6 s+ x6 y% s5 a# t" z* c6 \- D
};
- i. R" [/ n, B! u#endif
/ F( i8 o- \( l$ `! A& P' M7 v2 S9 x. I$ {: b+ `( L( L
gy.cpp
' P3 p) ]; c4 L" i9 k
#include "gy.h"
; K3 V8 Q# m) g, z7 V! N2 S S
#include <pango/pango.h>
3 N! X( h& e( b( w5 X
#include <libintl.h>
# Z3 V8 T' N8 x% M3 o
#include <locale.h>
# |! Z/ X' t7 n- D& P1 r( R% s#include <gdk/gdki18n.h>
" J: i% ~: u! m4 t6 `#define PACKAGE "yyb"
, n( _2 ^* ]; e4 {
#define LOCALEDIR "./locale"
7 H7 ?2 i. ? N7 }
#define _(string) gettext(string)
( O( \( M. K( \+ {9 e) n#define N_(string) string
1 r8 Z7 L/ r" e- y! c$ M* c: n% u
extern GY *jm;
' v& N% B5 [5 l0 n. Y+ yGY::GY()
% E/ X; Y# k- E* \$ V0 v( C{
) r& }5 B8 t" G4 z( W! P; G}
" a3 L* X) D0 Y8 TGY::~GY()
0 n1 _6 @& O2 d( |5 w! k d
{
1 U7 ]+ m' `6 S/ P! ?}
& S# E; O5 K7 S( Z# M
void GY::tc(GtkWidget *kj,gpointer sj)
7 F- Z E* N3 J8 V
{
% @; Z" `) m8 ^, {- [4 V" V4 h
}
$ f! W7 [- p7 [& D# m. ~
GtkWidget *GY::csh()
0 B; d! V5 _! _% s2 C2 x: s{
- M- S& N& ^9 y! \' V GtkWidget *xjm;
7 ~" b4 g O. A$ V3 y
GtkWidget *bg;
# Y# n$ F0 o) \4 V; A9 `, P GtkWidget *qd;
, J2 Z+ k3 V* q9 Z/ ?# U6 l/ R
GtkWidget *ts;
{& F# w1 k1 u6 Z& V: _' V! c* Z! d5 B
PangoFontDescription *zt;
3 o" g8 p$ A) _7 f$ ]5 M" o GdkColor hs={0,0xffff,0,0};
1 e, m( q' h3 c4 r" k+ \' C8 I, Q( P
GdkColor ls={0,0,0xffff,0};
8 r+ i c2 M; j5 u
: l% `$ a4 M( P u" _ xjm=gtk_window_new(GTK_WINDOW_TOPLEVEL);
, x) ^/ s* d- r) m& Q- W gtk_window_set_title(GTK_WINDOW(xjm),_("gy"));
) p9 d- U% _# v& }0 R. F" j
bg=gtk_table_new(3,3,TRUE);
3 d. n/ u; ]: X( I; H \
gtk_container_set_border_width(GTK_CONTAINER(bg),10);
V" |: {- q2 Z5 p9 q gtk_table_set_row_spacings(GTK_TABLE(bg),5);
! U E7 z, z. O. e; ~' \
gtk_table_set_col_spacings(GTK_TABLE(bg),5);
1 a% O6 }2 g1 R) }' w# p$ L ts=gtk_label_new(_("csnr"));
/ \" v" O$ G% T0 y gtk_table_attach_defaults(GTK_TABLE(bg),ts,0,1,0,3);
7 {% z) [8 N0 Y/ x+ `
qd=gtk_button_new_with_label(_("qd"));
; ]1 N* |/ R5 J8 U$ p( r
gtk_table_attach_defaults(GTK_TABLE(bg),qd,1,2,2,3);
, H' \9 C7 f7 T* x
gtk_container_add(GTK_CONTAINER(xjm),bg);
- p3 U5 P9 ~2 j
) L; d* o. y' p7 Z: _& x+ m
zt=pango_font_description_from_string("STXINGKA 20");
4 O6 |- U* ]- T6 j2 I9 y- Z ?
gtk_widget_modify_font(ts,zt);
1 l- c7 p* s( B& B, |" M# u, H zt=pango_font_description_from_string("SIMLI 18");
7 i* y$ N1 E6 }" h8 r- {' T6 x c: p2 b
gtk_widget_modify_font(GTK_BIN(qd)->child,zt);
; e; T$ e, D4 N) A, n
gtk_widget_modify_fg(ts,GTK_STATE_NORMAL,&hs);
" }- R% ?5 e) T0 I# \1 p gtk_widget_modify_fg(qd,GTK_STATE_NORMAL,&ls);
2 B u( n) }/ U
gtk_signal_connect(GTK_OBJECT(xjm),"delete_event",GTK_SIGNAL_FUNC(gtk_widget_destroy),NULL);
& ^2 K6 q9 f( [+ ? gtk_signal_connect(GTK_OBJECT(qd),"clicked",GTK_SIGNAL_FUNC(tc),NULL);//就是这句提示出错
& Q$ M/ V' s* t" ^ this->jm=xjm;
* v( y' |$ v, l/ W% B2 T return xjm;
& q5 h4 A4 Z. ~
}
# l6 s7 R2 J Nvoid GY::xs()
2 M; M6 j! |; H{
7 U+ m- |* [& W4 c) k; b; n3 i
jm=csh();
R7 F; t6 I' }; Y5 {1 g
gtk_widget_show_all(jm);
) N- R+ k q% ?6 o
}
7 a `$ E$ ~3 O1 _% c1 {0 k
/ `+ ~4 }" E7 F a, q' R3 V这是主程序:
- }* I8 ?+ E* K7 s
zcx.cpp
* t5 c( B8 [. `! T r#include <gtk/gtk.h>
) D" q& p6 |5 Q/ M3 b; [9 E
#include <pango/pango.h>
. B8 e* p! ^9 q+ _2 ]/ P& C. |: C#include <libintl.h>
! g- d T7 E7 Q" v8 y% s1 ~#include <locale.h>
( E! l8 d5 S6 V4 s A# w4 V9 z#include "dljm.h"
/ b: J, e0 @6 Y/ l/ }1 _#include "gy.h"
+ H9 ]5 e& G& L/ N5 I- `: _* j
#include "zjm.h"
4 u- j G7 l* o: J" H
#include <gdk/gdki18n.h>
% r- b" e: ?) F/ _
#define PACKAGE "yyb"
$ j+ G# X% L, {2 I: x( |5 m) U. R#define LOCALEDIR "./locale"
& o) r( F1 Y4 b' G) |7 g6 G
#define _(string) gettext(string)
5 `* p/ U6 e( D( s5 T5 A0 s. p
#define N_(string) string
) y1 H0 C y) q f+ f' T! m* _3 Z
int main(int cssm,char *cslb[])
: ~+ V" t) i5 P7 i( B$ b{
# Y J9 s+ b9 t3 y) Z& i* C
GY *gy;
. S1 r) J% i- C2 `( w- ~
gtk_set_locale();
- ?$ a4 L$ v/ k: ~ _+ L8 u! g
bindtextdomain(PACKAGE,LOCALEDIR);
- X9 e* ~. l) @0 l' l textdomain(PACKAGE);
' n" z) ?( A; D8 I! ] gtk_init(&cssm,&cslb);
8 M2 t: ]$ b% M. x# J
gy=new GY();
- E, {7 m4 [3 P1 k
gy->xs();*/
% q. B6 b2 Z& X: a
gtk_main();
z6 Z( B( w- l, L
return FALSE;
; z$ x5 O% t8 @% H0 |) K+ Z
}