自繪時間軸控制項

2021-09-11 15:38:18 字數 4534 閱讀 8299

控制項**:

標頭檔案

#pragma once

// ctimeaxisctrl

class ctimeaxisctrl : public cwnd

;private:

colorref m_clrbackground, m_clrtext, m_clrgrid, m_clrleftarea;

cfont m_fontymd, m_fonttime;

cpen m_pen;

static const int m_nleftareawidth = 110;//左邊區域的寬度

static const int m_nrightareawidth = 25;//右邊區域的寬度

static const int m_ntopymd = 50;//年月日的高度

stimepoint m_tplb***own;//記錄滑鼠左擊的位置和對應的時間

unsigned char m_uctimetype;//時間型別

enum;

static const int m_ntimems[tt_count];//事件型別對應的總毫秒數

int m_nlefttimems;//最左邊的時間

bool m_bonsize, m_blb***own, m_bmousemove;

cpoint m_ptmousemove;

private:

void drawall(cdc& memdc, crect& rect);

void drawgrid(cdc& memdc, crect& rectgrid, unsigned char uctimetype);

unsigned char getvlinetype(unsigned char uctimetype, int nhour, int nminute, int nsecond);

public:

virtual bool create(dword dwstyle, const rect& rect, cwnd* pparentwnd, uint nid=null);

afx_msg void onpaint();

afx_msg void onlbuttondown(uint nflags, cpoint point);

afx_msg void onrbuttondown(uint nflags, cpoint point);

afx_msg void onmbuttondown(uint nflags, cpoint point);

afx_msg void onsize(uint ntype, int cx, int cy);

afx_msg void onlbuttonup(uint nflags, cpoint point);

afx_msg void onmousemove(uint nflags, cpoint point);

};

原始檔

// timeaxisctrl.cpp : 實現檔案

//#include "stdafx.h"

#include "mfc_controler.h"

#include "timeaxisctrl.h"

const int ctimeaxisctrl::m_ntimems[tt_count] = ;

// ctimeaxisctrl

implement_dynamic(ctimeaxisctrl, cwnd)

ctimeaxisctrl::ctimeaxisctrl()

ctimeaxisctrl::~ctimeaxisctrl()

begin_message_map(ctimeaxisctrl, cwnd)

on_wm_paint()

on_wm_lbuttondown()

on_wm_rbuttondown()

on_wm_mbuttondown()

on_wm_size()

on_wm_lbuttonup()

on_wm_mousemove()

end_message_map()

// ctimeaxisctrl 訊息處理程式

bool ctimeaxisctrl::create(dword dwstyle, const rect& rect, cwnd* pparentwnd, uint nid)

void ctimeaxisctrl::onpaint()

memdc.selectobject(oldbitmap);

}void ctimeaxisctrl::drawall(cdc& memdc, crect& rect)

void ctimeaxisctrl::onlbuttondown(uint nflags, cpoint point)

/*todo:修改為外部觸發時間範圍縮小*/

void ctimeaxisctrl::onrbuttondown(uint nflags, cpoint point)

cwnd::onrbuttondown(nflags, point);

}/*todo:修改為外部觸發時間範圍放大*/

void ctimeaxisctrl::onmbuttondown(uint nflags, cpoint point)

cwnd::onmbuttondown(nflags, point);

}void ctimeaxisctrl::drawgrid(cdc& memdc, crect& rectgrid, unsigned char uctimetype)

//當總時間超過24小時,則將最左邊時間向左挪動

if(nlefttimems+nmsecond > m_ntimems[h24])

if(m_bonsize || m_blb***own || m_bmousemove)//當觸發了onsize,lbuttondown,mousemove訊息,使用原先的最左邊時間

else

//繪畫時間軸豎線

int ntimeposms = 0;

crect recttime;

cstring cstrtime;

int nhour = 0, nminute = 0, nsecond = 0;

int nhourold = -1, nminuteold = -1, nsecondold = -1;//不能初始化為零,否則零點就畫不出來

for(int i = 0; i <= ngridwidth; i++)

else if(ucvlinetype == 2)

}} //繪畫時間豎線

if(m_tplb***own.ntimems == -1)//繪畫滑鼠左擊的時間豎線

//豎線在時間軸的距離範圍內

if(m_nleftareawidth <= m_tplb***own.npos && m_tplb***own.npos <= m_nleftareawidth+ngridwidth)

}else//繪畫縮放後的時間豎線 }

}void ctimeaxisctrl::onsize(uint ntype, int cx, int cy)

unsigned char ctimeaxisctrl::getvlinetype(unsigned char uctimetype, int nhour, int nminute, int nsecond)

else if(nminute == 0 && nsecond == 0)//每1小時

}else if(uctimetype == h12 || uctimetype == h6)

else if(nminute%10 == 0 && nsecond == 0)//每10分鐘

}else if(uctimetype == h3)

else if(nminute%2 == 0 && nsecond == 0)//每2分鐘

}else if(uctimetype == h1)

else if(nsecond == 0)//每1分鐘

}else if(uctimetype == m30)

else if(nsecond%30 == 0)//每30秒鐘

}else if(uctimetype == m10)

else if(nsecond%10 == 0)//每10秒鐘

}return 0;

}void ctimeaxisctrl::onlbuttonup(uint nflags, cpoint point)

void ctimeaxisctrl::onmousemove(uint nflags, cpoint point)

m_tplb***own.npos = point.x;

m_tplb***own.ntimems = -1;

m_bmousemove = true;

invalidate();

} m_ptmousemove = point;

cwnd::onmousemove(nflags, point);

}

Android時間軸控制項 WheelView

在做時間軸或者某些型別的選擇時,有時候設計師會給我們出類似下面的效果 因此,我們就需要重新自定義scrollview,也就是移動端常用的時間軸控制項 wheelview 實現方式直接上 public class wheelview extends scrollview private context...

時間軸控制項TimeLineView的實現

首先來看看效果圖吧,可以根據需要設定出很炫的效果 android中經常會用到時間軸,那麼如何實現時間軸呢?首先我們了解時間軸的構成 1 時間球 2 直線 3 位置 下面介紹乙個時間軸實現的開源 把這幾個問題解決再掌握基本的繪製過程就可以實現時間軸了。下面先來看 1 定義屬性,使用者可以自定義的屬性值...

mysql 時間軸 使用MySQL計算時間軸的變化

我是mysql的新手,我需要你的幫助.我有一張包含類似資料的 robotposx robotposy robotposdir robotshortestpath 0.1 0.2 15 1456 0.2 0.3 30 1456 0.54 0.67 15 1456 0.68 0.98 22 1234 0...