{"id":186,"date":"2014-07-09T02:41:52","date_gmt":"2014-07-09T11:41:52","guid":{"rendered":"http:\/\/blog.box.kr\/?p=186"},"modified":"2014-07-09T02:41:52","modified_gmt":"2014-07-09T11:41:52","slug":"using-a-context-menu-on-a-control","status":"publish","type":"post","link":"https:\/\/blog.box.kr\/?p=186","title":{"rendered":"Using a Context Menu on a Control"},"content":{"rendered":"<table border=\"0\" width=\"660\">\n<tbody>\n<tr>\n<td style=\"color: #000000;\">\n<table border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td style=\"color: #000000;\" width=\"100%\">\n<p class=\"paratitle\" style=\"font-weight: bold; color: #ff0000;\">Introduction<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"color: #000000;\" bgcolor=\"#FF0000\" width=\"100%\" height=\"1\"><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p class=\"parajust\">One of the primary characteristics of a control is to make its role appear obvious to the user. For example, by default, a button is used to click in order to start an action. Sometimes you may want to display a context menu. That is, if the user right-clicks, instead of a (left) click, you may want to display a particular menu. Many MFC controls don&#8217;t provide this functionality on their own; you would have to apply the action on the parent control.<\/p>\n<\/td>\n<td style=\"color: #000000;\" valign=\"top\"><ins><ins id=\"aswift_0_anchor\"><iframe id=\"aswift_0\" name=\"aswift_0\" width=\"300\" height=\"250\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/ins><\/ins><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table border=\"0\" width=\"846\">\n<tbody>\n<tr>\n<td style=\"color: #000000;\" width=\"838\">\n<ol>\n<li>Start Microsoft Visual C++ MFC Application named\u00a0<b>ControlContext<\/b><\/li>\n<li>Create it as Dialog Box without the AboutBox<\/li>\n<li>Set the\u00a0<b>Dialog Title<\/b>\u00a0to\u00a0<b>Context-Sensitive Menu on Controls<\/b><\/li>\n<li>Add a button to dialog box. Change its ID to IDC_SUBMIT_BTN and its Caption to Submit<\/li>\n<li>Add a check box to the dialog box. Change its ID to IDC_APPROVED_CHK and its Caption to Approved:<br \/>\n<table border=\"0\" width=\"560\">\n<tbody>\n<tr>\n<td style=\"color: #000000;\" align=\"center\" width=\"100%\">\n<pre style=\"color: blue;\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/www.functionx.com\/visualc\/howto\/images\/contextmenu1.gif?resize=282%2C130\" alt=\"\" width=\"282\" height=\"130\" border=\"0\" data-recalc-dims=\"1\" \/><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<li>Display the Add Resource dialog box and double-click Menu\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/www.functionx.com\/visualc\/dlgboxes\/addresource1.gif?resize=366%2C261\" alt=\"\" width=\"366\" height=\"261\" border=\"0\" data-recalc-dims=\"1\" \/><\/li>\n<li>Change the ID of the IDR_MENU1 to IDR_SUBMIT and create it as follows:\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/www.functionx.com\/visualc\/howto\/images\/contextmenu2.gif?resize=160%2C161\" alt=\"\" width=\"160\" height=\"161\" border=\"0\" data-recalc-dims=\"1\" \/><\/li>\n<li>Set their IDs to ID_POPUP_GREEN, ID_POPUP_RED, ID_POPUP_YELLOW, ID_POPUP_BLUE, ID_POPUP_WHITE, and ID_POPUP_FUCHSIA<\/li>\n<li>Display the dialog box and click its body<\/li>\n<li>In the Properties window, click the Messages button\u00a0<img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/www.functionx.com\/visualstudio\/buttons\/messages1.gif?resize=25%2C22\" alt=\"\" width=\"25\" height=\"22\" border=\"0\" data-recalc-dims=\"1\" \/><\/li>\n<li>Click the arrow of the WM_CONTEXTMENU combo box and implement the event as follows:<br \/>\n<table border=\"0\" width=\"742\">\n<tbody>\n<tr>\n<td style=\"color: #000000;\" width=\"734\">\n<pre style=\"color: blue;\">void CControlContextDlg::OnContextMenu(CWnd* \/*pWnd*\/, CPoint point)\n{\n\t\/\/ TODO: Add your message handler code here\n\t\/\/ Load the desired menu\n\tCMenu mnuPopupSubmit;\n\tmnuPopupSubmit.LoadMenu(IDR_SUBMIT);\n\n\t\/\/ Get a pointer to the button\n\tCButton *pButton;\n\tpButton = reinterpret_cast&lt;CButton *&gt;(GetDlgItem(IDC_SUBMIT_BTN));\n\n\t\/\/ Find the rectangle around the button\n\tCRect rectSubmitButton;\n\tpButton-&gt;GetWindowRect(&amp;rectSubmitButton);\n\n\t\/\/ Get a pointer to the first item of the menu\n\tCMenu *mnuPopupMenu = mnuPopupSubmit.GetSubMenu(0);\n\tASSERT(mnuPopupMenu);\n\n\t\/\/ Find out if the user right-clicked the button\n\t\/\/ because we are interested only in the button\n\tif( rectSubmitButton.PtInRect(point) ) \/\/ Since the user right-clicked the button, display the context menu\n\t\tmnuPopupMenu-&gt;TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<li>On the dialog box, double-click the Submit button and implement its Click event as follows:<br \/>\n<table border=\"0\" width=\"636\">\n<tbody>\n<tr>\n<td style=\"color: #000000;\" width=\"628\">\n<pre style=\"color: blue;\">void CControlContextDlg::OnBnClickedSubmitBtn()\n{\n\t\/\/ TODO: Add your control notification handler code here\n\tAfxMessageBox(\"You clicked the Submit button but ain't nothin' to do right now!!!\");\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<li>Display the IDR_SUBMIT menu<\/li>\n<li>Right-click the Green menu item and click Add Event Handler&#8230;<\/li>\n<li>Set the Class List to CControlContextDlg<\/li>\n<li>Display the IDR_SUBMIT menu<\/li>\n<li>Right-click the Red menu item and click Add Event Handler<\/li>\n<li>Set the Class List to CControlContextDlg<\/li>\n<li>Implement both events as follows:<br \/>\n<table border=\"0\" width=\"560\">\n<tbody>\n<tr>\n<td style=\"color: #000000;\" width=\"100%\">\n<pre style=\"color: blue;\">void CControlContextDlg::OnPopupGreen()\n{\n\t\/\/ TODO: Add your command handler code here\n\t<b>AfxMessageBox(\"You selected the Green menu item\");<\/b>\n}\n\nvoid CControlContextDlg::OnPopupRed()\n{\n\t\/\/ TODO: Add your command handler code here\n\t<b>AfxMessageBox(\"You selected the Red menu item\");<\/b>\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<li>Execute the application and right-click the Submit button:\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/www.functionx.com\/visualc\/howto\/images\/contextmenu4.gif?resize=284%2C169\" alt=\"\" width=\"284\" height=\"169\" border=\"0\" data-recalc-dims=\"1\" \/><\/li>\n<li>Right-click the Approved check box or one of the other buttons of the dialog box and notice that no context menu appears<\/li>\n<li>Close the dialog box and return to MSVC<\/li>\n<li>Display the Add Resource dialog box again. Click Menu and click Add<\/li>\n<li>Change the menu&#8217;s ID to IDR_APPROVAL and design it as follows:\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/www.functionx.com\/visualc\/howto\/images\/contextmenu3.gif?resize=176%2C103\" alt=\"\" width=\"176\" height=\"103\" border=\"0\" data-recalc-dims=\"1\" \/><\/li>\n<li>To be able to display the other menu, change the OnContextMenu() event as follows:<br \/>\n<table border=\"0\" width=\"797\">\n<tbody>\n<tr>\n<td style=\"color: #000000;\" width=\"789\">\n<pre style=\"color: blue;\">void CControlContextDlg::OnContextMenu(CWnd* \/*pWnd*\/, CPoint point)\n{\n\t\/\/ TODO: Add your message handler code here\n\t\/\/ Load the desired menu\n\tCMenu mnuPopupSubmit;\n\t<b>CMenu mnuPopupApproval;<\/b>\n\n\tmnuPopupSubmit.LoadMenu(IDR_SUBMIT);\n\t<b>mnuPopupApproval.LoadMenu(IDR_APPROVAL);<\/b>\n\n\t\/\/ Get a pointer to the button\n\tCButton *pButton, <b>*chkApproval<\/b>;\n\n\tpButton = reinterpret_cast&lt;CButton *&gt;(GetDlgItem(IDC_SUBMIT_BTN));\n\t<b>chkApproval = reinterpret_cast&lt;CButton *&gt;(GetDlgItem(IDC_APPROVED_CHK));<\/b>\n\n\t\/\/ Find the rectangle around the control\n\tCRect rectSubmitButton, <b>rectApprovalButton<\/b>;\n\n\tpButton-&gt;GetWindowRect(&amp;rectSubmitButton);\n\t<b>chkApproval-&gt;GetWindowRect(&amp;rectApprovalButton);<\/b>\n\n\t\/\/ Get a pointer to the first item of the menu\n\tCMenu *mnuPopupMenu = mnuPopupSubmit.GetSubMenu(0);\n\t<b>CMenu *mnuPopupMenu2 = mnuPopupApproval.GetSubMenu(0);<\/b>\n\tASSERT(mnuPopupMenu);\n\t<b>ASSERT(mnuPopupApproval);<\/b>\n\n\t\/\/ Find out if the user right-clicked a button\n\tif( rectSubmitButton.PtInRect(point) ) \/\/ Since the user right-clicked a button, display its context menu\n\t\tmnuPopupMenu-&gt;TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);\n\t<b>else if( rectApprovalButton.PtInRect(point) )\n\t\tmnuPopupMenu2-&gt;TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);<\/b>\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<li>Display the IDR_APPROVAL menu<\/li>\n<li>Right-click each menu item and click Add Event Handler. Set the Class List to CContextMenuDlg<\/li>\n<li>Implement the events as follows:<br \/>\n<table border=\"0\" width=\"560\">\n<tbody>\n<tr>\n<td style=\"color: #000000;\" width=\"100%\">\n<pre style=\"color: blue;\">void CControlContextDlg::OnPopupUnderreview()\n{\n\t\/\/ TODO: Add your command handler code here\n\t<b>CheckDlgButton(IDC_APPROVED_CHK, BST_INDETERMINATE);<\/b>\n}\n\nvoid CControlContextDlg::OnPopupApproved()\n{\n\t\/\/ TODO: Add your command handler code here\n\t<b>CheckDlgButton(IDC_APPROVED_CHK, BST_CHECKED);<\/b>\n}\n\nvoid CControlContextDlg::OnPopupRejected()\n{\n\t\/\/ TODO: Add your command handler code here\n\t<b>CheckDlgButton(IDC_APPROVED_CHK, BST_UNCHECKED);<\/b>\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<li>Test the application<\/li>\n<\/ol>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n","protected":false},"excerpt":{"rendered":"<p>Introduction One of the primary characteristics of a control is to make its role appear obvious to the user. For example, by default, a button is used to click in order to start an action. Sometimes you may want to display a context menu. That is, if the user right-clicks, instead of a (left) click, you may want to display a particular menu. Many MFC controls don&#8217;t provide this functionality on their own; you would have to apply the action on the parent control. Start Microsoft Visual C++ MFC Application named\u00a0ControlContext Create it as Dialog Box without the AboutBox Set the\u00a0Dialog Title\u00a0to\u00a0Context-Sensitive Menu on Controls Add a button to dialog box. Change its ID to IDC_SUBMIT_BTN and its Caption to Submit Add a check box to the dialog box. Change its ID to IDC_APPROVED_CHK and its Caption to Approved: Display the Add Resource dialog box and double-click Menu Change the ID of the IDR_MENU1 to IDR_SUBMIT and create it as follows: Set their IDs to ID_POPUP_GREEN, ID_POPUP_RED, ID_POPUP_YELLOW, ID_POPUP_BLUE, ID_POPUP_WHITE, and ID_POPUP_FUCHSIA Display the dialog box and click its body In the Properties window, click the Messages button\u00a0 Click the arrow of the WM_CONTEXTMENU combo box and implement the event [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false,"ngg_post_thumbnail":0,"spay_email":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true},"categories":[9,7],"tags":[],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5q9Zn-30","jetpack-related-posts":[{"id":234,"url":"https:\/\/blog.box.kr\/?p=234","url_meta":{"origin":186,"position":0},"title":"Using the WebBrowser Control from C\/C++","date":"2014-07-23","format":false,"excerpt":"Using the WebBrowser Control from C\/C++ \u00a0 This section describes some of the common implementations of the WebBrowser control, including: Adding Internet browsing functionality to your application Printing Web pages with the WebBrowser control Changing fonts with the WebBrowser control Working with WebBrowser events Adding Internet Browsing Functionality to Your\u2026","rel":"","context":"In &quot;C\/C++&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":180,"url":"https:\/\/blog.box.kr\/?p=180","url_meta":{"origin":186,"position":1},"title":"[ContextMenu]\ub3d9\uc801\uc73c\ub85c \ucf58\ud14d\uc2a4\ud2b8 \uba54\ub274 \uc0dd\uc131","date":"2014-07-09","format":false,"excerpt":"MFC \uc77c \uacbd\uc6b0 OnContextMenu\uc5d0\uc11c \uc544\ub798\uc640 \uac19\uc774 \uc0dd\uc131\ud55c\ub2e4. void\u00a0CCustomCtrl::OnContextMenu(CWnd\u00a0*\u00a0pWnd,\u00a0CPoint\u00a0point) { CMenu\u00a0Menu; if(\u00a0Menu.CreatePopupMenu() ==\u00a0TRUE) { for(i=0;\u00a0i<(UINT)m_StringArrary.GetCount();\u00a0i++) { Menu.AppendMenu(MF_STRING\u00a0|\u00a0MF_ENABLED,\u00a0POPUPID_RANGE_START\u00a0+\u00a0i,m_StringArrary.GetAt(i)); } Menu.AppendMenu(MF_SEPARATOR, 0,\u00a0\"\"); Menu.AppendMenu(MF_STRING\u00a0|\u00a0MF_ENABLED,\u00a0POPUPID_ENABLELOG,\u00a0POPUPSTR_ENABLELOG); Menu.AppendMenu(MF_STRING\u00a0|\u00a0MF_ENABLED,\u00a0POPUPID_DIABLELOG,\u00a0POPUPSTR_DISABLELOG); Menu.AppendMenu(MF_STRING\u00a0|\u00a0MF_ENABLED,\u00a0POPUPID_RESET,\u00a0POPUPSTR_RESET); Menu.AppendMenu(MF_STRING\u00a0|\u00a0MF_ENABLED,\u00a0POPUPID_ACTIVEUIID,\u00a0POPUPSTR_ACTIVEUIID); Menu.TrackPopupMenu(TPM_LEFTALIGN\u00a0|\u00a0TPM_RIGHTBUTTON,\u00a0point.x,\u00a0point.y,\u00a0this); } } \uadf8\ub9ac\uace0 \uc704 \uba54\uc2dc\uc9c0\ub97c \ucc98\ub9ac\ud558\uae30 \uc704\ud574 \uba54\uc2dc\uc9c0 \ub9f5\uc5d0\ub2e4\uac00 \uc544\ub798\uc640 \uac19\uc774 \uc120\uc5b8\ud55c\ub2e4. BEGIN_MESSAGE_MAP(CCustomCtrl,\u00a0COleControl) ON_COMMAND_RANGE(POPUPID_RANGE_START,\u00a0POPUPID_RANGE_END,\u00a0OnCommandRange) ON_COMMAND(POPUPID_DIABLELOG,\u00a0OnDisableLog) ON_COMMAND(POPUPID_ENABLELOG,\u00a0OnEnableLog) ON_COMMAND(POPUPID_RESET,\u00a0OnResetCommand) ON_COMMAND(POPUPID_ACTIVEUIID,\u00a0OnGetActiveUIIDCommand) END_MESSAGE_MAP() ON_COMMAND_RANGE \uc758 \uacbd\uc6b0\ub294 \uc544\ub798\uc640 \uac19\uc774 \ucc98\ub9ac\ud55c\ub2e4. void\u00a0CCusomCtrl::OnCommandRange(UINT\u00a0uiCommandID)\u2026","rel":"","context":"In &quot;C\/C++&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":248,"url":"https:\/\/blog.box.kr\/?p=248","url_meta":{"origin":186,"position":2},"title":"[\uac1c\ubc1c\/VC++] WebBrowser Control \uc774\ubca4\ud2b8 \uc5f0\uacb0 &#8211; C++","date":"2014-07-23","format":false,"excerpt":"IT\/\uac1c\ubc1c\u00a02011\/02\/10 12:12 [\uac1c\ubc1c\/VC++] WebBrowser Control \uc774\ubca4\ud2b8 \uc5f0\uacb0 - C++ WebBrowser Control IDispatch IWebBrowser2 .ReadyState READYSTATE_COMPLETE .Navigate2() .get_Document() \/\/ IDispatch -> IHTMLDocument2 .get_StatusText() on DownloadBegin on DocumentComplete on DownloadComplete IOleObject \u00a0 IHTMLWindow2 IHTMLDocument2 .get_all() .get_parentWindow() \/\/ IHTMLWindow2 IHTMLElementCollection .item() .tags \/\/ IHTMLElementCollection IHTMLElement a connectable object IConnectionPointContainer .FindConnectionPoint() \/\/ DHTMLElementEvents2 DHTMLElementEvents2\u2026","rel":"","context":"In &quot;C\/C++&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":875,"url":"https:\/\/blog.box.kr\/?p=875","url_meta":{"origin":186,"position":3},"title":"Install GDB on OSX Yosemite","date":"2015-06-06","format":false,"excerpt":"First things first - you need to install brew. It's a homebrew package installer that can be found here. Then in your terminal, run brew install gdb This will install the latest gdb. but, if you are show error like this \"Error: No available formula for gdb\"c Homebrew does not\u2026","rel":"","context":"In &quot;\uae30\uc220\uc790\ub8cc&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":184,"url":"https:\/\/blog.box.kr\/?p=184","url_meta":{"origin":186,"position":4},"title":"[Tip] CMenu\ub97c \uc774\uc6a9\ud558\uc5ec \ud31d\uc5c5\uba54\ub274 \ub9cc\ub4e4\uae30","date":"2014-07-09","format":false,"excerpt":"\u00a0\ud2b8\ub799\ubc31 \uc8fc\uc18c :\u00a0http:\/\/www.tipssoft.com\/bulletin\/tb.php\/FAQ\/244 \u00a0 \ud301\uc2a4\uc18c\ud504\ud2b8\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \ud504\ub85c\uadf8\ub798\ubc0d\uacfc \uad00\ub828\ub41c \uc790\ub8cc\ub098 \uc815\ubcf4\ub4e4\uc744 \ubb34\ub2e8\uc73c\ub85c \ubcf5\uc81c\ud558\uac70\ub098 \uac8c\uc7ac\ud558\ub294 \ud589\uc704\ub294 \uc0c1\ud638\uac04\uc758 \uc2e0\ub8b0\ub97c \ubb34\ub108\ub728\ub9ac\ub294 \ud589\uc704\uc774\uba70, \ubc95\uc801\uc778 \ubb38\uc81c\ub97c \uc57c\uae30\ud560 \uc218 \uc788\uc73c\ubbc0\ub85c \uac01\ubcc4\ud55c \uc8fc\uc758\ub97c \ub2f9\ubd80\ub4dc\ub9bd\ub2c8\ub2e4. *\u00a0\ud301\uc2a4\uc18c\ud504\ud2b8 \uc800\uc791\uad8c \uc815\ucc45 \ubcf4\uae30 -\u00a0\u00a0http:\/\/www.tipssoft.com\/bulletin\/tb.php\/FAQ\/637 \uc774 \uc790\ub8cc\ub4e4\uc740\u00a0\ud301\uc2a4\uc18c\ud504\ud2b8\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 [ \uc54c\uc9dc\ubc30\uae30 ] \ud504\ub85c\uadf8\ub7a8\uc744 \uc774\uc6a9\ud558\uba74 \ub354 \ud3b8\ub9ac\ud558\uac8c \ubcfc\uc218 \uc788\uc2b5\ub2c8\ub2e4. * \uc54c\uc9dc\ubc30\uae30 \ud504\ub85c\uadf8\ub7a8 \ubc1b\uae30\u00a0-\u00a0\u00a0http:\/\/www.tipssoft.com\/bulletin\/tb.php\/QnA\/8406 \ud2b9\uc815 \ubc84\ud2bc\uc744 \ub9c8\uc6b0\uc2a4\ub85c\u2026","rel":"","context":"In &quot;C\/C++&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":391,"url":"https:\/\/blog.box.kr\/?p=391","url_meta":{"origin":186,"position":5},"title":"[\ud38c][android] GCM (2) \u2013 \ud074\ub77c\uc774\uc5b8\ud2b8 \ub9cc\ub4e4\uae30","date":"2014-09-15","format":false,"excerpt":"\uc774\uc804 \uae00\uc5d0\uc11c \uc774\uc5b4\uc9d0 \u00a0 Google Play Service \uc5f0\uacb0\ud558\uae30 \uc774\ud074\ub9bd\uc2a4 \u2013 Windows \u2013 Android SDK Manager \ub97c \uc5f0\ub2e4. \ubaa9\ub85d\uc758 \uc81c\uc77c \uc544\ub798\ucabd\uc5d0\u00a0Goole Play Services\u00a0\uc120\ud0dd\ud55c\ub2e4. \uc624\ub978\ucabd \uc544\ub798\uc758 Install \ubc84\ud2bc\uc744 \ub204\ub978\ub2e4. \uc124\uce58\uac00 \ub05d\ub098\uba74 \uc774\ud074\ub9bd\uc2a4\uc758 \ud504\ub85c\uc81d\ud2b8 \ubaa9\ub85d\uc5d0\uc11c \uc624\ub978\ucabd \ud074\ub9ad\ud574\uc11c import \uba54\ub274\ub97c \uc120\ud0dd\ud558\uace0,{sdk}\/extras\/google\/google_play_services\/ \ub97c \uc120\ud0dd\ud55c\ub2e4. \uc791\uc131\ud560 \ud504\ub85c\uc81d\ud2b8\uc758 \uc624\ub978\ucabd \ud074\ub9ad \uba54\ub274 \u2013 properties \u2013 Android \u2013 Library\u2026","rel":"","context":"In &quot;\ucc38\uace0\ub97c \uc704\ud55c \uc800\uc7a5\ubb3c&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/blog.box.kr\/index.php?rest_route=\/wp\/v2\/posts\/186"}],"collection":[{"href":"https:\/\/blog.box.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.box.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.box.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.box.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=186"}],"version-history":[{"count":0,"href":"https:\/\/blog.box.kr\/index.php?rest_route=\/wp\/v2\/posts\/186\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.box.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=186"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.box.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=186"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.box.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=186"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}