VC++编写一个窗口,根据鼠标所在位置的不同,单击左键时响应不同的绘图

作者&投稿:舒战 (若有异议请与网页底部的电邮联系)
.用VC++编写一个应用程序,当在视图中单击鼠标时,在单击处输出鼠标的坐标~

在MFC中,编写一个应用程序,当在视图中单击鼠标时,在单击处显示鼠标的坐标

// 下面代码实现暂停计时器并延迟20秒再启动
killtime(1); // 停止1号计时器
SetTimer(2,20000,NULL); // 启动2号计时器,20秒后将触发OnTimer函数
// 下面是OnTimer函数实现
void OnTimer(UINT nIDEvent)
{
switch (nIDEvent){
case 1:
// 完成定时器1的功能
break;
case 2:
KillTime(2); // 杀掉定时器2
SetTimer(1,Step,NULL); // 启动定时器1
break;
}
}

在编程时,会经常使用到定时器。使用定时器的方法比较简单,通常告诉Windows一个时间间隔,然后WINDOWS以此时间间隔周期性触发程序。通常有两种方法来实现:发送WM_TIMER消息和调用应用程序定义的回调函数。
1.1 用WM_TIMER来设置定时器
先请看SetTimer这个API函数的原型
UINT_PTR SetTimer(
HWND hWnd, // 窗口句柄
UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器
UINT uElapse, // 时间间隔,单位为毫秒
TIMERPROC lpTimerFunc // 回调函数
);
例如
SetTimer(m_hWnd,1,1000,NULL); //一个1秒触发一次的定时器
在MFC程序中SetTimer被封装在CWnd类中,调用就不用指定窗口句柄了,例如:
UINT SetTimer(1,100,NULL);
函数反回值就是第一个参数值1,表示此定时器的ID号。
第二个参数表示要等待100毫秒时间再重新处理一次。第三个参数在这种方法中一般用NULL。
注意:设置第二个参数时要注意,如果设置的等待时间比处理时间短,程序就会出问题了。
1.2 调用回调函数
此方法首先写一个如下格式的回调函数
void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime);
然后再用SetTimer(1,100,TimerProc)函数来建一个定时器,第三个参数就是回调函数地址。
二、多个定时器的实现与应用
我们在安装定时器时都为其指定了ID,使用多个定时器时,该ID就发挥作用了。
不使用MFC时,当接收到WM_TIMER消息,WPARAM wParam中的值便是该定时器的ID
使用MFC时就更简单了,我们为其增加WM_TIME的消息处理函数OnTimer即可,请看如下例子
void CTimerTestDlg::OnTimer(UINT nIDEvent)
{
switch (nIDEvent)
{
case 24: ///处理ID为24的定时器
Draw1();
break;
case 25: ///处理ID为25的定时器
Draw2();
break;
}
CDialog::OnTimer(nIDEvent);
}
当你用回调函数时,我们可以根据nTimerid的值来判断是哪个定时器,例如:
void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime)
{
switch(nTimerid)
{
case 1: ///处理ID为1的定时器
Do1();
break;
case 2: ///处理ID为2的定时器
Do2();
break;
}
}
三、取消定时器
不再使用定时器后,我们应该调用KillTimer来取消定时,KillTimer的原型如下
BOOL KillTimer(
HWND hWnd, // 窗口句柄
UINT_PTR uIDEvent // ID
);
在MFC程序中我们可以直接调用KillTimer(int nIDEvent)来取消定时器。

void CXXXDlg::OnLButtonDown(UINT nFlags, CPoint point) 
{
COLORREF color=RGB(rand()%255,rand()%255,rand()%255);
CDC* dc=GetDC();
CPen pen(PS_SOLID,1,color);

int r=rand()%80+10;
CBrush brush(color);
dc->SelectObject(brush);
dc->SelectObject(pen);
CPoint pt[15];

int type=rand()%6;
int df;
switch(type)
{
case 0:
dc->Ellipse(point.x-r,point.y-r,point.x+r,point.y+r);
break;
case 1:
dc->Rectangle(point.x-r,point.y-r,point.x+r,point.y+r);
break;
case 2:
dc->RoundRect(point.x-r,point.y-r,point.x+r,point.y+r,20,20);
break;
case 3:
case 4:
case 5:
df=rand()%7+3;
for(int i=0;i<df;i++)
{
pt[i].x=point.x+(int)((float)r*cos((i-90)*3.1415926/((float)df/2.0)));
pt[i].y=point.y+(int)((float)r*sin((i-90)*3.1415926/((float)df/2.0)));
}
CRgn hrgn;
dc->BeginPath();
dc->MoveTo(pt[0]);
for(i=0;i<df-1;i++)
{
dc->LineTo(pt[i+1]);
}
dc->LineTo(pt[0]);
dc->CloseFigure();
dc->EndPath();
hrgn.CreateFromPath(dc);
dc->FillRgn(&hrgn,&brush);
}
CDialog::OnLButtonDown(nFlags, point);
}


用vb可以做到的


请大家帮我用C语言编写一个窗口化的软件,
请大家帮我用C语言编写一个窗口化的软件, 随便什么软件都行,只要是窗口化的就可以了。... 随便什么软件都行,只要是窗口化的就可以了。 展开  我来答 2个回答 #热议# 网文质量是不是下降了?champking 2009-07-20 · TA获得超过140个赞 知道答主 回答量:41 采纳率:0% 帮助的人:17.7万 ...

怎样用c\/c++实现窗口化
include <windows.h> include <stdio.h> LRESULT CALLBACK WinSunProc(HWND hwnd, \/\/ handle to window UINT uMsg, \/\/ message identifier WPARAM wParam, \/\/ first message parameter LPARAM lParam \/\/ second message parameter...

如何用C语言编写一个窗体应用程序?
要用C语言编写一个窗体应用程序需要调用系统或第三方提供的API函数,一般的步骤是:定义窗口类 注册窗口类 创建窗口 显示、更新窗口 进行消息循环,不断处理窗口消息

谁能教我 怎么用C语言编写 一个窗口? 求源代码 加上注释 谢谢
include <stdio.h>#include <stdlib.h>#include <windows.h>int main(){printf("输入一个字符, 就会出现窗口");getch();MessageBox(NULL,"这就是你要的窗口!这就是你要的窗口!\\n这就是你要的窗口!这就是你要的窗口!\\n这就是你要的窗口!这就是你要的窗口!","hahah",MB_ICONERROR | MB...

如何用C语言编程出可视化界面?
hwnd, &ps);GetClientRect(hwnd, &rect);DrawText(hdc, TEXT("第一个C语言窗口程序!"), -1, &rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER);EndPaint(hwnd, &ps);return 0;case WM_DESTROY:PostQuitMessage(0);return 0;} return DefWindowProc(hwnd, message, wParam, lParam);} ...

能用标准的C语言做MFC的窗口程序吗吗?
WinAPI 来写,WinAPI 可以写成 C 风格,也可以写成 C++ 风格。快速入门自学材料见:http:\/\/www.winprog.org\/tutorial\/ 窗口界面的 “控件”直接写资源文件也可以。但无论如何没有 MFC ( 用Visual Studio) 建立方便。即使是 C 风格 WinAPI 程序,命名时 还是要用 .cpp, 便于编译器处理。

c++如何编写窗口呀
\/\/ CreateWindows.cpp : 定义应用程序的入口点。\/\/ include "stdafx.h"include "CreateWindows.h"define MAX_LOADSTRING 100 \/\/ 全局变量:HINSTANCE hInst; \/\/ 当前实例 TCHAR szTitle[MAX_LOADSTRING]; \/\/ 标题栏文本 TCHAR szWindowClass[MAX_LOADSTRING]; \/\/ 主窗口类名 \/\/ 此代码模...

c语言窗口程序,带可输入的文本框
include<stdio.h> void main(){ char a;while((a=getchar())!='\\0')printf("%c",a);}

怎样用c语言写一个图形界面
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow ){ static TCHAR szAppName[] = TEXT("MyWindow") ;HWND hwnd ;MSG msg ;WNDCLASS wndclass ; \/\/声明一个窗口类对象 \/\/以下为窗口类对象wndclass的属性 wndclass.style = CS_HREDRAW | CS_VR...

C++语言建立无数个窗口的源代码
1971年,瑞士联邦技术学院N.Wirth教授发明了Pascal语言。Pascal语言语法严谨,层次分明,程序易写,具有很强的可读性,是第一个结构化的编程语言 世界上第一种计算机高级语言是诞生于1954年的FORTRAN语言。之后出现了多种计算机高级语言。1970年,AT&T的Bell实验室的D.Ritchie和K.Thompson共同发明了C语言。研...

离石区15371205165: 使用vc++编写图像处理程序 想要实现在程序状态栏上显示鼠标所在像素灰度值的功能 请问如何实现? -
闭炕蔗糖: 要想捕获当前线程内(也就是当前CxxxApp)所有窗口上光标所在的像素颜色,需要重载CxxxApp的PreTranslateMessage函数,加:if ( pMSG->message == WM_MOUSEMOVE) { CPoint ptScreen; GetCursorPos(&ptScreen); CWnd*DeskWnd ...

离石区15371205165: Visual - C++ 编写一个绘图程序,程序运行后,当用户在客户区窗口按下鼠标左 -
闭炕蔗糖: 建一个CLine类,记录一条线的所有点坐标.每次鼠标按下,新建一个CLine对象,在鼠标OnMove消息把点坐标加入这个CLine对线里.鼠标提起,完成一个CLine对线.在OnPaint把这些CLine都绘制一遍,实现刷新.--------VC很老了,学点别的吧.

离石区15371205165: VC++单文档如何设置鼠标位置于相对于窗口的某个位置,如CPoint point -
闭炕蔗糖: ::SetCursorPos(); 这个函数是设置鼠标的屏幕位置.在OnMouseMove函数中的这个point参数,其实是先获取的屏幕鼠标位置,windows然后把这个位置转换成相对于程序窗口的位置.你要做的就是再把它转换回去,用ClientToScreen

离石区15371205165: vc++获取某游戏窗口句柄并控制鼠标单击窗口内某一坐标,代码怎么写,求一例子.就用QQ当例子吧!获 -
闭炕蔗糖: 1:通过窗口名称查找窗口句柄使用FindWindowEx,具体参考MSDN:http://msdn.microsoft.com/EN-US/library/windows/desktop/ms633500(v=vs.85).aspx2:实现鼠标的模拟点击可以通过APISendMessage,参考 MSDN: http://msdn.microsoft.com...

离石区15371205165: vc++ 如何获取鼠标所在行?(不是点击) -
闭炕蔗糖: listctrl 支持 hover select 属性.不需要扩展控件,绑定一个控件变量 CListCtrl m_myListCtrl;( 这个应该会吧,对话框模式下,选listctrl,右键添加变量....,SDI/MDI模式,如果创建listctrl就应该有控件变量).在OnInitDialog里面添加 m_myListCtrl.SetExtendedStyle( LVS_EX_TRACKSELECT | LVS_EX_ONECLICKACTIVATE); 就行了.listctrl就会具有悬停高亮特性.

离石区15371205165: 求助,如何用获取当前鼠标所在窗口的句柄及窗口标题,c或c++ -
闭炕蔗糖: #include <windows.h> int main() { while (1) { POINT pNow = {0,0}; if (GetCursorPos(&pNow)) // 获取鼠标当前位置 { HWND hwndPointNow = NULL; hwndPointNow = WindowFromPoint(pNow); // 获取鼠标所在窗口的句柄 if (hwndPointNow) { //cout...

离石区15371205165: .用VC++编写一个应用程序,当在视图中单击鼠标时,在单击处输出鼠标的坐标 -
闭炕蔗糖: 在MFC中,编写一个应用程序,当在视图中单击鼠标时,在单击处显示鼠标的坐标

离石区15371205165: 如何用C++处理带鼠标功能的键盘程序 -
闭炕蔗糖: 提供一下思路参考,具体代码自己写:看界面风格,应该可以使用VC++6.0的基于对话框的程序实现.假定光标在主对话框中操作实现以上功能:1. 鼠标左键和右键按下时使ML或MR背景变绿:主对话框程序响应WM_LBUTTONDOWN和WM_...

离石区15371205165: VC++在状态栏上显示鼠标的位置 -
闭炕蔗糖: 楼上说的有一定的局限性,就是只有鼠标在本窗口中的时候有效,移出本窗口的时候,就不起作用了.如果想跟踪鼠标在屏幕的任何位置,那就要用到3中方法:简单一种: 设定一个定时器,然...

离石区15371205165: VC++6.0 MFC工程 求一个窗口程序代码,要求双击鼠标左键桌面显示"HELLO". -
闭炕蔗糖: 以对话框工程 为例 添加 虚函数 PreTranslateMessage BOOL CMfcdlgDlg::PreTranslateMessage(MSG* pMsg) {// TODO: Add your specialized code here and/or call the base class if( pMsg->message == WM_LBUTTONDBLCLK ) { CWindowDC dc(CWnd::GetDesktopWindow()); dc.TextOut(20,50, CString("输出测试")); } return CDialog::PreTranslateMessage(pMsg); }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网