在Dialog中嵌入View的方法

 

在dialog中嵌入view也没有想象到的那么复杂,遵循如下步骤即可。

1. Create 一个 child类型的CFrameWnd,摆正位置。

2. 正确设置CCreateContext

3. Create 出View与CFrameWnd关联4. Show it!

 

看代码:

    CWnd* pPosWnd = GetDlgItem(IDC_VIEW_POSITON);
   CRect rect;
   pPosWnd->GetWindowRect(&rect);
   CRect rectView = rect;
   ScreenToClient(&rect);

   m_pFrame = new CFrameWnd();
   m_pFrame->Create(NULL, NULL, WS_CHILD | WS_VISIBLE, rect, this);

   m_pFrame->ScreenToClient(&rectView);

   m_pDoc = static_cast<CDlgViewDoc*>(RUNTIME_CLASS(CDlgViewDoc)->CreateObject());

   CCreateContext context;
   context.m_pNewViewClass = RUNTIME_CLASS(CDlgViewView);
   context.m_pCurrentDoc = m_pDoc;
   context.m_pNewDocTemplate = NULL;
   context.m_pLastView = NULL;
   context.m_pCurrentFrame = m_pFrame;

   CView* pView = static_cast<CView*>(RUNTIME_CLASS(CDlgViewView)->CreateObject() );
   if( !pView )
      return FALSE;
   if( !pView->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW, rectView, m_pFrame, AFX_IDW_PANE_FIRST,&context) )
      return FALSE;
   pView->ShowWindow(SW_SHOW);
   pView->OnInitialUpdate();

发布了175 篇原创文章 · 获赞 19 · 访问量 61万+
展开阅读全文

自定义对话框包含RecyclerView时遇到的context问题

07-07

我想做一个排行榜,就是用自定义的对话框包含一个recyclerView实现展示。以下是自定义的对话框类部分。在写到设置recyclerView的layoutManager的时候遇到问题,context不知道怎么处理,也就是“LinearLayoutManager layoutManager=new LinearLayoutManager(**this**);”的this报错,说: LinearLayoutManager(android.content.Context)in LinearLayoutManager cannot be applied to (com.example.schoolpet.MyDialog) 由于我对android的context实在还没能理解,求助各位 public class MyDialog extends Dialog { Activity context; public RecyclerView recyclerView; private View.OnClickListener mClickListener; private List<RankingList> rankingLists=new ArrayList<>(); public Context context1; public PetPage petPage; public MyDialog(Activity context) { super(context); this.context = context; } public MyDialog(Activity context, int theme, View.OnClickListener clickListener) { super(context, theme); this.context = context; this.mClickListener = clickListener; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 指定布局 this.setContentView(R.layout.ranking_list); initRankingList(); recyclerView=(RecyclerView)findViewById(R.id.rankingList_recyclerView); LinearLayoutManager layoutManager=new LinearLayoutManager(**this**); recyclerView.setLayoutManager(layoutManager); RankingListAdapter adapter=new RankingListAdapter(rankingLists); recyclerView.setAdapter(adapter); /* * 获取圣诞框的窗口对象及参数对象以修改对话框的布局设置, 可以直接调用getWindow(),表示获得这个Activity的Window * 对象,这样这可以以同样的方式改变这个Activity的属性. */ Window dialogWindow = this.getWindow(); WindowManager m = context.getWindowManager(); Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用 WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 获取对话框当前的参数值 p.height = (int) (d.getHeight() * 0.6); // 高度设置为屏幕的0.6 p.width = (int) (d.getWidth() * 0.8); // 宽度设置为屏幕的0.8 dialogWindow.setAttributes(p); this.setCancelable(true); } private void initRankingList() { RankingList rankingList=new RankingList(1,"林辉",30,30); rankingLists.add(rankingList); RankingList rankingList2=new RankingList(2,"林辉",30,30); rankingLists.add(rankingList); RankingList rankingList3=new RankingList(3,"林辉",30,30); rankingLists.add(rankingList); RankingList rankingList4=new RankingList(4,"林辉",30,30); rankingLists.add(rankingList); } } 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览