张晓华的博客

        2005年,最后一场雪,还是下了,虽然凄凉了一些!
posts - 185, comments - 100, trackbacks - 8, articles - 1

Saturday, June 21, 2008

HBRUSH CMyUIDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
     if(   CTLCOLOR_STATIC   ==   nCtlColor   )  
  {
        //pDC->SetBkColor(RGB(255,0,0));  //需要指定背景色的时候用
         pDC->SetTextColor(RGB(255,   255,   255));    //文字前景色
  pDC->SetBkMode(TRANSPARENT);    //设置透明
  hbr=(HBRUSH)GetStockObject(NULL_BRUSH);  //获取画笔颜色混合后的画笔,完成透明
  }  
    return hbr;
}

posted @ 3:08 PM | Feedback (0)

CString szFilename ("c:\\temp\\1678391_6878.bmp");
 
CDC   *dc   =   GetDC();  
CDC bmDC;
 HBITMAP hBmp = (HBITMAP)::LoadImage(NULL,szFilename,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
 CBitmap bmp;
 bmp.Attach(hBmp);
bmDC.CreateCompatibleDC(dc);
CBitmap *pOldbmp=bmDC.SelectObject(&bmp);
BITMAP bi;
bmp.GetBitmap(&bi);
dc->BitBlt(0,0,bi.bmWidth,bi.bmHeight,&bmDC,0,0,SRCCOPY);
bmDC.SelectObject(pOldbmp);

posted @ 1:06 PM | Feedback (0)

1:使用VS2005制作一个Setup wizard的项目进行打包成CAB文件
2:进入Visual Studio 2005 Command Prompt界面
3:使用makecert 创建证书文件
    makecert -sk password -ss 张晓华的证书  -n CN="MFC 测试" -m 12 anson.cer
        -sk 表示私人密钥
        -ss 表示描述
        -n CN="" 这里面是公司名称
        -m 有效月数
        anson.cer 输出的证书名
4 用cert2spc.exe建立出版商的说明文件
        cert2spc anson.cer anson.spc
5:输入密码并看到 Succeeded 后,目录下将生成两个文件:my.pvk和qqq.cer
5:现在用这两个文件来签名
    然后使用生成的认证文件进行签名:
    键入signtool signwizard 使用向导来签名
首先选择你要签名的控件( ocx或dll )
点击下一步后选择自定义签名,
点击下一步后从文件选择证书,文件类型选择*.cer,找到qqq.cer
再下一步是选择私钥文件,浏览并选择my.PVK,输入你makecert时输入过的密码
接下来的一堆对话框里,你只要点下一步,把数据描述里的内容填写好,可以使用
  下面的URL盖时间戳http://timestamp.verisign.com/scripts/timstamp.dll,
  点击完成就完成数字签名了
6:这样就完成打包发布了

posted @ 11:50 AM | Feedback (1)

1、使用向导生成ActiveX Project
2、添加自己的方法和消息影射到 XXXXCtrl.h文件中,结构是
        DECLARE_DISPATCH_MAP()
                 afx_msg void AboutBox();
                 afx_msg void MyMethod();
               ... ...
         public:
                 enum { DISPID_MyMethod   =  1 ,DISPID_MyMess   =  2 };
         (AboutBox的映射不需要加)

3、在对应的.cpp文件(例如 XXXXCtrl.cpp)中实现自己的方法
      void XXXXCtrl::AboutBox()
    {   CDialog dlgAbout(IDD_ABOUTBOX_MYSAMPLEACTIVEX);
    dlgAbout.DoModal();}

    void XXXXCtrl::MyMethod()
    {   ::MessageBox(NULL,_T("My Message"),_T("MyEdit"),NULL);}
4、 在 XXXXCtrl.cpp文件中添加方法转发
BEGIN_DISPATCH_MAP(CMySampleActiveXCtrl, COleControl)
    DISP_FUNCTION_ID(CMySampleActiveXCtrl, "AboutBox", DISPID_ABOUTBOX, AboutBox, VT_EMPTY, VTS_NONE)
    DISP_FUNCTION_ID(CMySampleActiveXCtrl, "MyMethod", DISPID_MyMethod, MyMethod, VT_EMPTY, VTS_NONE)
END_DISPATCH_MAP()

5、在idl文件中添加声明
enum    {   DISPID_MyMethod   =  1 ,DISPID_MyMess   =  2  };
        ...  ...
        dispinterface _DMySampleActiveX
    {
        properties:
        methods:
            [id(DISPID_ABOUTBOX)] void AboutBox();
            [id(DISPID_MyMethod)] void MyMethod();
        ...  ...
    };
        ...  ...
(注意,在这个文件头上需要重新添加一次 消息影射的ID定义,原因不明....)
6、完成以上工作后,进行编译,如果出错,需要一步步调试,编译成功后方可继续
7、使用 ActiveX Control Test Container加载控件进行测试
8、发布控件

posted @ 11:08 AM | Feedback (0)