MFC的问题,关于OnChar()函数和背景图片设置

两个问题:1、我想用OnChar()实现键盘响应,但是为什么没有反应代码如下:voidCrtyView::OnChar(UINTnChar,UINTnRepCnt,UIN... 两个问题:
1、我想用OnChar()实现键盘响应,但是为什么没有反应
代码如下:
void CrtyView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
CDC *pDC=GetDC();
CDC Dc;
if(Dc.CreateCompatibleDC(pDC)==FALSE)
AfxMessageBox(_T("Can't create DC")); //异常处理
Dc.SelectObject(m_redrectangle);
if((nChar==(char)'A')||(nChar==(char)'a'))
{
pDC->StretchBlt(40,50,28,78,&Dc,0,0,28,78,SRCCOPY);
}
}
为什么就是没有反应?是不是因为我在执行程序的时候,系统认为我就是没有按“A”或“a”?我想要的效果达不到啊。。

2、关于图片背景。我的是单文档程序,窗口放大时,背景就错乱了。
void CrtyView::OnDraw(CDC* pDC)
{
CrtyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
CRect rect(0,0,1024,768);
GetClientRect(rect);///取得客户区域
pDC->FillRect(rect,&m_brushBackground); ///用背景画刷填充区域

}
BOOL CrtyView::OnEraseBkgnd(CDC* pDC)
{
CView::OnEraseBkgnd(pDC);
return 0;
}
帮忙看看好吗?我是新手,网上说OnEraseBkgnd函数是可以在窗口大小改变时自适应的,怎么实现不了?

多谢了,我是大学生,在做小学期实习。。。谢谢!!!!
展开
 我来答
okou0696
2012-09-03 · TA获得超过1485个赞
知道小有建树答主
回答量:1343
采纳率:0%
帮助的人:812万
展开全部
1,这个不太好判断,可能有多方面原因,需要根据实际代码判断。可能是因为焦点在按钮上,而键盘事件会被按钮自动屏蔽。
解决办法:你可以尝试重载 PreTranslateMessage
例如:
xxxdlg::PreTranslateMessage(msg *pmsg)
{
if(pMsg->message == wm_keyup)
{
switch (pmsg->wparam}
{
'a' :......
'b' .......
}
}
return xxxdlg::PreTranslateMessage(pmsg);
}
伪代码供参考,不能直接使用。

2,原因是因为
窗口放大时时Windows不会把整个客户区都无效,所以必须自己响应WM_SIZE,并手动把整个客户区无效化,这样才行。

解决办法:响应WM_SIZE消息,并在里面加一句:Invalidate();
追问
可以讲具体一点吗?谢谢~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阿小尼0C
2012-09-12 · TA获得超过274个赞
知道答主
回答量:42
采纳率:66%
帮助的人:20.6万
展开全部
把::OnDraw的东西弄到::OnEraseBkgnd里面就可以了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
intehel
2012-09-03 · TA获得超过1293个赞
知道大有可为答主
回答量:1601
采纳率:100%
帮助的人:1768万
展开全部
1、m_redrectangle是什么东西,你想画什么东西?

2、
BOOL CrtyView::OnEraseBkgnd(CDC* pDC)
{
CView::OnEraseBkgnd(pDC);
return TRUE;
}
追问
第一个问题我已经解决了~谢谢了~其实是我构造函数的时候弄错了。。没有使用向导。。
第二个问题还是无法解决,可能是我的背景图片比较奇葩。。可以QQ联系吗?想请教一些问题~
934947535 加我的时候留个说明吧~谢啦~
另外我有点不懂ONCHAR函数的使用。希望可以私聊,谢谢~会有追加分的~
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zyl102600
2012-09-07 · TA获得超过678个赞
知道小有建树答主
回答量:702
采纳率:100%
帮助的人:716万
展开全部
关于你的第二个问题,需要将坐标进行变换,屏幕坐标和客户区坐标的变换.似乎是screentoclient之类的函数,很久没有用到了,忘记了.你再查查坐标变换方面的资料吧.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式