不知道怎么回事 文本框(CEdit) 无法输入文本

yhgfriend 2014-08-28 04:45:25
鼠标移动到文本框上会鼠标图标会变成一竖,说明系统检测到鼠标位置是文本框位置,但鼠标无法点击该文本框(或者说鼠标无法选中文本框),从而导致无法输入文本。
图中所示的文本是由数据库读入的数据,setwindowtext 及getwindowtext有效,就是鼠标无法选中文本框编辑文本
...全文
512 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yhgfriend 2014-08-29
  • 打赏
  • 举报
回复
用SPY++ 截取楼主位所示图 文本为 “root” 文本框消息如下:
1 可见鼠标在点击该文本框时能响应 左击消息 见<01421>
2 设置光标时返回了false 见<01427>
不知道有什么原因会导致设置光标失败(估计是设置成闪烁的光标)

微型蚂蚁 2014-08-29
  • 打赏
  • 举报
回复
引用 3 楼 yhgfriend 的回复:
[quote=引用 2 楼 piaobotudou 的回复:] 你点过之后,就算没闪烁,直接输入文本看看有没有文本被添加上去?
修改、添加不了文本,但同一个工程另一个页面的文本框却是正常的。我亦未修改文本框的任何属性,就是直接在窗口上添加文本框。[/quote] 不好判断是怎么回事,但是你可以用Spy++看看这个页面是否在上层。
yhgfriend 2014-08-29
  • 打赏
  • 举报
回复
1 标准CEdit控件,并且没有readonly属性 2 CEdit没有拦截消息 3 CEdit的父窗口SysSetupDlg 类没有拦截消息,定义见下 class SysSetupDlg : public CDialog { DECLARE_DYNAMIC(SysSetupDlg) public: SysSetupDlg(CWnd* pParent = NULL); // 标准构造函数 virtual ~SysSetupDlg(); MyEdit myedit; // 对话框数据 enum { IDD = IDD_DIALOG7 }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 DECLARE_MESSAGE_MAP() public: virtual BOOL OnInitDialog(); afx_msg void OnBnClickedButton3(); afx_msg void OnBnClickedButton2(); afx_msg void OnEnChangeEdit3(); }; 4 SysSetupDlg的父窗口是标准的CTabCtrl,没有拦截消息 5 CTabCtrl的父窗口SingleMonitor 类没有拦截消息 class SingleMonitor : public CDialog { public: SingleMonitor(void); ~SingleMonitor(void); DECLARE_MESSAGE_MAP() afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); public: MeterGroup *pMG; void UpdateMetersPage(MeterGroup * pmg); private: CTabCtrl TableCtrl; void OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult) ; MetersView *pMeterPage; SysSetupDlg SysSetup; public: afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnMove(int x, int y); // afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnLButtonDown(UINT nFlags, CPoint point); }; 6 SingleMonitor 的父窗口就是程序主窗体了CSpeedMonitorDlg类也没有拦截消息 class CSpeedMonitorDlg : public CDialog { // 构造 public: CSpeedMonitorDlg(CWnd* pParent = NULL); // 标准构造函数 ~CSpeedMonitorDlg(); // 对话框数据 enum { IDD = IDD_SPEEDMONITOR_DIALOG }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: HICON m_hIcon; // 生成的消息映射函数 virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP() public: CMenu MainMenu; ReadAllSensors ReadAllClass; // virtual BOOL PreTranslateMessage(MSG* pMsg); private: SingleMonitor *Monitor0; SensorsSetupNew * SensorsSetupPage; Sort SortDlg; MessageDlg MessageWindow; afx_msg LRESULT OnUserMsg_NeedUpdateMeterPage(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnUserMsg_NeedUpdateSortPage(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnUserMsg_NeedUpdateWindowPos(WPARAM wParam, LPARAM lParam); void GetSysDlgRect(void); public: afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnMainMenuSensorSetup(); afx_msg void OnClose(); afx_msg void OnMainMenuDlgPosRST(); };
猞猁狲 2014-08-29
  • 打赏
  • 举报
回复
你用的CEdit标准控件? 没有设置readonly吧。 你的这些edit控件没有设置截获消息的函数? 你的CTabCtrl切换时,相应的窗体切换正常吗?
yhgfriend 2014-08-29
  • 打赏
  • 举报
回复
为了查明原因我重载了一个CEdit类,并在左击消息里GetFocus();,发现获得焦点的控件不是Edit控件而是它背后的另一个窗体上的控件。 窗口上放置了一个TabCtrl,三个选项页分别对应三个dialog,切换选项卡时就是控制三个dialog的SW_SHOW与SW_HIDE,但另一个窗体明明已经隐藏了,怎么GetFocus();获取的却是那个隐藏起来的窗体上的与鼠标位置对应的控件呢? void MyEdit::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CWnd *t=GetFocus(); CEdit::OnLButtonDown(nFlags, point); }
yhgfriend 2014-08-28
  • 打赏
  • 举报
回复
引用 2 楼 piaobotudou 的回复:
你点过之后,就算没闪烁,直接输入文本看看有没有文本被添加上去?
修改、添加不了文本,但同一个工程另一个页面的文本框却是正常的。我亦未修改文本框的任何属性,就是直接在窗口上添加文本框。
微型蚂蚁 2014-08-28
  • 打赏
  • 举报
回复
你点过之后,就算没闪烁,直接输入文本看看有没有文本被添加上去?
yhgfriend 2014-08-28
  • 打赏
  • 举报
回复
通常正常的文本框反应是这样的 1 鼠标移动到文本框鼠标变成竖条光标 2 点击文本框 光标在文本框内闪烁 3 编辑文本 但我们文本框,只到了步骤1

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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