大家能给解答下这个问题吗?buttonfacade不能自动重绘。

想问下纯API给按钮绘图的问题..._c++吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:279,832贴子:
想问下纯API给按钮绘图的问题...收藏
HWND hdb = CreateButton(hInst,szhWnd,rect,lpstr,i);//自写的无视,生成一个button就对了.HDC hc = ::GetDC(hdb); HDC hmdc = ::CreateCompatibleDC(hc);HBITMAP hp = ::Get_ButRes();// LoadBitmap(xxxxxxxx)::BitBlt(hc,0,0,75,17,hmdc,0,0,SRCCOPY);没有效果.
上海洪庙文艺家具厂—专业实木家具定制厂家,设计制作一站式服务,省心放心!
代码要全部贴上来,贴个片断没法帮你
来个完整的
selectobject(hmdc,hp)
人生最大的幸福,并非一条平顺舒坦的路,而是在坎坷的路上,寻获一群患难与共的同行者!再美的日子没有人牵挂也是一种遗憾,也许问候只是一个形式,但却能给心灵带来温馨。
//创建BUTTONHWND CreateButton (HINSTANCE hIn,HWND PhWnd,RECT rect,LPSTR lpstr,int i){
HWND hWnd = CreateWindow (
BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,rect.left,rect.top,
HMENU(i+IDC_BUTTON_MAIN1-1),//标识符啊啊啊,如果是窗口就是菜单ID,如果是控件就是控件ID
(LPVOID)NULL);
//ShowWindow (hWnd, SW_SHOW);
// UpdateWindow (hWnd);
return hW}/* 以下是问题所在 */HWND hdb = CreateButton(hInst,szhWnd,rect,lpstr,i);/*调用上面的函数在指定区域生成button
等价 CreateWindow (button,xxxxxxx)*/HDC hc = ::GetDC(hdb);//获取一个dc HDC hmdc = ::CreateCompatibleDC(hc);//根据dc得到一个dc,貌似这里没必要这样.HBITMAP hp = ::Get_ButRes();/*等价
LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP9)); // 位图资源命名为"Pic"*/ ::SelectObject(hmdc,hp);::BitBlt(hc,0,0,75,17,hmdc,0,0,SRCCOPY);/*
以上问题所在.目前不清楚updatewindows是否影响到了按钮背景图片显示,因为我的print没有对按钮背景重绘 */ ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);/* 谁有相关例子项目的代码吗?谢谢 */
创建时加样式 BS_OWNERDRAW
CALLBACK WndProc
-& WM_DRAWITEM{ HDC hc = ::GetDC(hdb);HDC hmdc = ::CreateCompatibleDC(hc);HBITMAP hp = ::Get_ButRes();::SelectObject(hmdc,hp);::BitBlt(hc,0,0,75,17,hmdc,0,0,SRCCOPY);}搞定.没想到原来是 样式 BS_OWNERDRAW
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或C#在一个事件里执行另一个事件的问题我想达到点击BUTTON就重绘DATAGRIDVIEW这个功能,(EXCEL里合并单元格的功能)
现在需要在
private & void & button1_Click(object & sender, & EventArgs & e)
事件里执行
private & void & dataGridView1_CellPainting(object & sender, & DataGridViewCellPaintingEventArgs & e)
1.不知道代码怎么写?请高手赐教
2.或者有其他更好的方法?
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
事件的内容
写成一个方法
public void ddd()
然后两个同时调用它
回答2:按楼上的办法
独立出来写个方法
大家都可以调用
majun831112
回答3:dataGridView1_CellPainting(new object(),new DataGridViewCellPaintingEventArgs());
回答4:试试dataGridView1.Invalidate()方法.
majun831112
回答5:话我不想多说 楼主快点节贴给分
这年头给分的越来越少了
回答7:其实有一个更接近的方法楼主可以用:
DataGridView.InvalidateCell 方法
使 DataGridView 中的某个单元格无效,并强制对它进行重新绘制。
回答8:dataGridView1.invalidate()方法,&button&标签里加交互性操作会有兼容性问题以及重绘问题。 - Crabzzz - 博客园
随笔 - 28, 文章 - 0, 评论 - 2, 引用 - 0
&button class="btn gb_bt hide_poprelation" data-needquestion="1" data-fuin="c265e4bdb4cd5a620"&&span&+QQ好友&/span&&div class="pop_relation " style="position:z-index:1000;left:0;top:30text-align:cursor:"&&div class="friend_question" style="zoom:1;"&请回答问题:&p class="question"&我现在工作的公司&/p&&p&&input type="text" class="py_question_answer"&&/p&&div class="hint" style="padding:5display:none"&请输入正确答案!&/div&&/div&&div class="tip_button" style="zoom:1;"&&button class="bt_tip_hit"&确认&/button&&button class="bt_tip_normal"&取消&/button&&/div&&/div&&/div&
此时,把&请输入正确答案&外包裹的DIV的display:none 拿掉,chrome下竟然不会显示! 需要把整个父DIV重新显示/隐藏 才可以出现。
在IE下更夸张,里面的input type="text"根本无法点击和获得焦点。
所以,慎用&button&,早日用DIV代之。> MFC Button 的重绘
重绘的旋钮消失
MFC Button 的重绘
重绘的旋钮消失
lovenetwork & &
发布时间: & &
浏览:74 & &
回复:0 & &
悬赏:0.0希赛币
MFC Button 的重绘
重绘的按钮消失CMyButton.h:
#pragma&once
#include&"afxwin.h"
class&CMyButton&:&public&CButton
//DECLARE_DYNAMIC(CMyButton)
&&&&public:
&&&CMyButton();
&&&virtual&~CMyButton();
&&&//设置Button&Down的背景颜色
&&&void&SetDownColor(COLORREF&color);
&&&//设置Button&Up的背景颜色
&&&void&SetUpColor(COLORREF&color);
&&&BOOL&Attach(const&UINT&nID,&CWnd*&pParent);
&&protected:
&&&//必需重载的函数
&&virtual&void&DrawItem(LPDRAWITEMSTRUCT&lpDrawItemStruct);
&&&public:
&&&//三种颜色分别为文字,Button&Down的背景颜色,Button&Up的背景颜色
&&&COLORREF&m_TextColor,&m_DownColor,m_UpC
CMButton.cpp:
#include&"StdAfx.h"
#include&"MyButton.h"
CMyButton::CMyButton(void)
&&m_DownColor&=&m_UpColor&=&RGB(0,0,0);//初始化设为黑色
CMyButton::~CMyButton(void)
BOOL&CMyButton::Attach(const&UINT&nID,CWnd*&pParent)
&&&&if&(!SubclassDlgItem(nID,&pParent))
&&&&return&FALSE;
&&&&return&TRUE;
void&CMyButton::SetDownColor(COLORREF&color)
{&&&&//CMyButton类的函数
&&&&m_DownColor&=&
void&CMyButton::SetUpColor(COLORREF&color)
&&&&m_UpColor&=&
void&CMyButton::DrawItem(LPDRAWITEMSTRUCT&lpDrawItemStruct)
&&&dc.Attach(lpDrawItemStruct-&hDC);//得到绘制的设备环境CDC
&&&&VERIFY(lpDrawItemStruct-&CtlType==ODT_BUTTON);
&&&//得当Button上文字,这里的步骤是:1,先得到在资源里编辑的按钮的文字,
&&&//然后将此文字重新绘制到按钮上,
&&&&//同时将此文字的背景色设为透明,这样,按钮上仅会显示文字
&&&&const&int&bufSize&=&512;
&&&&TCHAR&buffer[bufSize];
&&&&GetWindowText(buffer,&bufSize);
&&&int&size=sizeof(buffer);//得到长度
&&&DrawText(lpDrawItemStruct-&hDC,buffer,size,&lpDrawItemStruct-&rcItem,DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_TABSTOP);//绘制文字
&&&SetBkMode(lpDrawItemStruct-&hDC,TRANSPARENT);//透明
&&&if&(lpDrawItemStruct-&itemState&ODS_SELECTED)//当按下按钮时的处理
&&&{////重绘整个控制
&&&&&&&&&&CBrush&brush(m_DownColor);
&&&&&&&&&&dc.FillRect(&(lpDrawItemStruct-&rcItem),&brush);//利用画刷brush,填充矩形框
&&&&&&&&&//因为这里进行了重绘,所以文字也要重绘
&&&&&&&&&DrawText(lpDrawItemStruct-&hDC,buffer,size,&lpDrawItemStruct-&rcItem,DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_TABSTOP);
&&&&&&&&&&SetBkMode(lpDrawItemStruct-&hDC,TRANSPARENT);
&&else//当按钮不操作或者弹起时
&&&&&&&&&&&CBrush&brush(RGB(255,255,0));
&&&&&&&&&&&&dc.FillRect(&(lpDrawItemStruct-&rcItem),&brush);//
&&&&&&&&&&&&DrawText(lpDrawItemStruct-&hDC,buffer,size,&lpDrawItemStruct-&rcItem,DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_TABSTOP);
&&&&&&&&&&&&SetBkMode(lpDrawItemStruct-&hDC,TRANSPARENT);
&&&&if&((lpDrawItemStruct-&itemState&ODS_SELECTED)&&(lpDrawItemStruct-&itemAction&&(ODA_SELECT|ODA_DRAWENTIRE)))
&&&&&{//选中了本控件,高亮边框
&&&&&&&&&&&&&&&COLORREF&fc=RGB(255-GetRValue(m_UpColor),255-GetGValue(m_UpColor),255-GetBValue(m_UpColor));
&&&&&&&&&&&&&CBrush&brush(fc);
&&&&&&&&&&&&dc.FrameRect(&(lpDrawItemStruct-&rcItem),&brush);//用画刷brush,填充矩形边框
&&&&&if&(!(lpDrawItemStruct-&itemState&&ODS_SELECTED)&&&(lpDrawItemStruct-&itemAction&&&ODA_SELECT))
&&&&&&&&&{
&&&&&&&&&&CBrush&brush(m_UpColor);&//控制的选中状态结束,去掉边框
&&&&&&&&&dc.FrameRect(&lpDrawItemStruct-&rcItem,&brush);//}
&&&&&&&&dc.Detach();
&&&&&&&&&}
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&

我要回帖

更多关于 buttonfacade 的文章

 

随机推荐