我想电击文本(Static)时,弹出一个MessageBox,Who can help me!

joknan 2001-05-28 03:52:00
就是让文本实现按钮功能,
或者点Button时它不要按下去。

我这里有一个//HyperLink static control // Copyright Chris Maunder, 1997
但不会用:(

...全文
228 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
leizhengdeng 2001-08-10
  • 打赏
  • 举报
回复
最先回答的得0分,呵呵
joknan 2001-05-29
  • 打赏
  • 举报
回复
thank u!
joknan 2001-05-29
  • 打赏
  • 举报
回复
thank u!
tiongkohlang 2001-05-28
  • 打赏
  • 举报
回复
#include <windows.h>

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wp, LPARAM lp)
{
switch (message)
{
case WM_CREATE:
CreateWindow("STATIC","Click me.",WS_CHILD|WS_VISIBLE|SS_NOTIFY|SS_SIMPLE,0,0,
100,100,hwnd,(HMENU)40001,((CREATESTRUCT *)lp)->hInstance,NULL);
return 0;
case WM_COMMAND:
switch (LOWORD(wp))
{
case 40001:
if (HIWORD(wp)==STN_CLICKED)
{
MessageBox(hwnd,"User clicked it","User clicked it",MB_OK);
}
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, message, wp, lp);
}
return 0;
}



int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{

MSG msg;
WNDCLASSEX wcex;
HWND hwnd;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = "WindowClass";
wcex.hIconSm = wcex.hIcon;
if (!RegisterClassEx(&wcex))
return 0;

hwnd = CreateWindow("WindowClass", "Static demo", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

if (!hwnd)
return FALSE;

ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);


while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return msg.wParam;
}


tiongkohlang 2001-05-28
  • 打赏
  • 举报
回复
其实你可以就用STATIC类,问题是你创建它的时候要加上SS_NOTIFY风格,然后就可以响应SN_CLICKED通知了。
joknan 2001-05-28
  • 打赏
  • 举报
回复
OK!谢谢各位,谢谢!
joknan 2001-05-28
  • 打赏
  • 举报
回复
OK!谢谢各位,谢谢!
chinaprogrammer 2001-05-28
  • 打赏
  • 举报
回复
在ClassWizard里直接映射其BN_CLICKED消息.
前提是,改掉它的缺省名字IDC_STATIC,在WIZARD里才能看到它,才能进行消息映射.

void CDialog11Dlg::OnStatic11()
{
AfxMessageBox("Who can help me!");
}


当然也可以手工映射.
guostong 2001-05-28
  • 打赏
  • 举报
回复
改变 ID 号
sxbyl 2001-05-28
  • 打赏
  • 举报
回复
电击文本???多高电压??呵呵~~~
首先,你的控件ID不能是默认的ID_STATIC,改一个,比如ID_STATIC_TEST,属性也要改一下,选中Styles里的Notify项,然后你就可以建立消息映射了。至于CHyperLink,不是MFC提供的,一般都是自己从CStatic派生一个出来,基本实现方法都差不多,我把我的帖出来
// HyperLink.cpp : implementation file
//

#include "stdafx.h"
#include "EasyObject.h"
#include "HyperLink.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CHyperLink

CHyperLink::CHyperLink()
{
m_bNeedUnderLine=TRUE;
m_bHasCapture=false;
m_colorNormal=RGB(0,0,255);
m_colorHot=RGB(200,0,0);
m_hCursorHand=NULL;
m_hCursorArrow=NULL;
}

CHyperLink::~CHyperLink()
{
}

void CHyperLink::Init()
{
ModifyStyle(0,SS_NOTIFY); //设置该控件可以被发送Notify消息
CPaintDC dc(this);
CString strTemp;
GetWindowText(strTemp);
CSize sizeText=dc.GetTextExtent(strTemp);
SetWindowPos(NULL,0,0,sizeText.cx,sizeText.cy,SWP_NOMOVE);
HMODULE hModule=GetModuleHandle("MyObject.dll");
if(hModule==NULL)
{
AfxMessageBox(CEasyObject::GetErrorString(GetLastError()));
return ;
}
m_hCursorHand=LoadCursor(hModule,MAKEINTRESOURCE(IDC_HAND));
if(m_hCursorHand==NULL)
{
AfxMessageBox(CEasyObject::GetErrorString(GetLastError()));
return ;
}
m_hCursorArrow=AfxGetApp()->LoadStandardCursor(IDC_ARROW);
}

BEGIN_MESSAGE_MAP(CHyperLink, CStatic)
//{{AFX_MSG_MAP(CHyperLink)
ON_WM_SETCURSOR()
ON_WM_PAINT()
ON_WM_MOUSEMOVE()
ON_CONTROL_REFLECT(BN_CLICKED, OnClicked)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CHyperLink message handlers

BOOL CHyperLink::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// TODO: Add your message handler code here and/or call default
::SetCursor(m_hCursorHand);
return TRUE;
}

void CHyperLink::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
CString strText;
LOGFONT fontLog;
CFont fontNow;
GetWindowText(strText);
dc.SetBkColor(GetSysColor(COLOR_SCROLLBAR));
CFont *pRreFont=dc.GetCurrentFont();
pRreFont->GetLogFont(&fontLog);
if(m_bHasCapture)
{
fontLog.lfUnderline=m_bNeedUnderLine;
fontNow.CreateFontIndirect(&fontLog);
dc.SelectObject(fontNow);
dc.SetTextColor(m_colorHot);
}
else
{
fontLog.lfUnderline=FALSE;
fontNow.CreateFontIndirect(&fontLog);
dc.SelectObject(fontNow);
dc.SetTextColor(m_colorNormal);
}
dc.TextOut(0,0,strText);

// Do not call CStatic::OnPaint() for painting messages
}

void CHyperLink::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CRect rect;
int n=10;
GetClientRect(rect);
if(m_bHasCapture==false)
{
SetCapture();
m_bHasCapture=true;
RedrawWindow();
}
else
{
if(rect.PtInRect(point)==FALSE)
{
ReleaseCapture();
m_bHasCapture=false;
RedrawWindow();
}
}
CStatic::OnMouseMove(nFlags, point);
}

void CHyperLink::OnClicked()
{
// TODO: Add your control notification handler code here
CString strOperator;
CString strTemp;
if(m_strHyperLink.IsEmpty())
{
CString strTitle;
GetWindowText(strTitle);
strOperator=strTitle;
}
else
strOperator=m_strHyperLink;
strTemp=strOperator;
strTemp.TrimLeft();
strTemp.MakeLower();
if(strTemp.Find("file://")==0 || strTemp.Find("http://")==0
|| strTemp.Find("gopher://")==0 || strTemp.Find("ftp://")==0)
{
ShellExecute(NULL,NULL,"IEXPLORE",strOperator,NULL,SW_SHOWDEFAULT);
}
else if(strTemp.Find("@")!=-1 && strTemp.Find("mailto:")!=0)
{
ShellExecute(NULL,"open","mailto:"+strOperator,NULL,NULL,SW_SHOWDEFAULT);
}
else
{
ShellExecute(NULL,"open",strOperator,NULL,NULL,SW_SHOWDEFAULT);
}
m_bHasCapture=false;
RedrawWindow();
}

void CHyperLink::SetHyperLink(const CString &strLink)
{
m_strHyperLink=strLink;
}

void CHyperLink::PreSubclassWindow()
{
// TODO: Add your specialized code here and/or call the base class
Init();
CStatic::PreSubclassWindow();
}
sunraywang 2001-05-28
  • 打赏
  • 举报
回复
静态文本选择notify属性,对其消息相应MessageBox(……),ok
joknan 2001-05-28
  • 打赏
  • 举报
回复
请各位说的详细一点好吗?
我可是个极品菜鸟!
最好给个小例子,谢谢!
poweruser 2001-05-28
  • 打赏
  • 举报
回复
从CButton派生应该可以的

直接用ClassWizard添加static的消息不行
wzg_harbin 2001-05-28
  • 打赏
  • 举报
回复
弄一个平按钮,伪装成label
yangmajituipo 2001-05-28
  • 打赏
  • 举报
回复
it's easy,leizhengdeng(leizhengdeng) is right

yangming_ok 2001-05-28
  • 打赏
  • 举报
回复
从CButton派生自己的类,然后重写OnEnter()事件!
joknan 2001-05-28
  • 打赏
  • 举报
回复

能讲讲CHyperLink吗,它是VC带的吗?

还有STATIC改成什么呢,请说具体一点好吗?
iProgram 2001-05-28
  • 打赏
  • 举报
回复
有多种方法,最好的是从CButton派生自己的类,用Ownerdraw实现平的Button,达到CStatic效果,同时还能相应MouseClick
leizhengdeng 2001-05-28
  • 打赏
  • 举报
回复
我用过CHyperLink类,不用控件
leizhengdeng 2001-05-28
  • 打赏
  • 举报
回复
将STATIC的ID号改名,用CLASSWIZARD添加消息与BUTTON一样
加载更多回复(1)

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧