2008-10-07 18 views
7

मेरे पास एक एमएफसी ऐप है जो मैं कुछ हफ्तों के लिए काम कर रहा हूं, मैं लोड होने पर मुख्य फ्रेम के आयाम मैन्युअल रूप से सेट करना चाहता हूं, क्या कोई मुझे इसके साथ हाथ दे सकता है, विशेष रूप से कोड को कहां रखा जाए?एक एमएफसी विंडो का आकार

धन्यवाद!

उत्तर

8

तुम भी आकार सेट कर सकते हैं, या CWinApp व्युत्पन्न वर्ग 'InitInstance में। उस लाइन की तलाश करें जो pMainFrame->ShowWindow() कहती है, और उस पंक्ति से पहले pMainFrame->SetWindowPos() पर कॉल करें। यही वह जगह है जहां मैं हमेशा ऐसा करता हूं।

2

.. के साथ ..

CRect rect; 
SystemParametersInfo(SPI_GETWORKAREA,0,&rect,0); 
screen_x_size=rect.Width(); 
screen_y_size=rect.Height(); 

इन मानों का उपयोग एक्स और फिर अपने विंडो के Y आकार की गणना करने के लिए अपने स्क्रीन आकार का पता लगाएं

::SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,main_x_size,main_y_size,SWP_NOZORDER); 

कहाँ main_x_size और main_y_size अपने आकार रहे हैं।

+1

SPI_GETWORKAREA केवल प्राथमिक mnonitor के आकार हो जाता है। पूरे वर्चुअल डेस्कटॉप के लिए, इस का उपयोग करें: पूर्णांक desktopW = GetSystemMetrics (SM_CXVIRTUALSCREEN); int डेस्कटॉप एच = GetSystemMetrics (SM_CYVIRTUALSCREEN); –

2

मुझे लगता है कि आप PreCreateWindow देख रहे हैं और यह कि आपका ऐप संवाद आधारित नहीं है।

यह सीडब्ल्यूएनडी कक्षा का वर्चुअल सदस्य फ़ंक्शन है और इसे विंडो बनाने से ठीक पहले फ्रेमवर्क द्वारा बुलाया जाता है। तो यह आपके परिवर्तनों को रखने के लिए एक सही जगह है।

आप कुछ इस तरह लिखना चाहिए: CMainFrame::OnCreate() के भीतर से (SetWindowPos() साथ)

BOOL CMyWindow::PreCreateWindow(CREATESTRUCT& cs) 
{ 
    cs.cy = 640; // width 
    cs.cx = 480; // height 
    cs.y = 0; // top position 
    cs.x = 0; // left position 
    // don't forget to call base class version, suppose you derived you window from CWnd 
    return CWnd::PreCreateWindow(cs); 
}
+0

मैंने कोशिश की और बिल्कुल कोई प्रभाव नहीं पड़ा – masche

संबंधित मुद्दे