1. 程式人生 > >CButton 重繪(支援PNG圖片作為背景)

CButton 重繪(支援PNG圖片作為背景)

按鈕重繪支援PNG圖片作為背景很使用。可以實現按鈕一種背景圖片,然後滑鼠點選按鈕,增加一個透明的png邊框,也可以修改以下實現滑鼠停留在某個按鈕上面,改變按鈕的狀態。

#if !defined(AFX_PICBUTTON_H__4A8AEB90_4455_44B5_B4BE_20B5B77453E1__INCLUDED_)
#define AFX_PICBUTTON_H__4A8AEB90_4455_44B5_B4BE_20B5B77453E1__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// PicButton.h : header file
// #define ALIGN_HORZ 0 #define ALIGN_VERT 1 ///////////////////////////////////////////////////////////////////////////// // CPicButton window class CPicButton : public CButton { // Construction public: CPicButton(); // Attributes public: // Operations public: void SetTextColor(COLORREF color) { m_TextColor=color; } void SetBkColor(COLORREF color) { m_BackColor=color; } void
SetFocusColor(COLORREF color) { m_FocusColor=color; } void SetBitmapEx(LPCTSTR lpszFile); void SetBitmapEx(UINT nBitmapID); void SetBorder(UINT nSet){m_nBorder=nSet;} void SetTextAlign(UINT nSet){m_nTextAlign=nSet;} void SetIconAlign(UINT nSet){m_nIconAlign=nSet;} void SetBackBmp(LPCTSTR lpszFile); void
SetBackBmp(UINT nNormalID); void SetBitmap(UINT nNormalID,UINT nDisableID=0); void SetBitmap(LPCTSTR lpszNormal,LPCTSTR lpszDisabled=NULL); void SetCheck(int nCheck, BOOL bRepaint = TRUE); void SetStatic(BOOL bSet){m_bStatic=bSet;} int GetCheck(); void DeleteObject(); // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CPicButton) public: virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct); protected: virtual void PreSubclassWindow(); //}}AFX_VIRTUAL // Implementation public: virtual ~CPicButton(); // Generated message map functions protected: //{{AFX_MSG(CPicButton) afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); afx_msg BOOL OnEraseBkgnd(CDC* pDC); afx_msg BOOL OnClicked(); afx_msg void OnCaptureChanged(CWnd *pWnd); afx_msg void OnKillFocus(CWnd* pNewWnd); afx_msg void OnMouseMove(UINT nFlags, CPoint point); //}}AFX_MSG LRESULT OnSetCheck(WPARAM wParam, LPARAM lParam); LRESULT OnGetCheck(WPARAM wParam, LPARAM lParam); DECLARE_MESSAGE_MAP() private: COLORREF m_TextColor, m_BackColor,m_FocusColor; HBITMAP m_bmpNormal,m_bmpDisabled; CBitmap m_bmpBack,m_bmpButton; UINT m_nBorder; UINT m_nTextAlign,m_nIconAlign; int m_nCheck,m_bCheckBox; BOOL m_MouseOnButton,m_bStatic; }; ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_PICBUTTON_H__4A8AEB90_4455_44B5_B4BE_20B5B77453E1__INCLUDED_)

實現

// PicButton.cpp : implementation file
//

#include "stdafx.h"
#include "PicButton.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CPicButton

CPicButton::CPicButton()
{
    m_TextColor=RGB(255,255,255);
    m_BackColor=RGB(40,40,70);
    m_FocusColor=RGB(255,0,0);
    m_nBorder=BF_RECT;
    m_nTextAlign=DT_CENTER;
    m_nIconAlign=ALIGN_HORZ;
    m_bmpNormal=NULL;
    m_bmpDisabled=NULL;
    m_nCheck=0;
    m_bCheckBox=0;
    m_MouseOnButton=FALSE;
    m_bStatic = 0;
}

CPicButton::~CPicButton()
{
    DeleteObject();
}

BEGIN_MESSAGE_MAP(CPicButton, CButton)
    //{{AFX_MSG_MAP(CPicButton)
    ON_WM_CTLCOLOR()
    ON_WM_ERASEBKGND()
    ON_CONTROL_REFLECT_EX(BN_CLICKED, OnClicked)
    ON_WM_CAPTURECHANGED()
    ON_WM_KILLFOCUS()
    ON_WM_MOUSEMOVE()
    //}}AFX_MSG_MAP
    ON_MESSAGE(BM_SETCHECK, OnSetCheck)
    ON_MESSAGE(BM_GETCHECK, OnGetCheck)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPicButton message handlers

void CPicButton::DeleteObject()
{
    if(m_bmpNormal){
        ::DeleteObject(m_bmpNormal);
        m_bmpNormal=NULL;
    }
    if(m_bmpDisabled){
        ::DeleteObject(m_bmpDisabled);
        m_bmpDisabled=NULL;
    }
    if(m_bmpButton.GetSafeHandle()){
        m_bmpButton.DeleteObject();
    }
    if(m_bmpBack.GetSafeHandle()){
        m_bmpBack.DeleteObject();
    }
}
void CPicButton::SetBitmap(UINT nNormalID,UINT nDisableID)
{
    HINSTANCE   hInstResource=AfxFindResourceHandle(MAKEINTRESOURCE(nNormalID), RT_BITMAP);
    m_bmpNormal=(HBITMAP)::LoadImage(hInstResource, MAKEINTRESOURCE(nNormalID), IMAGE_BITMAP, 0, 0, 0);
    if(nDisableID)
        m_bmpDisabled=(HBITMAP)::LoadImage(hInstResource, MAKEINTRESOURCE(nDisableID), IMAGE_BITMAP, 0, 0, 0);
    else
        m_bmpDisabled=(HBITMAP)::LoadImage(hInstResource, MAKEINTRESOURCE(nNormalID), IMAGE_BITMAP, 0, 0, 0);
}
void CPicButton::SetBitmap(LPCTSTR lpszNormal,LPCTSTR lpszDisabled)
{
    m_bmpNormal=(HBITMAP)::LoadImage(NULL, lpszNormal, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    if(lpszDisabled)
        m_bmpDisabled=(HBITMAP)::LoadImage(NULL, lpszDisabled, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    else
        m_bmpDisabled=NULL;
}
void CPicButton::SetBitmapEx(LPCTSTR lpszFile)
{
    if(lpszFile==NULL){
        m_bmpButton.DeleteObject();
    }
    else{
        if(!m_bmpButton.GetSafeHandle())m_bmpButton.DeleteObject();
        m_bmpButton.LoadBitmap(lpszFile);
    }
}
void CPicButton::SetBitmapEx(UINT nBitmapID)
{
    if(nBitmapID==0){
        m_bmpButton.DeleteObject();
    }
    else{
        if(!m_bmpButton.GetSafeHandle())m_bmpButton.DeleteObject();
        m_bmpButton.LoadBitmap(nBitmapID);
    }
}
void CPicButton::SetBackBmp(LPCTSTR lpszFile)
{
    if(lpszFile==NULL){
        m_bmpBack.DeleteObject();
    }
    else{
        if(!m_bmpBack.GetSafeHandle())m_bmpBack.DeleteObject();
        m_bmpBack.LoadBitmap(lpszFile);
    }
}
void CPicButton::SetBackBmp(UINT nNormalID)
{
    if(nNormalID==0){
        m_bmpBack.DeleteObject();
    }
    else{
        if(!m_bmpBack.GetSafeHandle())m_bmpBack.DeleteObject();
        m_bmpBack.LoadBitmap(nNormalID);
    }
}
void TransparentBlt2(HDC hdcDest,      // 目標DC
                     int nXOriginDest,   // 目標X偏移
                     int nYOriginDest,   // 目標Y偏移
                     int nWidthDest,     // 目標寬度
                     int nHeightDest,    // 目標高度
                     HDC hdcSrc,         // 源DC
                     int nXOriginSrc,    // 源X起點
                     int nYOriginSrc,    // 源Y起點
                     int nWidthSrc,      // 源寬度
                     int nHeightSrc,     // 源高度
                     UINT crTransparent  // 透明色,COLORREF型別
                     )
{
    HBITMAP hOldImageBMP, hImageBMP = CreateCompatibleBitmap(hdcDest, nWidthDest, nHeightDest); // 建立相容點陣圖
    HBITMAP hOldMaskBMP, hMaskBMP = CreateBitmap(nWidthDest, nHeightDest, 1, 1, NULL);          // 建立單色掩碼點陣圖
    HDC     hImageDC = CreateCompatibleDC(hdcDest);
    HDC     hMaskDC = CreateCompatibleDC(hdcDest);
    hOldImageBMP = (HBITMAP)SelectObject(hImageDC, hImageBMP);
    hOldMaskBMP = (HBITMAP)SelectObject(hMaskDC, hMaskBMP);

    // 將源DC中的點陣圖拷貝到臨時DC中
    if (nWidthDest == nWidthSrc && nHeightDest == nHeightSrc)
        BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hdcSrc, nXOriginSrc, nYOriginSrc, SRCCOPY);
    else
        StretchBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, 
        hdcSrc, nXOriginSrc, nYOriginSrc, nWidthSrc, nHeightSrc, SRCCOPY);

    // 設定透明色
    SetBkColor(hImageDC, crTransparent);

    // 生成透明區域為白色,其它區域為黑色的掩碼點陣圖
    BitBlt(hMaskDC, 0, 0, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCCOPY);

    // 生成透明區域為黑色,其它區域保持不變的點陣圖
    SetBkColor(hImageDC, RGB(0,0,0));
    SetTextColor(hImageDC, RGB(255,255,255));
    BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND);

    // 透明部分保持螢幕不變,其它部分變成黑色
    SetBkColor(hdcDest,RGB(0xff,0xff,0xff));
    SetTextColor(hdcDest,RGB(0,0,0));
    BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND);

    // "或"運算,生成最終效果
    BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCPAINT);

    SelectObject(hImageDC, hOldImageBMP);
    DeleteDC(hImageDC);
    SelectObject(hMaskDC, hOldMaskBMP);
    DeleteDC(hMaskDC);
    DeleteObject(hImageBMP);
    DeleteObject(hMaskBMP); 
}
void DrawTransparent(CDC *pDC,int x,int y,HBITMAP hBitmap)
{
    CDC memDC;
    memDC.CreateCompatibleDC(pDC);
    CBitmap *pOldBitmap=memDC.SelectObject(CBitmap::FromHandle(hBitmap));
    BITMAP bm;
    ::GetObject(hBitmap,sizeof(BITMAP),&bm);
    COLORREF crTransparent=memDC.GetPixel(0,0);
    TransparentBlt2(pDC->m_hDC,x,y,bm.bmWidth,bm.bmHeight,memDC.m_hDC,0,0,bm.bmWidth,bm.bmHeight,crTransparent);
    if(pOldBitmap)memDC.SelectObject(pOldBitmap);
}
void DrawTransparent(CDC *pDC,int x,int y,HBITMAP hBitmap,int nIndex)
{
    CDC memDC;
    memDC.CreateCompatibleDC(pDC);
    CBitmap *pOldBitmap=memDC.SelectObject(CBitmap::FromHandle(hBitmap));
    BITMAP bm;
    ::GetObject(hBitmap,sizeof(BITMAP),&bm);
    COLORREF crTransparent;
    int n = bm.bmHeight;
    if( n != 20 )
        crTransparent=memDC.GetPixel(0,0);
    else
        crTransparent=RGB(0,0,0);
    TransparentBlt2(pDC->m_hDC,x,y,bm.bmWidth/4-10,bm.bmHeight-5,memDC.m_hDC,nIndex*bm.bmWidth/4,0,bm.bmWidth/4,bm.bmHeight,crTransparent);
    if(pOldBitmap)memDC.SelectObject(pOldBitmap);
}

void CPicButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{

    CRect rcItem=lpDrawItemStruct->rcItem;
    CDC *pDC=CDC::FromHandle(lpDrawItemStruct->hDC);
    BOOL bFocus=lpDrawItemStruct->itemState&ODS_FOCUS;
    BOOL bSelected=lpDrawItemStruct->itemState&ODS_SELECTED;
    BOOL bDisabled=lpDrawItemStruct->itemState&ODS_DISABLED;
    CString strCaption;
    GetWindowText(strCaption);
    if(m_bCheckBox||m_bmpBack.GetSafeHandle()==NULL)
            pDC->FillSolidRect(&rcItem,m_BackColor);///////設定按鈕背景色
    else if(m_bmpBack.GetSafeHandle())
        DrawTransparent(pDC,0,0,(HBITMAP)m_bmpBack,bDisabled?3:(bSelected?2:(bFocus?1:0)));
    if(m_bmpNormal)
    {
        BITMAP bm;
        ::GetObject(m_bmpNormal,sizeof(BITMAP),&bm);
        if(strCaption.IsEmpty())
        {
            DrawTransparent(pDC,
                (rcItem.Width()-bm.bmWidth)/2,
                (rcItem.Height()-bm.bmHeight)/2,
                bDisabled?m_bmpDisabled:m_bmpNormal);
        }
        else
        {
            if(m_nIconAlign==ALIGN_HORZ)
            {
                DrawTransparent(pDC,
                    2,
                    (rcItem.Height()-bm.bmHeight)/2,
                    bDisabled?m_bmpDisabled:m_bmpNormal);
                rcItem.left+=2+bm.bmWidth+2;
            }
            if(m_nIconAlign==ALIGN_VERT)
            {
                DrawTransparent(pDC,
                    (rcItem.Width()-bm.bmWidth)/2,
                    0,
                    bDisabled?m_bmpDisabled:m_bmpNormal);
                rcItem.top+=0+bm.bmHeight+0;
            }
        }
    }

    if(m_bmpButton.GetSafeHandle())
    {
        BITMAP bm;
        m_bmpButton.GetBitmap(&bm);
        bm.bmWidth/=4;
        if(strCaption.IsEmpty())
        {
            DrawTransparent(pDC,
                (rcItem.Width()-bm.bmWidth)/2,
                (rcItem.Height()-bm.bmHeight)/2,
                (HBITMAP)m_bmpButton,
                m_bCheckBox?(m_nCheck?0:1):(bDisabled?3:(bSelected?2:(bFocus?1:0)))
                );
        }
        else
        {
            if(m_nIconAlign==ALIGN_HORZ)
            {
                if(GetExStyle()&WS_EX_RIGHT)
                {
                    DrawTransparent(pDC,
                        rcItem.right-bm.bmWidth+3,
                        (rcItem.Height()-bm.bmHeight)/2,
                        (HBITMAP)m_bmpButton,
                        m_bCheckBox?(m_nCheck?0:1):(bDisabled?3:(bSelected?2:(bFocus?1:0)))
                        );
                    rcItem.right-=(2+bm.bmWidth+2);
                }
                else
                {
                    DrawTransparent(pDC,
                        2,
                        (rcItem.Height()-bm.bmHeight)/2,
                        (HBITMAP)m_bmpButton,
                        m_bCheckBox?(m_nCheck?0:1):(bDisabled?3:(bSelected?2:(bFocus?1:0)))
                        );
                    rcItem.left+=2+bm.bmWidth+2;
                }
            }
            if(m_nIconAlign==ALIGN_VERT)
            {
                DrawTransparent(pDC,
                    (rcItem.Width()-bm.bmWidth)/2+(bSelected?1:0),
                    0,
                    (HBITMAP)m_bmpButton,
                    m_bCheckBox?(m_nCheck?0:1):(bDisabled?3:(bSelected?2:(bFocus?1:0))));
                rcItem.top+=0+bm.bmHeight+0;
            }
        }
    }
    if(!strCaption.IsEmpty())
    {
        if(rcItem.left==0)rcItem.left=2;
        pDC->SetTextColor(m_TextColor);
        if(bDisabled)pDC->SetTextColor(RGB(192,192,192));
        if(!m_bCheckBox)
            if(bFocus)pDC->SetTextColor(m_FocusColor);//////設定按鈕獲得焦點時的顏色
        pDC->SetBkMode(TRANSPARENT);
        pDC->DrawText(strCaption,&rcItem,m_nTextAlign|DT_VCENTER|DT_SINGLELINE);
        pDC->SetBkMode(OPAQUE);
    }
}
void CPicButton::PreSubclassWindow() 
{
    if(GetButtonStyle()&BS_CHECKBOX)
        m_bCheckBox=1;
    ModifyStyle(0,BS_OWNERDRAW);
    CButton::PreSubclassWindow();
}

HBRUSH CPicButton::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
    return (HBRUSH)::GetStockObject(NULL_BRUSH);
}

BOOL CPicButton::OnEraseBkgnd(CDC* pDC) 
{
    return TRUE;
}
LRESULT CPicButton::OnSetCheck(WPARAM wParam, LPARAM lParam)
{
    switch (wParam)
    {
        case BST_CHECKED:
        case BST_INDETERMINATE:
            SetCheck(1);
            break;
        default:
            SetCheck(0);
            break;
    }

    return 0;
}
LRESULT CPicButton::OnGetCheck(WPARAM wParam, LPARAM lParam)
{
    return GetCheck();
}
void CPicButton::SetCheck(int nCheck, BOOL bRepaint)
{
    if (nCheck == 0) 
        m_nCheck = 0;
    else 
        m_nCheck = 1;

    if (bRepaint) Invalidate();
}
int CPicButton::GetCheck()
{
    return m_nCheck;
}
BOOL CPicButton::OnClicked() 
{
    m_nCheck = !m_nCheck;
    if(m_bCheckBox)Invalidate();
    return FALSE;
}
void CPicButton::OnMouseMove(UINT nFlags, CPoint point)
{
    CWnd* pWnd;
    CWnd* pParent;

    CButton::OnMouseMove(nFlags, point);

    if (nFlags & MK_LBUTTON && m_MouseOnButton == FALSE) return;

    pWnd = GetActiveWindow();
    pParent = GetOwner();

    if ((GetCapture() != this) && (pWnd != NULL && pParent != NULL)) 
    {
        m_MouseOnButton = TRUE;
        SetFocus();
        SetCapture();
        Invalidate();
    }
    else
    {
        CRect rc;
        GetClientRect(&rc);
        if(!rc.PtInRect(point)){
            if(m_MouseOnButton == TRUE){
                m_MouseOnButton = FALSE;
                Invalidate();
            }
            if(!(nFlags & MK_LBUTTON)) ReleaseCapture();
        }
    }
}

void CPicButton::OnKillFocus(CWnd * pNewWnd)
{
    CButton::OnKillFocus(pNewWnd);

    if(m_MouseOnButton == TRUE){
        m_MouseOnButton = FALSE;
        Invalidate();
    }
}
void CPicButton::OnCaptureChanged(CWnd *pWnd) 
{
    if (m_MouseOnButton == TRUE){
        ReleaseCapture();
        Invalidate();
    }
    CButton::OnCaptureChanged(pWnd);
}

相關推薦

CButton 支援PNG圖片作為背景

按鈕重繪支援PNG圖片作為背景很使用。可以實現按鈕一種背景圖片,然後滑鼠點選按鈕,增加一個透明的png邊框,也可以修改以下實現滑鼠停留在某個按鈕上面,改變按鈕的狀態。 #if !defined(AFX_PICBUTTON_H__4A8AEB90_4455_

微信小程式 上傳圖片至阿里雲OSS支援圖片上傳

我們先講下為什麼要把圖片檔案上傳到雲伺服器呢, 有什麼好處呢? 1、能減輕我們自己伺服器的頻寬 如果一個程式裡有多處地方用到使用者上傳圖片等功能的話,建議還是放到阿里雲或者千牛雲等其他平臺上來儲存我們的圖片,可以給公司的伺服器減少很多壓力,磁碟儲存也就不會太大 2、提升使用者體驗感

win32用GDI+載入png圖片作為背景

#include <windows.h> #include <gdiplus.h> /* GDI+ startup token */ ULONG_PTR gdiplusStartupToken; /* Declare Windows procedure */ LRESULT CA

HTML5 CSS3 經典案例:無外掛拖拽上傳圖片 支援預覽與批量

上傳基本是專案中經常出現的,一般採用:1、form提交 2、flash3、html5form提交會重新整理頁面,很難做到非同步上傳;flash可能是用得比較多了,因為可以兼顧到幾乎所有的瀏覽器,我之前一直會用jquery的uploadify作為專案中的上傳工具,uploadi

讓ie6支援png圖片的透明

一個老外寫的支援png圖片的透明,背景定位。 DD_belatedPNG_0.0.8a-min.js 用法 <!--[if lte IE 6]> <script src="DD_belatedPNG_0.0.8a.js" type="tex

CButton

MFC下一個簡單的按鈕重繪,功能不是那麼全 #if !defined(AFX_BMPBUTTON_H__FBB70540_EC88_4021_9272_574C1A7A571B__INCLUDED_) #define AFX_BMPBUTTON_H__FBB7

HTML5 CSS3 經典案例:無外掛拖拽上傳圖片 支援預覽與批量

效果圖1:效果圖2:好了,請允許我把圖片貼了兩遍,方便大家看效果了~可以看出我們的圖片的li的html其實還是挺複雜的,於是我把html文件做了一些修改:<span style="font-size:12px;"><body> <div id="uploadBox"> &

回流和轉載

htm rendering 進行 text rep 參考 什麽事 params tee 回流和重繪可以說是每一個web開發者都經常聽到的兩個詞語,我也不例外,可是一直不是很清楚這兩步具體做了什麽事情。最近由於部門內部要做分享,所以對其進行了一些研究,看了一些博客和書籍,整

回流reflowrepaint

瀏覽器 gin style 圖片 。。 css 徹底 off 繪制 回流與重繪這兩個詞語經常見到,面試中這兩個詞語的出現的頻率也比較高,每每別人談到回流與重繪時,哦,這個我知道,但是讓我講個因果所以然,好像嗯。。。好像我並不是懂的很徹底 什麽是回流(reflow)? R

移動端設置, mobile , 一張圖片作為背景 ,平鋪 ,自動拉伸 , 圖片 鋪滿視界 ,窗口. background-image , background-size, background-repeat

效果 背景 dev 技術 oct pla div osi eight 1. 效果: 瀏覽器: 手機模擬: 2.代碼: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head&g

圖片作為背景並且是鏈接的寫法(背景圖片加鏈接)

span 方法 http img spl ack 文本 生活 指向 圖片作為背景,並且是鏈接的寫法。例如網站的logo圖片。例如:土豆的logo圖片 <a title="土豆網 tudou.com 每個人都是生活的導演" href="http://www.jb51.

純HTML自動刷新頁面或定向http-equiv屬性的refresh

表示 str 網址 http baidu keywords word 自動 aid refresh 屬性值 -- 刷新與跳轉(重定向)頁面 refresh出現在http-equiv屬性中,使用content屬性表示刷新或跳轉的開始時間與跳轉的網址 refresh示例一:

雙棧實現整數支援大於十的整數計算器【資料結構】

通過棧的操作實現簡單的計算器 首先定義兩個棧,一個叫s_num用來存放運算元,另一個叫s_opt用來存放操作符。 再定義一個字元陣列用來存放輸入的表示式,初始化為0; 當表示式的字元不為‘/0’時,或者操作符棧中不為空的時候,就要一直執行程式! 在執行的時候做兩個判斷,輸入的不是數字

windows下PHP獲取視訊第一幀圖片作為背景

我在網上找了很多這方面的資料,總結如下:一般用ffmpeg獲取視訊第一幀圖片作為背景圖; ffmpeg的下載連結  http://ffmpeg.org/download.html ; 下載好包,包裡面在

Python3 tkinter 使用圖片作為背景,並在該背景上加輸入框,按鈕

  最近用到了tkinter,想用自己喜歡的圖片作為背景,看了不少部落格,可能是我少敲了什麼,很少有能成功執行的,最後終於發現了一個可行方案,於是在這裡記錄一下(程式碼為原創) 圖片使用的p站喜愛畫師的作品(因為是以前儲存的,抱歉沒找到畫師連結),侵刪。 import tk

在Vue專案使用quill-editor帶樣式編輯器更改插入圖片和視訊 運用vue-quilt-editor編寫富文字編輯器 自定義圖片路徑 獲取後臺返回路徑

一、首先在main.js  引入 vue-quilt-editorimport VueQuillEditor from 'vue-quill-editor'import 'quill/dist/quill.core.css'import 'quill/dist/quill.s

檔案定向採用檔案過濾驅動實現

Windows的I/O管理器提供了一個方便的方法來重定向一個檔案物件。通常使用檔案過濾驅動(在檔案開啟和檔案建立的操作中)實現該方法。操作方法如下:1、在IRP_MJ_CREATE的分發函式中,獲得FILE_OBJET的FileName屬性。2、用目標檔案的完整路徑替換原有的

Android歌詞轉換器支援動感歌詞相互轉換

引言之前為了讓樂樂音樂播放器支援多種歌詞格式,在實現多種歌詞格式解析的時,也想弄一個歌詞轉換器,由於網上Android版的還是比較少的,所以就將該轉換器巢狀到播放器裡面了,其專案地址如下:樂樂音樂播放器。實現功能歌詞轉換器支援ksc、krc和hrc歌詞間的相互轉換及轉換成lr

豎向走馬燈支援多行或單行-------簡單實用

1.單行 第一步:在build中做如下操作 (1)Android{      //在Android中增加節點repositories             repositories {                maven { url 'https://maven.f

java工具類之Excel檔案匯入、讀取資料支援xls、和xlsx

所需的jar包:poi的jar包儘量保持一致,不然會報版本不一致的錯誤下面是程式碼:package ReadExcel; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.