Mail模組雜記2.doc

博客展示了邮件客户端相关代码,包括获取图标、设置列表样式、定义命令结构体(如上传文件命令)、使用命令发送消息,还涉及改变标签底色、移动自定义窗口以及设置透明区域等操作,为邮件客户端开发提供了代码参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

l           获得hicon

        m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON3);

l           ExStyle的获得

                DWORD dwExStyle = LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | /*LVS_EX_SUBITEMIMAGES |*/

                m_List1.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);   

Extended List-View Styles

l           标准的list初始

static const struct

                {

                        UINT nColHdrId;

                        int  nFormat;

                        int  nWidth;

                } colData[] = {{IDS_NULL,   LVCFMT_LEFT,   30},

                {IDS_NULL,       LVCFMT_LEFT,   30},

                {IDS_NULL,       LVCFMT_LEFT,   30},

                {IDS_LOG_COLUMN_MAIL_SENDER,        LVCFMT_LEFT,   100},

                {IDS_LOG_COLUMN_MAIL_RECEIVE_TIME,      LVCFMT_LEFT, 170},       

                {IDS_LOG_COLUMN_MAIL_TITLE,    LVCFMT_LEFT,   180}};

               

                const int nColCount = sizeof colData / sizeof colData[0];

               

                for (int nColumn = 3; nColumn < nColCount; nColumn++)

                {

                        strColumn.LoadString(colData[nColumn].nColHdrId);

                        m_lcLogListCtrl.InsertColumn(nColumn, strColumn, colData[nColumn].nFormat,

                                colData[nColumn].nWidth);

//                      if (nColumn > 0) m_lcLogListCtrl.EnableColumnHiding(nColumn, true);

                }

l           命令的定义

///////////////////////////////////////////////////////////////////////////////

//

//      Head of all commands

//

///////////////////////////////////////////////////////////////////////////////

#define DIR_CMD_BASE                                                    0x00000000

typedef struct _tag_CMD_HEAD

{

        DWORD    dwCmd;                                                            // command type

        int             nBufSize;                                                  // command buffer size

        BYTE       pBuf[0];                                                     // command buffer

 

        _tag_CMD_HEAD()

        {

                ZeroMemory(this, sizeof(_tag_CMD_HEAD));

        };

}

CMD_HEAD, *PCMD_HEAD;

 

 

///////////////////////////////////////////////////////////////////////////////

// This Message is From MAIL Client To Dir-Server :

//  Upload A Attach File:

///////////////////////////////////////////////////////////////////////////////

#define CMD_MAIL_CLT_UPLOAD_FILE_REQ                            DIR_CMD_BASE+4019

typedef struct _tag_Cmd_Mail_Clt_Upload_File_Req

{

//      char  szUser[M_ACCOUNT_SIZE];

//      CHAR       szAttachFile[MAX_LENGTH_ATTACH_FILE_PATH];

        _tag_Cmd_Mail_Clt_Upload_File_Req()

        {

                ZeroMemory(this, sizeof(_tag_Cmd_Mail_Clt_Upload_File_Req));

        };

 

}

Cmd_Mail_Clt_Upload_File_Req, *PCmd_Mail_Clt_Upload_File_Req;

 

#define CMD_MAIL_CLT_UPLOAD_FILE_RET                             DIR_CMD_BASE+4020

typedef struct _tag_Cmd_Mail_Clt_Upload_File_Ret

{

        CHAR       szUser[M_ACCOUNT_SIZE];

 

}

Cmd_Mail_Clt_Upload_File_Ret, *PCmd_Mail_Clt_Upload_File_Ret;

使用

                        Cmd_Mail_Update_Req strTemp;

                        strTemp.dwCltExistedMails=12345;

                        PCMD_HEAD pHead = (PCMD_HEAD)new BYTE[sizeof(CMD_HEAD)+sizeof(Cmd_Mail_Update_Req)];

                        memset(pHead, 0, sizeof(CMD_HEAD)+sizeof(Cmd_Mail_Update_Req));

                        pHead->dwCmd = CMD_MAIL_UPDATE_REQ;

                        pHead->nBufSize = sizeof(CMD_HEAD)+ sizeof(Cmd_Mail_Update_Req);

                        memcpy(pHead->pBuf, &strTemp, sizeof(Cmd_Mail_Update_Req));

                        TRACE("[CltMail]-----Ready to Send CMD_MAIL_UPDATE_REQ!");

                        if (FALSE==m_pTransClt->SendToServer(pHead, pHead->nBufSize)) {

                        TRACE("[CltMail]-----Send CMD_MAIL_UPDATE_REQ Failed!");

                        }

                        else TRACE("[CltMail]-----Send CMD_MAIL_UPDATE_REQ Success!");

                               

 

l           Clable可以改变标签底色

        m_staticReNewPwd.SetTextColor(RGB(0, 0, 0)).SetTransparent(TRUE);

        m_staticOldPwd.SetTextColor(RGB(0, 0, 0)).SetTransparent(TRUE);

        m_staticNewPwd.SetTextColor(RGB(0, 0, 0)).SetTransparent(TRUE);

 

        CAdvancedButton              m_btnClose;

        CAdvancedButton              m_btnQuit;

        CAdvancedButton              m_btnDownLoadFile;

        CAdvancedButton              m_btnUploadFile;

        CAdvancedButton              m_btnAddContact;

        CAdvancedButton              m_btnSendMail;

l           移动自己定义的窗口

 

void MailListDlg::OnMouseMove(UINT nFlags, CPoint point)

{

        if(nFlags & MK_LBUTTON)

        {

                SendMessage(WM_SYSCOMMAND,SC_MOVE | HTCLIENT,0);

        }

       

        CDialog::OnMouseMove(nFlags, point);

}

l           设置透明区域

 

//Paint the Common Control

    CRect rect(0,0,0,0);

        GetWindowRect(&rect);

 

        m_hRgn = CreateWndRgn(rect.Width(),rect.Height());

        SetWindowRgn(m_hRgn,TRUE);

        SetWindowPos(NULL,rect.left,rect.top,rect.Width(),rect.Height(),SW_SHOW);

        m_BtnClose.Create(rect.Width() - 27,

                4,

                m_pbitmap,

                CRect(DLG_BTN_CLOSE_TL_X,DLG_BTN_CLOSE_TL_Y,DLG_BTN_CLOSE_BR_X-1,DLG_BTN_CLOSE_BR_Y),

                IDCANCEL,

                this);

 

 

HRGN CreateWndRgn(int nWidth,int nHeight);

{

HRGN hRgnElliptic = NULL;

        HRGN hRgnRect_A = NULL;

        HRGN hRgnRect_B = NULL;

 

        RECT rectElliptic;

        RECT rectRect_A;

        RECT rectRect_B;

 

        rectElliptic.left = 0;

        rectElliptic.top = 0;

        rectElliptic.right = 2*ELLIPTIC_R;

        rectElliptic.bottom = 2*ELLIPTIC_R;

 

        rectRect_A.left = 0;

        rectRect_A.top = ELLIPTIC_R;

        rectRect_A.right = nWidth;

        rectRect_A.bottom = nHeight - ELLIPTIC_R;

 

        rectRect_B.left = ELLIPTIC_R;

        rectRect_B.top = 0;

        rectRect_B.right = nWidth - ELLIPTIC_R;

        rectRect_B.bottom = nHeight;

 

        hRgnElliptic = CreateEllipticRgnIndirect(&rectElliptic);

        hRgnRect_A = CreateRectRgnIndirect(&rectRect_A);

        hRgnRect_B = CreateRectRgnIndirect(&rectRect_B);

 

        CombineRgn(hRgnRect_A,hRgnRect_A,hRgnElliptic,RGN_OR);

 

        OffsetRgn(hRgnElliptic,nWidth - 2*ELLIPTIC_R + 1,0);

        CombineRgn(hRgnRect_A,hRgnRect_A,hRgnElliptic,RGN_OR);

 

        OffsetRgn(hRgnElliptic,0,nHeight - 2*ELLIPTIC_R + 1);

        CombineRgn(hRgnRect_A,hRgnRect_A,hRgnElliptic,RGN_OR);

 

        OffsetRgn(hRgnElliptic,-(nWidth - 2*ELLIPTIC_R + 1),0);

        CombineRgn(hRgnRect_A,hRgnRect_A,hRgnElliptic,RGN_OR);

 

        CombineRgn(hRgnRect_A,hRgnRect_A,hRgnRect_B,RGN_OR);

        DeleteObject(hRgnRect_B);

        DeleteObject(hRgnElliptic);

        return hRgnRect_A;

}

void MailListDlg::OnPaint()

{

        CPaintDC dc(this); // device context for painting

        CRect rect(0,0,0,0);

        GetWindowRect(&rect);

        ScreenToClient(&rect);

        dc.FillRect(&rect,m_pEditBkBrush);

       

        CDC                        memDC;

        memDC.CreateCompatibleDC(&dc);

        CBitmap           *oldBitmap       = NULL;

        oldBitmap = (CBitmap *) memDC.SelectObject(m_pDialogBitmap);

//      int i,j/*,nTopTimes*/;

 

        CString m_strTitle;

        m_strTitle.LoadString(IDS_STRING_TITLE_MAIL_LIST_DIALOG);

 

        dc.BitBlt(0,0,DLG_SIDE_WIDTH,DLG_SYSBAR_HEIGHT,&memDC,1,1,SRCCOPY);//Draw the left corner

        dc.BitBlt(rect.Width()-DLG_SIDE_WIDTH,0,DLG_SIDE_WIDTH,DLG_SYSBAR_HEIGHT,&memDC,BMP_RIGHT_SIDE-DLG_SIDE_WIDTH,1,SRCCOPY);//Draw the right corner

        dc.StretchBlt(DLG_SIDE_WIDTH,0,rect.Width()-DLG_SIDE_WIDTH*2,DLG_SYSBAR_HEIGHT,&memDC,DLG_SIDE_WIDTH+1,1,DLG_SIDE_WIDTH,DLG_SYSBAR_HEIGHT,SRCCOPY);//Stretch the center

 

        //Draw the bottom side

        dc.BitBlt(0,rect.Height()-DLG_BOTTOM_HEIGHT,DLG_SIDE_WIDTH,DLG_BOTTOM_HEIGHT,&memDC,1,BMP_BOTTOM_SIDE-DLG_BOTTOM_HEIGHT,SRCCOPY);//Draw the left corner

        dc.BitBlt(rect.Width()-DLG_SIDE_WIDTH,rect.Height()-DLG_BOTTOM_HEIGHT,DLG_SIDE_WIDTH,DLG_BOTTOM_HEIGHT,&memDC,BMP_RIGHT_SIDE-DLG_SIDE_WIDTH,BMP_BOTTOM_SIDE-DLG_BOTTOM_HEIGHT,SRCCOPY);//Draw the right corner

        dc.StretchBlt(DLG_SIDE_WIDTH,rect.Height()-DLG_BOTTOM_HEIGHT,rect.Width()-DLG_SIDE_WIDTH*2,DLG_BOTTOM_HEIGHT,&memDC,DLG_SIDE_WIDTH+1,BMP_BOTTOM_SIDE-DLG_BOTTOM_HEIGHT,DLG_SIDE_WIDTH,DLG_BOTTOM_HEIGHT,SRCCOPY);//Stretch the center

 

        //Draw the left side

        dc.StretchBlt(0,DLG_SYSBAR_HEIGHT,DLG_SIDE_WIDTH,rect.Height()-DLG_BOTTOM_HEIGHT-DLG_SYSBAR_HEIGHT,&memDC,1,25,DLG_SIDE_WIDTH,5,SRCCOPY);

 

        //Draw the right side

        dc.StretchBlt(rect.Width()-DLG_SIDE_WIDTH,DLG_SYSBAR_HEIGHT,DLG_SIDE_WIDTH,rect.Height()-DLG_BOTTOM_HEIGHT-DLG_SYSBAR_HEIGHT,&memDC,BMP_RIGHT_SIDE-DLG_SIDE_WIDTH,DLG_SYSBAR_HEIGHT+2,DLG_SIDE_WIDTH,DLG_BOTTOM_HEIGHT,SRCCOPY);

 

        //Draw the center

        dc.StretchBlt(DLG_SIDE_WIDTH,DLG_SYSBAR_HEIGHT,rect.Width()-DLG_SIDE_WIDTH*2,rect.Height()-DLG_BOTTOM_HEIGHT-DLG_SYSBAR_HEIGHT,&memDC,30,30,1,1,SRCCOPY);

       

        dc.SelectObject(oldBitmap);

 

        if(!m_strTitle.IsEmpty())

        {

                CSize size;

                size = dc.GetTextExtent(m_strTitle);

 

                CFont* oldfont = dc.SelectObject(&m_Font);

                       

                dc.SetBkMode(TRANSPARENT);

 

                COLORREF OldColor = dc.SetTextColor(DLG_TITLE_COLOR_TOP);//::GetSysColor( COLOR_3DSHADOW));

                OldColor = dc.SetTextColor(DLG_TITLE_COLOR_TOP);

                CRect rcTopTitle(TITLE_TEXT_LEFT+ 1,TITLE_TEXT_TOP,size.cx + TITLE_TEXT_LEFT + 1,(TITLE_TEXT_TOP + size.cy));

                dc.DrawText(m_strTitle,&rcTopTitle,DT_LEFT|DT_VCENTER|DT_SINGLELINE);

       

                dc.SetTextColor( OldColor);

                dc.SelectObject(oldfont);

               

        }     

 

}

BOOL WriteMailDlg::InitReadDialog()

{

       

        m_strTitle.LoadString(IDS_STRING_TITLE_READMAIL_DIALOG);

        CRect rect(0,0,0,0);

        GetWindowRect(&rect);

        m_hRgn = CreateWndRgn(rect.Width(),rect.Height());

        SetWindowRgn(m_hRgn,TRUE);

        SetWindowPos(NULL,rect.left,rect.top,rect.Width(),rect.Height(),SW_SHOW);

//add the buttons

    m_BtnClose.Create(rect.Width() - 27,

                4,

                m_pbitmap,

                CRect(DLG_BTN_CLOSE_TL_X,DLG_BTN_CLOSE_TL_Y,DLG_BTN_CLOSE_BR_X-1,DLG_BTN_CLOSE_BR_Y),

                IDCANCEL,

                this);

        m_BtnDownLoadFile.Create(383,

                80,

                m_pbitmap,

                CRect(0,109,285,125),

                IDC_CMD_DOWN_FILE,

               this);

        m_BtnQuit.Create( rect.Width()-79,

                rect.Height()-38,

                m_pbitmap,

                CRect(0,188,241,211),

                IDCANCEL,

                this);

        m_BtnReply.Create( rect.Width()-79-60/*Withe*/-10/*Magin*/,

                rect.Height()-38,

                m_pbitmap,

                CRect(0,213,241,236),

                IDC_BUTTON_REPLY,

                this);

//Set the Static Lable

        m_labTitle.SetTextColor(RGB(0, 0, 0)).SetTransparent(TRUE);

        m_labDetail.SetTextColor(RGB(0, 0, 0)).SetTransparent(TRUE);

        m_labTo.SetTextColor(RGB(0, 0, 0)).SetTransparent(TRUE);

        CString str;

        str.LoadString(IDS_STRING_LIST_HEAD_FROM);

        m_labTo.SetText(str);

        m_labAttachFile.SetTextColor(RGB(0, 0, 0)).SetTransparent(TRUE);

//Set the Edit Contrl

        m_edtTo.ShowWindow(FALSE);

        m_edtFrom.ShowWindow(TRUE);

 

        return TRUE;

 

}



 

 

资源下载链接为: https://pan.quark.cn/s/d9ef5828b597 在本文中,我们将探讨如何通过 Vue.js 实现一个带有动画效果的“回到顶部”功能。Vue.js 是一款用于构建用户界面的流行 JavaScript 框架,其组件化和响应式设计让实现这种交互功能变得十分便捷。 首先,我们来分析 HTML 代码。在这个示例中,存在一个 ID 为 back-to-top 的 div 元素,其中包含两个 span 标签,分别显示“回到”和“顶部”文字。该 div 元素绑定了 Vue.js 的 @click 事件处理器 backToTop,用于处理点击事件,同时还绑定了 v-show 指令来控制按钮的显示与隐藏。v-cloak 指令的作用是在 Vue 实例渲染完成之前隐藏该元素,避免出现闪烁现象。 CSS 部分(backTop.css)主要负责样式设计。它首先清除了一些默认的边距和填充,对 html 和 body 进行了全屏布局,并设置了相对定位。.back-to-top 类则定义了“回到顶部”按钮的样式,包括其位置、圆角、阴影、填充以及悬停时背景颜色的变化。此外,与 v-cloak 相关的 CSS 确保在 Vue 实例加载过程中隐藏该元素。每个 .page 类代表一个页面,每个页面的高度设置为 400px,用于模拟多页面的滚动效果。 接下来是 JavaScript 部分(backTop.js)。在这里,我们创建了一个 Vue 实例。实例的 el 属性指定 Vue 将挂载到的 DOM 元素(#back-to-top)。data 对象中包含三个属性:backTopShow 用于控制按钮的显示状态;backTopAllow 用于防止用户快速连续点击;backSeconds 定义了回到顶部所需的时间;showPx 则规定了滚动多少像素后显示“回到顶部”按钮。 在 V
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值