繪製粗虛線

2021-08-24 18:51:46 字數 1669 閱讀 3109

以前很少畫虛線,因此不太關心繪製粗虛線該怎麼辦。最近需要用到這個功能,因此學習了一下,與大家共享。

cpen類有兩個建構函式,我們經常用第乙個,而忽略了第二個。其實很多網友問到畫粗線時希望改變線頭的預設顯示方式,比如希望是圓弧頭而不是預設的方形頭等。都可以用這個建構函式定義的cpen物件來實現。

這裡我主要說一下繪製粗虛線,其它的都可以通過msdn上的幫助來了解。

函式原型:

bool createpen(

int npenstyle,

int nwidth,

const logbrush* plogbrush,

int nstylecount = 0,

const dword* lpstyle = null

);引數說明我就不做msdn的翻譯了。直接舉例說明使用方法。

這是msdn得例子:

logbrush logbrush;

logbrush.lbstyle = bs_solid;

logbrush.lbcolor = rgb(0,255,0);

mypen2.createpen(ps_dot|ps_geometric|ps_endcap_round, 2, &logbrush);

用這樣的畫筆就可以繪製2個畫素寬的粗點虛線,而且線頭是圓的。

這裡要特別說一下建構函式中的最後兩個引數,它們是用來進行自定義虛線繪製方法的。我們知道預設的虛線有點線,點劃線等,這都是固定的。通過最後兩個引數的設定,可以自定義虛線的樣式。nstylecount是指最後乙個引數中dword的數量;而最後乙個引數中dword的數量是2的倍數,其中每兩個為一組,第乙個表示點的長度,第二個表示點之後的空長度。舉例如下:

cpen newpen;

logbrush logbrush;

logbrush.lbstyle = bs_solid;

logbrush.lbcolor = m_sec.lcolor;

dword dwf[4];

dwf[0] = 1;

dwf[1] = m_sec.lwidth*2;

dwf[2] = 1;

dwf[3] = m_sec.lwidth*4;

newpen.createpen(ps_userstyle|ps_geometric|ps_endcap_round, m_sec.lwidth, &logbrush,4,dwf);

cpen * oldpen=pdc->selectobject(&newpen);

cbrush newbrush;

if(0==m_sec.stexture)

newbrush.createsolidbrush(m_sec.scolor);

else

newbrush.createhatchbrush(m_sec.stexture,m_sec.scolor);

cbrush * oldbrush=pdc->selectobject(&newbrush);

pdc->pie(m_sec.leftx,m_sec.lefty,m_sec.rightx,m_sec.righty,

m_sec.startx,m_sec.starty,m_sec.endx,m_sec.endy);

pdc->selectobject(oldpen);

pdc->selectobject(oldbrush);

canvas 繪製虛線

var mycanvas document.queryselector canvas 獲取上下文 var ctx mycanvas.getcontext 2d ctx.beginpath ctx.linewidth 5 ctx.moveto 200,200 ctx.lineto 450,200 ct...

Android豎虛線繪製

在android ui製作中,經常會需要一些線條作為分隔線,一般做個width或height為1dp的view就可以解決了,如果需要虛線,則需要在drawable目錄自定義xml進行繪製了,一般xml如下 然後在需要畫虛線的地方使用該drawable作為背景即可。不過如果需要一條豎虛線,就麻煩很多。...

Android中繪製虛線

利用shape繪製虛線 真機除錯時可能會出現虛線變實線的現象 在manifest檔案對應的activity節點中設定 android hardwareaccelerated false 即可 1.0 encoding utf 8 shape xmlns android android shape l...