2009-03-31

Win32++: 在 Dialog 中使用 ListView

资源文件中有:

IDD_MAIN DIALOG 0, 0, 186, 95
...
{
  ...
  CONTROL         "", IDC_LSTMAIN, WC_LISTVIEW, WS_TABSTOP | WS_BORDER | LVS_ALIGNLEFT | LVS_REPORT, 7, 7, 118, 81, WS_EX_LEFTSCROLLBAR
}
另有 Dialog :
class CMainDialog : public CDialog
{
...
private:
    CListView   m_lsvMain;
};
则,在:
BOOL CMainDialog::OnInitDialog()
{
    // 加上下面这行:
    m_lsvMain.AttachDlgItem(IDC_LSTMAIN, this);
    // 用 AttachDlgItem(UINT nID, CWnd* pParent) 将Dialog的控件附加到CListView对象。
    ...

    // 添加列
    m_lsvMain.InsertColumn(0, _T("Column 0"), LVCFMT_LEFT, 60);
    //m_lsvMain.InsertColumn(1, _T("Column 1"), LVCFMT_LEFT, 60);

    // 添加项
    m_lsvMain.InsertItem(0, _T("Item 0"));
    m_lsvMain.InsertItem(1, _T("Item 1"));
    m_lsvMain.InsertItem(2, _T("Item 2"));
    m_lsvMain.InsertItem(3, _T("Item 3"));

}

注:
另外 641 中的 InsertColumn(int iCol, LPCTSTR pszColumnHeading, int iFormat, int iWidth, int iSubItem)InsertItem(int iItem, LPCTSTR pszText) 是有 BUG 的。
将 listview.h 更新到 SVN 里面最新的 749 后正常。

//EOF Read More...

2009-03-29

Win32++ CodeBlocks templates & wizard

Win32++ is a C++ library used to build windows GUI applications.
http://sourceforge.net/projects/win32-framework/
Win32 平台上的一个轻量级的 C++ GUI开发库,可以用在 GCC 编译器中。
document:
http://users.bigpond.net.au/programming/documentation.htm

自己花了点时间做了个简陋的 CodeBlocks 的新建 Win32++ 工程的模板向导。

下载:
http://dl.getdropbox.com/u/163800/libs/cxx/Win32%2B%2B/codeblocks_templ.zip

安装步骤:
1. 解包后将 wizard 下的 win32xx 目录放到 [CodeBlocks]\share\CodeBlocks\templates\wizard\ 去。
(其中 [CodeBlocks] 表示 CodeBlocks 的安装目录)
当然也可以放到用户目录中——具体参照 CodeBlocks 的 Wiki。

2. 在 [CodeBlocks]\share\CodeBlocks\templates\wizard\ 中找到 config.script 文件,用文本编辑器打开,在 function RegisterWizards() { ... } 里面加一行:

RegisterWizard(wizProject, _T("win32xx"), _T("Win32++ Application"), _T("GUI"));

3. 这样新建工程的 GUI 分类里面就有 "Win32++ GUI Application" 的选项了,按向导一步步走就可以了。
(当然,前提是你要将 Win32++ 的库引入哦!——在“编译器选项”->"Search directories"->"Compiler"里面加入)

//EOF Read More...

2009-03-28

SGU

说:"The only mission is survive!"
貌似 SGU 和 Revolution 都是 黑暗风格……
莫非是受到 BSG 的影响么?
//EOF Read More...

访问Windowz的共享

samba,当然是samba了。(好像我还没听说过不基于samba的访问方式。。。)
1.查看共享资源列表:(我这里好像匿名的不成啊!?)
$ smbtree -U username
这里username是对方的“共享用户”。默认(不使用"-U")是使用本机当前登录用户名,但注意密码还是要输入对方机器上该用户名的密码。
2.访问对方共享资源:
$ smbclient -U username //host/dir
这里username同上,"//host/dir"是用smbtree查看到的对方共享资源(光只"//host/"是不成的)。
这个smbclient是个像ftp一样的东西,如果你以前用过控制台下的ftp这个应该很容易上手 :)
(BTW:有人说可以# mount -t smbfs ...的,但我的不行啊,也没有smbmount -_-,其实我个人觉得smbclient也不错,至少我对它不算陌生)
===========================================
# mount -t smbfs ...需要在编译内核的时候加入CONFIG_SMB_FS支持 ---- 07-01-24
# mount -t cifs ... CONFIG_CIFS
//EOF Read More...

2009-03-23

格格来了

小侄女,几个月大,很漂亮,比她母亲漂亮。
今天早上教她吃面条,很可爱 :D

//EOF Read More...

BSG final

final 了,果然神叨叨的了~~。
六号说,让一个复杂系统反复运行很长时间,最终令人惊讶的事情可能会发生。
//EOF Read More...

2009-03-17

instance initializer

虽然用Java一段时间了,不过还是第一次听到 instance initializer (实例初始化块)
以前知道有一个 static initializer (静态初始化块)会在类加载的时候执行。
instance initializer 则是在构造函数执行过程中的某一时刻执行。见代码:


// LoadOrder.java

public class LoadOrder {
private Property _property = new Property();

{ // instance initializer
System.out.println("{ Load Block 1 }");
}

static { // static initializer
System.out.println("{ static 1 }");
}

public LoadOrder() {
System.out.println("LoadOrder()");
_property = new Property(this);
}

{
System.out.println("{ Load Block 2 }");
}

static {
System.out.println("{ static 2 }");
}

public static void main(String[] args) {
System.out.println("==== main() 1 ====");
new LoadOrder();
System.out.println("==== main() 2 ====");
new LoadOrder();
Property referee = new Property();
}
}

class Property {
public Property() {
System.out.println("Property()");
}
public Property(Object owner) {
System.out.println("Property(Object)");
}
}
// EOF

运行结果如下:

{ static 1 }
{ static 2 }
==== main() 1 ====
Property()
{ Load Block 1 }
{ Load Block 2 }
LoadOrder()
Property(Object)
==== main() 2 ====
Property()
{ Load Block 1 }
{ Load Block 2 }
LoadOrder()
Property(Object)
Property()

//EOF Read More...