控制項**:
標頭檔案
#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...