win32 api中调用已写好的一个画线方法,为什么只在消息处理函数的switch之前才起作用?(如果在switch中调用画图方法,运行后就不显示线条)
因为我现在是想按一下按钮才使线条显示出来,我要怎么做才能在switch中调用画图方法??
因为我现在是想按一下按钮才使线条显示出来,我要怎么做才能在switch中调用画图方法??
解决方案 »
- 如何创建一个窗口正好和单文档MFC的DC大小正好重合
- 如何用Navigate2打开网页处理可编辑状态
- VC6中的定时器可以在另外一个程序的窗口中使用吗?
- 在共享 DLL 中和在静态库中使用 MFC的区别
- 关于ActiveX界面设计的问题
- VC下如何使用CF_HTML?? 实现从IE中拖动页面内容(包括格式即源码)到一个对话框的控件中....
- 请问怎样改变visual C++编辑器中的字体和颜色
- debug版和release版在程序运行时候有什么区别吗?
- 急急急!!! 想在注册表 HKEY_LOCAL_MACHINE\\SOFTWARE 下建立一个新键, 怎么也不行?
- SetupBuilder Professional 1.5
- 把一个真彩图test.bmp转化为一个256阶灰度图1.bmp 执行过程没有报错 可1.bmp 打开不是一个正确的图片 大家帮我看看 谢谢
- 请问个添加变量的问题
PAINTSTRUCT ps;
switch(message)
{
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
OnPaint(hdc);
EndPaint(hWnd, &ps);
return 0;
}
这是我的一段代码,在OnPaint(hdc)中绘图,没问题。
我现在是想按一下按钮才显示线条
所以我的代码大概如下:
HDC hdc;
PAINTSTRUCT ps;switch(message)
{
DrawSin() ; //写在这里的话就能显示
case WM_COMMAND:
switch(LOWORD(wParam))
{
//正弦按钮
case IDB_OPTSIN:
DrawSin() ; //写在这里的话就不能显示
break;
}
}void DrawSin()
{
hdc = BeginPaint(hWndhWnd,&ps);
MoveToEx(hdc, 200,75 , NULL);
LineTo(hdc,400,75); MoveToEx(hdc, 300,35 , NULL);
LineTo(hdc,300,115);
EndPaint(hWndhWnd,&ps);
}
PAINTSTRUCT ps;switch(message)
{
case WM_COMMAND:
switch(LOWORD(wParam))
{
//正弦按钮
case IDB_OPTSIN:
{
if(HIWORD(wParam)==BN_CLICKED)
DrawSin() ; //这样就能显示了
break;
}
}
}
BOOL CTest2Dlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->hwnd == GetDlgItem(IDC_BUTTON1)->m_hWnd)
{//当在这个按钮上进行操作时..
switch(pMsg->message)
{
case WM_LBUTTONDOWN:
DrawIt();
break;
case WM_KEYDOWN:
if(pMsg->wParam == VK_RETURN)
DrawIt();
break;
default:
break;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
也可以改成:
switch(pMsg->message)
{
case WM_LBUTTONDOWN:
if(pMsg->hwnd == GetDlgItem(IDC_BUTTON1)->m_hWnd)
DrawIt();
break;
case WM_KEYDOWN:
if(pMsg->wParam == VK_RETURN && pMsg->hwnd == GetDlgItem(IDC_BUTTON1)->m_hWnd)
DrawIt();
break;
default:
break;
}
第一:不能用WM_COMMAND消息.那样是不会触发的...
第二:pMsg->hwnd== GetDlgItem(IDC_BUTTON1)->m_hWnd作为判断条件.
程序在Win2000操作系统VC60编译通过,并测试成功!
你上面提供的代码是不是只能在MFC下运行?
我刚刚把它拷在WIN32下,说GetDlgItem这个方法不只一个参数。
是为什么呢?
那你可以这样.首先得到按钮所在的对话框或者窗口的指针....
例如为pDialog.
然后调用: pDialog->GetDlgItem(IDC_BUTTON1);就可以了..
不过还是要谢谢你。:)
{
HDC hdc = GetDC(hwnd);
MoveToEx(hdc, 200,75 , NULL);
LineTo(hdc,400,75); MoveToEx(hdc, 300,35 , NULL);
LineTo(hdc,300,115);
ReleaseDC(hwnd,hdc);
}
// 调用的时候这么调用
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_ABOUT:
DrawSin(hWnd);
break;
}
改成
if(LOWORD(wParam) == IDC_BUTTON1)试试..
//这行语句就是判断操作是否是在指定的按钮上进行的.....
你好,你说的方法我试过了,但出现如下错误:'DrawSin' : function does not take 1 parameters请问是怎么回事?
我没有漏写HWND句柄。
在不行,要不然就留下你的邮箱,我把我的程序给你发过去。
我的信箱是:[email protected]
谢谢了。