旌旗博客

2007-01-31

WordPress 系统的问题

Filed under: I.T. — 标签: — rocky @ 21:52

1. 升级到2.1之后,发现WYSIWYG编辑器有点问题,段落前的空格总是没有
2. 用windows live writer不能发布嵌入的图片

2007-01-26

OwnerDraw HeaderCtrl

Filed under: I.T. — 标签: — rocky @ 12:32

code.screen, div.codescreen{
font-family: monospace;
font-size: 1em;
display: block;
padding: 10px;
border: 1px solid #bbb;
background-color: #eee;
color: #000;
overflow: auto;
border-radius: 2.5px;
-moz-border-radius: 2.5px;
margin: 0.5em 2em;
}

Although many people don’t like MFC, sometimes we have to use it. This article presents a sample to describe how to implement height adjustment and owner drawing for HeaderControl of ListControl. 

 

 

 

  Header file:

 

class CSkinManager;
class COwnerDrawHeaderCtrl : public CHeaderCtrl
{
public:
    COwnerDrawHeaderCtrl();

protected:
    virtual void DrawItem(LPDRAWITEMSTRUCT);

protected:
    //{{AFX_MSG(COwnerDrawHeaderCtrl)
    afx_msg LRESULT OnLayout(WPARAM wParam, LPARAM lParam);
    afx_msg void OnPaint();
    afx_msg BOOL OnEraseBkgnd(CDC* pDC);
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()

private:
    CSkinManager &m_skinManager;
};
 
Source file:
COwnerDrawHeaderCtrl::COwnerDrawHeaderCtrl()
    :m_skinManager(CPootaoClientService::Instance().GetSkinManager())
{
};

BEGIN_MESSAGE_MAP(COwnerDrawHeaderCtrl, CHeaderCtrl)
    //{{AFX_MSG_MAP(COwnerDrawHeaderCtrl)
    ON_MESSAGE(HDM_LAYOUT, OnLayout)
    ON_WM_PAINT()
    ON_WM_ERASEBKGND()
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

LRESULT COwnerDrawHeaderCtrl::OnLayout( WPARAM wParam, LPARAM lParam )
{
    HDLAYOUT* pLayout = ( HDLAYOUT* ) lParam; // cast the lParam

    pLayout->pwpos->hwnd = GetSafeHwnd (); // populate WINDOWPOS struct
    pLayout->pwpos->hwndInsertAfter = HWND_TOP;
    pLayout->pwpos->flags = SWP_NOACTIVATE | SWP_NOZORDER | SWP_FRAMECHANGED;

    int nHdrBottom = m_skinManager.m_sizeHeaderBackground.cy;

    pLayout->pwpos->x = pLayout->prc->left;
    pLayout->pwpos->y = 0;
    pLayout->pwpos->cx = pLayout->prc->right - pLayout->prc->left;
    pLayout->pwpos->cy = nHdrBottom;

    pLayout->prc->top = nHdrBottom;

    return TRUE;
}

void COwnerDrawHeaderCtrl::DrawItem(LPDRAWITEMSTRUCT)
{
}

BOOL COwnerDrawHeaderCtrl::OnEraseBkgnd(CDC* pDC)
{

    return FALSE;
}

void COwnerDrawHeaderCtrl::OnPaint()
{
    CPaintDC dc(this);

    HDC dcMem = dc.m_hDC;

    CRect rectWindow;
    GetClientRect(&rectWindow);

    HFONT hOldFont = (HFONT)SelectObject(dcMem, GetStockObject(DEFAULT_GUI_FONT));

    ::SetBkColor(dcMem, GetSysColor(COLOR_WINDOW));
    SetBkMode(dcMem, TRANSPARENT);

    //draw the contents to a memory device context
    HDC dcMemBk = ::CreateCompatibleDC(dc.m_hDC);
    HBITMAP hOldBitmapBk = (HBITMAP)SelectObject(dcMemBk, m_skinManager.m_hBmpHeaderBackground);

    int rightMost = 0;
    for (int i=0; i<GetItemCount(); i++)
    {
        HDITEM hdi;
        TCHAR  lpBuffer[256];

        hdi.mask = HDI_TEXT | HDI_FORMAT | HDI_IMAGE | HDI_ORDER;
        hdi.pszText = lpBuffer;
        hdi.cchTextMax = 256;

        GetItem(i, &hdi);

        CRect rcItem;
        GetItemRect(i, &rcItem);

        SelectObject(dcMemBk, m_skinManager.m_hBmpHeaderSep);
        BitBlt(dcMem
            , rcItem.left, rcItem.top
            , m_skinManager.m_sizeHeaderSep.cx, m_skinManager.m_sizeHeaderSep.cy
            , dcMemBk, 0, 0, SRCCOPY);

        SelectObject(dcMemBk, m_skinManager.m_hBmpHeaderBackground);
        StretchBlt(dcMem
            , rcItem.left + 1, rcItem.top
            , rcItem.Width()-1, rcItem.Height()
            , dcMemBk
            , 0, 0, m_skinManager.m_sizeHeaderBackground.cx, m_skinManager.m_sizeHeaderBackground.cy
            , SRCCOPY);

        SelectObject(dcMemBk, m_skinManager.m_hBmpHeaderSep);
        BitBlt(dcMem
            , rcItem.right, rcItem.top
            , m_skinManager.m_sizeHeaderSep.cx, m_skinManager.m_sizeHeaderSep.cy
            , dcMemBk, 0, 0, SRCCOPY);

        rightMost = max(rightMost, rcItem.right);

        DRAWITEMSTRUCT DrawItemStruct;
        GetItemRect(i, &rcItem);

        DrawItemStruct.CtlType        = 100;
        DrawItemStruct.hDC        = dc.GetSafeHdc();
        DrawItemStruct.itemAction    = ODA_DRAWENTIRE;
        DrawItemStruct.hwndItem     = GetSafeHwnd();
        DrawItemStruct.rcItem    = rcItem;
        DrawItemStruct.itemID    = i;
        DrawItem(&DrawItemStruct);

        // Draw the items text using the text color.
        COLORREF crOldColor = ::SetTextColor(dcMem,
            RGB(0x4f,0x4f,0x4f));
        SetBkMode(dcMem, TRANSPARENT);

        UINT uFormat = DT_SINGLELINE|DT_VCENTER|DT_NOPREFIX|DT_END_ELLIPSIS;
        if( hdi.fmt & HDF_CENTER)
            uFormat |= DT_CENTER;
        else if( hdi.fmt & HDF_RIGHT)
            uFormat |= DT_RIGHT;
        else
            uFormat |= DT_LEFT;

        CRect rectText(rcItem);
        CPoint ptImage(0, 0);

        CImageList *imageList = NULL;
        if (hdi.fmt & HDF_IMAGE && (imageList = GetImageList()) != NULL)
        {
            IMAGEINFO imageInfo;
            if (imageList->GetImageInfo(hdi.iImage, &imageInfo))
            {
                if (!(hdi.fmt & HDF_BITMAP_ON_RIGHT))
                {
                    ptImage = rcItem.TopLeft();
                    ptImage.x += 4;
                    ptImage.y = rcItem.top + (rcItem.Height()-(imageInfo.rcImage.bottom-imageInfo.rcImage.top))/2;

                    imageList->Draw(&dc, hdi.iImage, ptImage, ILD_TRANSPARENT);

                    rectText.left += imageInfo.rcImage.right-imageInfo.rcImage.left+4;
                }
                else
                {
                    rectText.right -= imageInfo.rcImage.right-imageInfo.rcImage.left+4;
                }
            }

            ::SetTextColor(dcMem, RGB(0x00,0x00,0x00));
        }

        rectText.DeflateRect(4, 2, 4, 2);
        int nTextSize = ::DrawText(dcMem, lpBuffer, lstrlen(lpBuffer), &rectText, uFormat);
        ::SetTextColor(dcMem, crOldColor);

        if (hdi.fmt & HDF_IMAGE && imageList != NULL)
        {
            IMAGEINFO imageInfo;
            if (hdi.fmt & HDF_BITMAP_ON_RIGHT
                && imageList->GetImageInfo(hdi.iImage, &imageInfo))
            {
                CSize sizeText;
                GetTextExtentPoint(dcMem, lpBuffer, lstrlen(lpBuffer), &sizeText);
                ptImage = CPoint(min(rectText.right + sizeText.cx + 16, rcItem.left + rcItem.Width()-(imageInfo.rcImage.right-imageInfo.rcImage.left)-4)
                    , (rcItem.Height()-(imageInfo.rcImage.bottom-imageInfo.rcImage.top))/2);

                imageList->Draw(&dc, hdi.iImage, ptImage, ILD_TRANSPARENT);
            }
        }
    }

    SelectObject(dcMemBk, m_skinManager.m_hBmpHeaderBackground);
    StretchBlt(dcMem
        , rightMost+1, 0
        , rectWindow.Width()-rightMost-1, rectWindow.Height()
        , dcMemBk
        , 0, 0, m_skinManager.m_sizeHeaderBackground.cx, m_skinManager.m_sizeHeaderBackground.cy
        , SRCCOPY);

    SelectObject(dcMemBk, hOldBitmapBk);
    DeleteDC(dcMemBk);
}

春运帝国 – 胡戈

Filed under: Life — rocky @ 11:08

一年一度的人类最大迁徙活动又开始啦!

我们就是铁道游击队!

再来欣赏一下:春运帝国 – 胡戈

"Add Hardware" on Redhat Linux

Filed under: I.T. — 标签: — rocky @ 11:03

During redhat is booting, system will detect new hardwares automatically. If you choose “Keep configuration” or  “Do nothing”, system may not run correctly. Don’t regret, run “/usr/sbin/kudzu” under terminal, new hardwares and removed hardwares will be detected again, then you will have another chance to make a better decision.

2007-01-25

倒霉熊系列之《I love picnic》

Filed under: Life — rocky @ 10:43

倒霉熊系列之I love sky

Filed under: Life — rocky @ 10:18

2007-01-24

焦叶泰餐厅

Filed under: Life — rocky @ 09:41

       昨晚给大黄同学庆生,fb地点为中关村广场金融中心的焦叶泰餐厅,在鼎好的西南。吃得还好,关键是氛围很不错,有好几个长得很原汁原味的泰国人拿着饭勺当麦克风唱歌跳舞,蛮好听的。有个女的问我们are you chinese,难道我们长得不像?她说她是Philippine。呵呵,让我这个思想不正的人想到菲佣了,实在不好意思了。

2007-01-23

陶喆/蔡依林 – 今天你要嫁给我

Filed under: Life — 标签: — rocky @ 16:14

2007-01-22

windows环境中的linux环境 —— cygwin

Filed under: I.T. — 标签:, — rocky @ 13:52

第一次接触cygwin(http://cygwin.com/)已经是5年前了。windows的优点就是:傻瓜式,在windows下拥有一个linux环境还是很酷的。譬如查找文件内容,习惯了用grep的会很讨厌用windows的explorer自带的搜索功能,太弱智了,而且bug不老少的,记得有次我好心好意地写邮件给M$说明bug情况,他们居然回邮件啥都不说就问我要客户号,晕啊,扯远了……

cygwin提供了一个叫做cygwin1.dll的dll,这个dll提供了linux API模拟层。很多linux上常用的工具都能基于cygwin上运行,譬如make、gcc等等,甚至gnome。

远程linux上运行一些程序譬如oracle的安装程序需要图形界面时,用cygwin就能轻松搞定。

先在本地启动X服务器:
$ XWin.exe -ac -multiwindow &
再在远程linux上设置环境变量:
$ export DISPLAY=:0.0
之后就可在远程linux上运行程序,在本地的窗口中操作程序的图形界面了。

如果想操作远程linux的桌面:
本地运行:
$ XWin.exe -ac &
再远程linux上设置好DISPLAY之后,运行
$ gnome-wm & # 这是窗口管理器
$ gnome-panel & # 这是gnome的任务条之类的管理程序

2007-01-16

制作RHEL 4 update 4的DVD安装盘

Filed under: I.T. — 标签: — rocky @ 12:26

现在已经是DVD时代了,带着5张安装盘,安装的时候还得换来换去的觉得太麻烦,于是考虑做个DVD的安装盘。网上的资料都是说的在linux下做的,有点麻烦。在这儿记录一下如何在windows做:

1. 准备数据目录:
mkdir DVD

2. 用daemon-tools虚拟光驱mount上4个iso文件(我现在用的v4.03最多只能虚拟出4个光驱)。从第5张到第2张分别对应l、m、n和o盘。运行命令:
rsync -aurv /cygdrive/{l,m,n,o}/* DVD/
再在l盘mount第1张盘之后运行命令:
rsync -aurv /cygdrive/l/* DVD/

3. 将第一张盘中的.discinfo文件拷到DVD目录下,并将第4行修改为:
1,2,3,4,5

4. 用magicISO新建一个iso,从DVD\isolinux\isolinux.bin文件生成启动信息,把DVD目录下所有文件加进来。然后存盘。

Older Posts »

Powered by WordPress